Drag & Drop


Um Ihr Programm komfortabel zu gestalten, können Sie es Drag & Drop- fähig machen. Der Benutzer kann dann eine Datei mit gedrückter linker Maustaste in das Programmfenster ziehen. Nachdem die Maustaste los gelassen wurde, wird Ihrem Programm der Name der gezogenen Datei mitgeteilt. Dann kann das Programm eine Aktion mit dieser Datei ausführen.

Als erstes fügen Sie die Unit ShellApi zu der uses- Klausel hinzu.

In den Interfaceteil schreiben Sie folgendes:

procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;

Um Drag & Drop zu aktivieren, benutzen Sie den folgenden Befehl (Plazieren Sie diesen Befehl am besten im OnCreate- oder OnShow- Ereignis des Hauptformulars):

DragAcceptFiles(Handle, true);

Um Drag & Drop wieder zu deaktivieren, benutzen Sie den folgenden Befehl (Plazieren Sie diesen Befehl am besten im OnDestroy- oder OnClose- Ereignis des Hauptformulars):

DragAcceptFiles(Handle, false);

Die Prozedur, die bei einem Drag & Drop- Vorgang aufgerufen wird, lautet (Die Variable "Dateiname" enthält den Pfad der Datei, die in das Programmfenster gezogen wurde):

procedure TMainForm.WMDropFiles(var Msg: TWMDropFiles);
var Dateiname: PChar;
 Laenge, Anzahl: LongWord;
 Dateinamen: TStringList;
 i: integer;
 s: string;
 List:TStringList;
begin
 List:= TStringList.Create;
 Anzahl:= DragQueryFile(Msg.Drop, $FFFFFFFF, NIL, 0); // Anzahl der Dateien abfragen
 for i:= 0 to Anzahl - 1 do begin
  Laenge:= DragQueryFile(Msg.Drop, i, NIL, 0);
  Dateiname:= StrAlloc(Laenge + 1);
  DragQueryFile(Msg.Drop, i, Dateiname, Laenge + 1);
  List.Items.Add(Dateiname);
 end;
end;