Autor Beitrag
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 27.12.02 10:37 
Hallo,

für dieses Beispiel benötigen wir nur eine Listbox (Listbox1) auf unserem Formular (Form1). Folgende Zeile(n) im Interface Teil einfügen/erweitern:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Type
  TForm1 = class(TForm)
    ListBox1: TListBox;
  protected
    Procedure WMDropFiles (Var aMsg: tMessage);  message WM_DROPFILES;
  end;

Die Implementation der Procedure WMDropFiles wird wie folgt im Implementations Teil der Unit implementieren:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
Procedure TForm1.WMDropFiles (Var aMsg: tMessage);
Var
  Idx,
  Size,
  FileCount: Integer;
  Filename: pChar;
Begin
  Inherited;

  FileCount := DragQueryFile (aMsg.WParam, $FFFFFFFFnil255);
  For Idx := 0 To FileCount -1 Do
    Begin
      Size := DragQueryFile (aMsg.WParam, Idx, nil0) + 1;
      Filename := StrAlloc (Size);
      If DragQueryFile (aMsg.WParam, Idx, Filename, Size) = 1 Then
        { nothing } ;

      ListBox1.Items.Add (pChar (Filename));
      StrDispose (Filename);
    End;

  DragFinish (aMsg.WParam);
End;

Damit die WM_DROPFILES Nachricht auch an die Form gesendet wird muss dies mit DragAcceptFiles vorher "registriert" werden. Dies kann man am besten im OnCreate-Event der Form erledigen. Klickt einfach das Form an und in der Ereignisse-Registerkarte im Objektinspektor doppelt auf OnCreate. Delphi baut dann automatisch die OnCreate-Procedure in den Sourcecode und ihr braucht nur noch die Procedure um den DragAcceptFiles Aufruf erweitern:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles (Handle, True);
end;

Nicht vergessen die Unit ShellAPI in die Usesklausel einzubinden.

Hinweis von Udontknow und Chatfix eingefügt.