Probleme mit Drag&Drop

Hallo allerseits,

ich möchte in einem Programm gerne das etwas umständliche Öffnen der zu bearbeitenden Datei über den Öffnen-Dialog durch eine Drag&Drop-Lösung ersetzen, bei der ich die Datei (oder besser gleich Dateien) aus dem Windows Explorer Fenster in das Programm ziehe (z. B. in ein StringGrid, in dem dann die Attribute der Dateien angezeigt werden). Möglicherweise habe ich das mit Drag&Drop falsch verstanden, ich bekomme das jedenfalls nicht hin.

Wer hilft mir weiter?

Danke

Peter

Hallo Peter,
da es sich bei dem Windows Explorer um eine andere Anwendung handelt, als die, die Du in DELPHI programmierst, kannst Du die Dateinamen nicht über die Delphi-Drag&Drop-Funktionen Deiner Anwendung erhalten. Füge die folgende Prozedur in Dein Formular ein und trage sie in den Public-Bereich ein:

unit Unit1;
interface
uses ...
type
 TForm1 = class(TForm)
 ...
 private
 ...
 public
 procedure WndProc(var Msg: TMessage); override;
 end;
implementation
procedure TForm1.WndProc(var Msg: TMessage);
var Num: Word;
 Buff: Array[0..255] of Char;
 N: Integer;
 Pkt: TPoint;
begin
 if (Msg.Msg = WM\_DropFiles) then begin
 Msg.Result := 0;
 Num := DragQueryFile(Msg.wParam, $FFFFFFFF, NIL, 0);
 For N := 0 to Num-1 do begin
 DragQueryFile(Msg.wParam, n, @buff, pred(SizeOf(buff)));
 DragQueryPoint(Msg.wParam, Pkt);
 if FileExists(StrPas(buff)) then
 ListBox1.Items.Add(StrPas(buff));
 end;
 DragFinish(Msg.wParam);
 end
 else
 inherited WndProc(Msg);
end;

In diesem Beispiel fülle ich eine Listbox mit den Dateinamen. Das kannst Du ja entsprechend Deiner Anwendung abändern.

Nun musst Du noch in die OnCreate-Routine für Dein Formular die Zeile

procedure TForm1.FormCreate(Sender: TObject);
begin
 DragAcceptFiles(Handle, True);
end;

eintragen, dann sollte es funktionieren.

Viele Grüße
Dieter