dieses WM_DROPFILES bezieht sich nur auf das Drag&Drop von Dateien. Die Events für Drag&Drop die fast jede Komponente hat beziehen sich hingegen auf das Drag&Drop zwischen den einzelnen Komponenten.
Zur anderen Frage: Das Drag&Drop von Dateien nur für ein TImage zu realisieren (und nicht für das ganze Form) geht nicht da TImage kein
Handle hat. Die Message wird somit an das Fenster(Control) unter dem TImage geschickt welches ein
Handle hat. Für TListbox und TListView (die haben ein
Handle) geht es hingegen. Da gibt es 2 Möglichkeiten. Variante 1 ist das ableiten von einer bereits vorhandenen Komponente und diese mit dem entsprechenden Messagehandler erweitern). Variante2 ist das umbiegen der WindowProcedure der Komponente und somit das manuelle Abfangen der Message in der neuen WindowProcedure (gibt es einige Threads dazu).
Wenn du unbedingt willst das man auf ein TImage Dateien ziehen kann so lege einfach direkt unter das TImage ein Panel und fange auf diesem die Message ab.
variante1 (der Quelltext muss in die
Unit wo TListBox das Droppen von Dateien unterstützen soll):
Delphi-Quellcode:
type
TListBox = class(StdCtrls.TListBox)
private
procedure FWM_DropFiles(var Msg: TMessage); message WM_DROPFILES;
end;
[...]
procedure TListBox.FWM_DropFiles(var Msg: TMessage);
var i, anzahl, size: integer;
Dateiname: String;
antwort: Integer;
begin
inherited;
Dateiname := '';
anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 0);
for i := 0 to (anzahl - 1) do
begin
size := DragQueryFile(Msg.WParam, i , nil, 0) + 1;
SetLength(Dateiname, size);
SetLength(Dateiname, DragQueryFile(Msg.WParam,i , @Dateiname[1], size));
//hier dein source - in "Dateiname" ist der name des droped objectes
end;
DragFinish(Msg.WParam);
end;
und damit das ganze für die entsprechende Listbox geht muss natürlich noch folgendes gemacht werden:
DragAcceptFiles(ListBox1.Handle, True);
Zitat:
...allerdings ist mir nicht so ganz klar, woher man das wissen soll...
dafür gibt es das
msdn (
http://msdn.microsoft.com bzw. noch direkter
http://msdn.microsoft.com/library ) dort kann man die Befehle suchen (man weiß ja ungefähr nach was man suchen muss) und die Parameter etc. sind dort auch zu finden mit deren Bedeutung.