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