![]() |
Listenelemente verschieben - Riesenproblem
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich möchte in einer ListView ein bestimmtes Element nach oben bzw. unten verschieben - sollte ja kein Problem darstellen. Ich habe mir dazu einen Code gebastelt, habe, weil er nicht ging, hier in der DP geschaut, und den hier vorgestellten genommen, es bleibt aber beim selben Problem. Das Problem ist das folgende: stehe ich z.B. auf dem dritten Listeneintrag und verschiebe diesen, sind alle Einträge, auch die, die vorher nicht markiert waren, markiert - und ich begreife absolut nicht, warum. Würde sich das bitte mal jemand ansehen? Für einen Tipp wäre ich wirklich sehr dankbar! Viele Grüße Marco |
AW: Listenelemente verschieben - Riesenproblem
*** fällt denn keinem was dazu ein... *winsel! ***
|
AW: Listenelemente verschieben - Riesenproblem
Ich habe D 2009 und das Verschieben mittels +/- Taste geht erst mal. Was bei mir nicht geht, ist die Eigenschaft Checked. Diese wird nicht mit dem Objekt mitgenommen, sondern wird dann, mir unverständlich, an eine andere Zeile weitergegeben, die dann aber mit dem Text nicht übereinstimmt.
|
AW: Listenelemente verschieben - Riesenproblem
Der ursprüngliche Quellcode ist leider unzureichend und daher fehlerhaft.
Versuche es hiermit:
Code:
procedure MoveLVItem(LV: TListView; Direction: TSearchDirection);
var aItem, NextItem, TmpItem: TListItem; fChecked: array of Boolean; i: integer; temp: Boolean; begin with LV do begin if IsEditing or not Assigned(ItemFocused) then exit; // raus wenn Item editiert wird oder kein Item selektiert ist aItem := ItemFocused; setlength(fchecked, items.Count); for i := 0 to items.count - 1 do fChecked[i] := Items.item[i].checked; case Direction of sdAbove: begin if aItem.Index = 0 then exit; // Erstes Item ist markiert > raus temp := items[aItem.Index - 1].checked; fChecked[aItem.Index - 1] := items[aItem.Index].checked; fChecked[aItem.Index] := temp; end; sdBelow: begin if aItem.Index = Items.Count - 1 then exit; // Letztes Item ist markiert > raus temp := items[aItem.Index + 1].checked; fChecked[aItem.Index + 1] := items[aItem.Index].checked; fChecked[aItem.Index] := temp; end; end; NextItem := GetNextItem(aItem, Direction, [isNone]); Items.BeginUpdate; TmpItem := TListItem.Create(Items); try TmpItem.Assign(NextItem); NextItem.Assign(aItem); aItem.Assign(TmpItem); aItem.Selected := NextItem.Selected; NextItem.MakeVisible(True); ItemFocused := NextItem; Selected := NextItem; finally TmpItem.Free; end; for i := 0 to items.count - 1 do items.item[i].checked := fChecked[i]; Items.EndUpdate; end; end; |
AW: Listenelemente verschieben - Riesenproblem
Hallo,
und ganz herzlichen Dank für die Antwort. Ich konte echt nicht glauben, daß im eigentlichen VCL-Quellcode ein Fehler drin ist - und hab gedacht, ich wäre zu blöd. Also gut, ;-), speichern wir die .Checked eben erst... Viele Grüße Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 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