Home » Tipps & Tricks » Dateien/Verzeichnisse » Dateioperationen » Dateien per Drag’n’Drop vom Explorer erhalten

Dateien per Drag’n’Drop vom Explorer erhalten

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:

uses ShellApi;

...

  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.