Dateien per Drag'n'Drop vom Explorer erhalten |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Manche Programme bieten die Möglichkeit, Dateien per Drag'n'Drop zu erhalten und diese dann z.B. zu öffnen. Insbesondere bei Texteditoren gibt es das häufig. Mit dem folgenden Code kann man das auch in seinen eigenen Programmen realisieren:
...
private
procedure WMDROPFILES(var Msg: TMessage); message WM_DROPFILES;
...
procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
i, count, size: integer;
filename: PChar;
begin
inherited;
count := DragQueryFile(Msg.WParam, $FFFFFFFF, filename, 255);
for i := 0 to count - 1 do
begin
size := DragQueryFile(Msg.WParam, i, nil, 0) + 1;
filename := StrAlloc(size);
try
DragQueryFile(Msg.WParam, i, filename, size);
ListBox1.Items.Add(StrPas(filename));
finally
StrDispose(filename);
end;
end;
DragFinish(Msg.WParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, true);
end;
Mit DragAcceptFiles wird das Formular angewiesen, Dateien überhaupt per Drag'n'Drop zu akzeptieren, d.h. es erscheint nicht mehr das Parkverbots-Schild, wenn der User eine Datei auf das Formular zieht.
Die Botschaftenmethode WMDROPFILES kümmert sich nun darum, dass letztendlich auch etwas passiert. Zuerst wird die Anzahl der Dateien ermittelt, und dann für jede einzeln der Dateiname in eine Listbox eingetragen.