Autor Beitrag
derDoc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 623

Win Vista Prof
D2007 Prof
BeitragVerfasst: Sa 26.10.02 10:19 
Hallo

ich habe hier ein Memo welches, sollte eine Windowsmessage WM_DROPFILES kommen mittels DragQueryFile den Dateinamen identifiziert und dann mit Memo1.Lines.LoadFromFile(name) öffnet.

Nun zu meinem Problem:

Das Programm läuft ohne die letzten Sachen wunderbar, wenn ich aber die Sache mit der Message mache und F9 drücke ist alles sichtbar außer dem Memo und sobald ich die Form schließe bekomme ich einen EOSError.

Was mache ich falsch?

hier noch der Code:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
unit UMemo;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  StdCtrls, ComCtrls, DesignIntf, shellAPI, RTLConsts, Dialogs,
  CoolTrayIcon, Menus;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure AddFile(dateiname: String);
    procedure WindowProc(var Nachricht: TMessage); Message WM_DROPFILES;
    procedure WMDROPFILES(var Msg: TMessage);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  OldWindowProc: TWndMethod;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldWindowProc := Memo1.WindowProc;
  Memo1.WindowProc := WindowProc;
  DragAcceptFiles(Memo1.Handle, true);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Memo1.WindowProc := OldWindowProc;
end;

procedure TForm1.AddFile(dateiname: String);
begin
  Memo1.Lines.LoadFromFile(dateiname);
end;

procedure TForm1.WindowProc(var Nachricht: TMessage);
begin
  if Nachricht.Msg = WM_DROPFILES then
    begin
      WMDROPFILES(Nachricht);
      OldWindowProc(Nachricht); 
    end;
end;

procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
  dateiname: PChar;
  i, groesse, anzahl: Integer;
begin
  dateiname := '';
  anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, dateiname, 255);
  for i := 0 to anzahl - 1 do
    begin
      groesse := DragQueryFile(Msg.WParam, i, nil, 0) + 1;
      dateiname := StrAlloc(groesse);
      DragQueryFile(Msg.WParam, i, dateiname, groesse);
      if FileExists(dateiname) then
        begin
          AddFile(dateiname);
        end;
      StrDispose(dateiname);
    end;
  DragFinish(Msg.WParam);
end;

end.