mazel stellt
hier vor, wie man Dateien (und Ordner) per Drag und Drop in eine Listbox eingefügt werden können.
Möchte man nur Dateien hinzufügen, muss dies explizit durch Überprüfung sichergestellt werden. Siehe dazu weiter unten.
uses ..., ShellAPI;
Delphi-Quellcode:
private
procedure WMDROPFILES(var Msg: TMessage); Message WM_DROPFILES;
procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
i, Counts, Size: Integer;
PCharFileName: PChar;
begin
inherited;
PCharFileName:=nil;
Counts:=DragQueryFile(Msg.WParam, $FFFFFFFF, PCharFileName, 255);
for i:=0 to Counts - 1 do
begin
Size:=DragQueryFile(Msg.WParam, i, nil, 0) + 1;
PCharFileName:=StrAlloc(Size);
DragQueryFile(Msg.WParam, i, PCharFileName, Size);
ListBox1.Items.Add(String(PCharFileName));
StrDispose(PCharFileName);
end;
DragFinish(Msg.WParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(ListBox1.Handle, True);
end;
Zum Ausprobieren des obigen Codes benötigt man natürlich noch eine Listbox auf dem Formular mit Namen ListBox1.
Möchte man verhindern, dass Ordner auch hinzugefügt werden können, so darf man nicht einfach hinzufügen, sondern man muss das Hinzufügen mittels folgender Überprüfung einschränken.
if (FileGetAttr(String(PCharFileName)) <> faDirectory) then ListBox1.Items.Add(String(PCharFileName));