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:
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:
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, $FFFFFFFF, nil, 255); For Idx := 0 To FileCount -1 Do Begin Size := DragQueryFile (aMsg.WParam, Idx, nil, 0) + 1; Filename := StrAlloc (Size); If DragQueryFile (aMsg.WParam, Idx, Filename, Size) = 1 Then ;
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:
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.