title image


Smiley Re: Drag&Drop im Listview
Hallo Rylon!



Das mit dem Hottrack wird schwierig, da während der Dragoperation das Sourcefenster die Maus gecaptured hat und damit alle Mausmessages empfängt. Die Koordinaten, die DragQueryPoint liefert, sind relativ zum für DragDrop registrierten Fenster. Daher die doppelte Umrechnung mit ClientToScreen und ScreenToClient. Hier ein kleines Beispiel:





procedure TForm1.FormCreate(Sender: TObject);

begin

DragAcceptFiles(Handle,TRUE);

end;



procedure TForm1.WMDropFiles(var AMsg:TWMDropFiles);

Var LI:TListItem; i,iCnt:Integer; szFile:PChar; Pt:TPoint;

begin

With AMsg Do Begin

iCnt:=DragQueryFile(Drop,$FFFFFFFF,NIL,0);

GetMem(szFile,MAX_PATH);

i:=0;

DragQueryPoint(Drop,Pt);

Pt:=ClientToScreen(Pt);

Pt:=ListView.ScreenToClient(Pt);

LI:=ListView.GetItemAt(Pt.X,Pt.Y); // ListItem unterm Cursor

While i
DragQueryFile(Drop,i,szFile,MAX_PATH);

If LI=NIL Then

LI:=Listview.Items.Add

Else

LI:=Listview.Items.Insert(LI.Index);

LI.Caption:=ExtractFileName(szFile);

Inc(i);

End;

DragFinish(AMsg.Drop);

FreeMem(szFiles);

Result:=0;

End;

end;



procedure TForm1.ListviewMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

Listbox.Items.Add('MouseMove');

end;





Schönen Sonntag



OLLI



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: