In deinem Codebeispiel vermischen sich Dinge, die nicht zusammengehören.
Folgende Prozedure liefert alle gedroppten Dateien in einer Stringliste und zusätzlich (aber optional) den Punkt relativ zum Desktop Ursprung.
Delphi-Quellcode:
procedure GetDroppedFiles(HDrop:THandle; filelist:TStrings; Point:PPoint);
var
i, filecount, size : Integer;
s : string;
begin
Assert(Assigned(filelist));
filecount := DragQueryFile(HDrop, $FFFFFFFF, nil, 0);
for i:= 0 to filecount-1 do
begin
size := DragQueryFile(HDrop, i, nil, 0);
SetLength(s, size);
DragQueryFile(HDrop, i, PChar(s), size+1);
filelist.Add(s);
end;
if Assigned(Point) then
if not DragQueryPoint(HDrop, Point^) then
begin
// Punkt war ausserhalb des Fensters
Point^.x := -1;
Point^.y := -1;
end;
DragFinish(HDrop);
end;