![]() |
ListView Icon vertauschen / verschieben
Hallo,
ich sitze seit 2 Tagen an einem Problem und komme nicht weiter. Ich möchte gerne in einer TListView ein Icon mit der Maus verschieben. Aber auf ganz bestimmte art und weise! Und zwar: Icon klicken ziehen und auf einem anderem Icon ablegen und beide tauschen ihren Platz. Alles was ich bis jetzt habe - was aber nicht richtig funktioniert - ist das *nicht schimpfen für diesen Müll* *hilfe* Gruss Doreen
Delphi-Quellcode:
[edit=r_kerber]Code- durch Delphi-Tags ersetzt. Mfg, r_kerber[/edit]
procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer); begin p2.x := x; p2.y := y; end; procedure TForm1.ListView1Click(Sender: TObject); begin if (ListView1.Selected <> nil) then begin ItemIdx := ListView1.Selected.Index; p.x := ListView1.Selected.Position.x; p.y := ListView1.Selected.Position.y; end; end; procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ListView1.Items.BeginUpdate; DropItem := ListView1.GetItemAt(p2.x, p2.y); NextItem := ListView1.GetNextItem(DropItem, sdAll, [isFocused]); if Assigned(NextItem) then begin ListView1.Items[NextItem.Index].SetPosition(p2); ListView1.Items[ItemIdx].SetPosition(p2); end; ListView1.Items.EndUpdate; end; procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer); begin // end; procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin // end; |
Re: ListView Icon vertauschen / verschieben
Hallo Doreen :hi:
Zitat:
Ich habe es schnell so zusammengebastelt und bei mir funktioniert es ganz gut:
Delphi-Quellcode:
procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X,
Y: Integer); var StartItem, TargetItem: TListItem; // Start-/Ziel-Item TempImgIndex: Integer; // ImageIndex temporär speichern begin if not (Sender = Source) then Exit; StartItem := ListView1.Selected; TargetItem := ListView1.GetItemAt(X, Y); // Indizes vertauschen TempImgIndex := TargetItem.ImageIndex; TargetItem.ImageIndex := StartItem.ImageIndex; StartItem.ImageIndex := TempImgIndex; // Falls ViewStyle auf "vsIcon" oder "vsSmallIcon" gesetzt ist, // ist das zu empfehlen (s. marabus Beitrag) ListView1.Arrange(arDefault); end; procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := (Sender = Source) end; procedure TForm1.FormCreate(Sender: TObject); begin ListView1.DragMode := dmAutomatic; end; |
Re: ListView Icon vertauschen / verschieben
Hallo Matthias,
da der Code nur mit ausgeschaltetem MultiSelect funktioniert, musst du das DragItem nicht erst ermitteln - es ist identisch mit ListView.Selected. Nach dem Vertauschen solltest du noch Arrange(arDefault) auf der ListView ausführen, da es sonst zu unschönen Lücken kommt. Grüße vom marabu |
Re: ListView Icon vertauschen / verschieben
danke danke :thumb:
funktioniert sehr sehr sehr gut ;) Nun erstmal schauen was du gemacht hast und wo meine gedankenfehler waren! |
Re: ListView Icon vertauschen / verschieben
Hi
@marabu: Ah, das wusste ich nicht und habe es oben eingefügt. Nun entfällt die globale Variable, sehr schön. :) @delphinia: Bittesehr. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz