TListView-Einträge austauschen

moinsen,

hab mal wieder eine kleine bescheidene frage, die wahrscheinlich genauso einfach zu beantworten ist…

wie kann ich die reihenfolge zweier TListItems tauschen??? wenn ich zuweisungen mache, also ganz normalen variablentausch mit hilfsvariable, dann wird eine mit der anderen überschrieben, sodass ich danach zwei identische einträge habe…

(und dann kommt der unschöne nebeneffekt hinzu, dass vor allen einträgen checkboxes erscheinen. kann ich ausschalten, mache ich auch, aber ist das nen bug oder wie?)

naja, ein wenig umständlich, indem ich die ganzen texte der subitems manuell hin-und-her-kopiere, geht es schon, sieht aber mehr als bescheiden aus =)

burn

Glück auf!

hab mal wieder eine kleine bescheidene frage, die
wahrscheinlich genauso einfach zu beantworten ist…

mal seh’n… :wink:

wie kann ich die reihenfolge zweier TListItems tauschen???
wenn ich zuweisungen mache, also ganz normalen variablentausch
mit hilfsvariable, dann wird eine mit der anderen
überschrieben, sodass ich danach zwei identische einträge
habe…

Bitteschön niemals nicht vergessen: Hinter jeder Objektinstanz verbirgt sich letztlich nur ein Zeiger auf einen Speicherbereich, wo die eigentlichen Daten des Objekts gespeichert sind. Wenn Du Zuweisungen von Objektinstanzen machst, weist Du nur die Pointer zu. Das kann auch sinnvoll sein; in Deinem Fall jedoch führt es nicht zum Erfolg, weil Du die Daten selbst austauschen mußt.

(und dann kommt der unschöne nebeneffekt hinzu, dass vor allen
einträgen checkboxes erscheinen. kann ich ausschalten, mache
ich auch, aber ist das nen bug oder wie?)

Nein, kein Bug – Du tust einfach etwas, was Du nicht darfst.

naja, ein wenig umständlich, indem ich die ganzen texte der
subitems manuell hin-und-her-kopiere, geht es schon, sieht
aber mehr als bescheiden aus =)

Hör auf, da wird einem ja schlecht. Sehr elegant lösen kannst Du Dein Problem über eine Sortierung mittels der Methode „CustomSort“. Ist vielleicht etwas knifflig (CustomSort arbeitet mit einer Callback-Prozedur), aber im Endeffekt sicher die beste Lösung. Die nötigen Hinweise zum Gebrauch von CustomSort findest Du in der Online-Hilfe. Eventuell kommst Du auch mit „AlphaSort“ und dem Event „OnCompare“ zum Ziel, aber da möchte ich mich nicht festlegen (bei Interesse ebenfalls einfach mal in der OH nachgucken – da steht so vieles drin :wink:).

Tschau
Martin

Hi…

ist zwar auf Dreck 'n Drop gemünzt, sollte mit wenigen Anpassungen aber auch für deine Zwecke funktionieren.

Das ganze ist aus dem Bauch geschrieben. Solltest noch prüfen, ob keine Speicherleichen bleiben.

Gruss und viel Erfolg

RQ

procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var DragItem: TlistItem;
DropAtItem: TlistItem;
Index: Integer;
begin
DragItem:=Listview1.Selected;
DropAtItem:=Listview1.GetItemAt(X,Y);
if DropAtItemNil then Index:=DropAtItem.Index+1 else
Index:=Listview1.Items.Count-1;
DropAtItem:=Listview1.Items.Insert(Index);
DropAtItem.Assign(DragItem);
Listview1.Items.Delete(Listview1.Selected.Index);
end;