OnDragOver und Co. ist nur für Drag&Drop innerhalb einer Delphi-Anwendung zuständig.
Das Drag&Drop vom Explorer läuft über einen anderen Mechianismus.
Zitat von
schwa226:
So habe ich es nun hinbekommen:
hier kannst/solltest du das
message WM_DROPFILES; in der Deklaration auch weglassen.
PS: Du kannst auch eine Eigenart der
VCL ausnutzen, die TreeView wärend des Compilierens ersetzen und so dort deine Message doch noch "reinschmugggeln", ohne extern erstmal eine Ableitung der Klasse zu erstellen.
Delphi-Quellcode:
type
TTreeView = class(ComCtrls.TTreeView)
procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
end;
TMainForm = class(TForm)
TreeView1 : TTreeView;
.....
end;
procedure TTreeView.WMDROPFILES(var Msg: TMessage);
var
i, Counts, Size: Integer;
PCharFileName: PChar;
begin
Counts := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 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);
...
StrDispose(PCharFileName);
end;
DragFinish(Msg.WParam);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
DragAcceptFiles(TreeView1.Handle, True);
end;