Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView Items verschieben und sortieren !? (https://www.delphipraxis.net/47994-listview-items-verschieben-und-sortieren.html)

Äfan 19. Jun 2005 04:54


ListView Items verschieben und sortieren !?
 
Hi,

1. Ich will ein Item aus einer ListView per klick, eine zeile nach oben verschieben.

Nachdem ich die forensuche hier benutzt habe, habe ich es schon so weit bekommen:

Delphi-Quellcode:
  Listview1.Items.Insert(1);
  Listview1.Items[1].Assign(Listview1.Items.Item[2]);
  Listview1.Items[2].Delete;
Leider funktioniert das nicht, also es wird nichts verschoben...



2. Gib es eine möglichkeit die Items in meiner Listview zu sortieren, allerdings nicht dauerhaft. Also sobald ich wieder neue items hinzufüge, soll er sie einfach wieder an das ende der liste anhängen.

Und geht es, dass ich z.b. auf denn button klicke und er sortiert sie alphabetisch (das mache ich mit listview := stText) und bei nochmals klicken, werden sie wieder wie vorher sortiert bzw. angeordnet.

mfg

Keldorn 19. Jun 2005 07:30

Re: ListView Items verschieben und sortieren !?
 
Zitat:

Zitat von Äfan
Hi,

1. Ich will ein Item aus einer ListView per klick, eine zeile nach oben verschieben.

ich hab nicht nachgeschaut move gibt es nicht bei den items?

Zitat:

2. Gib es eine möglichkeit die Items in meiner Listview zu sortieren, allerdings nicht dauerhaft. Also sobald ich wieder neue items hinzufüge, soll er sie einfach wieder an das ende der liste anhängen.
Alphasort aufrufen und bei oncustomsort das LV wie gewünscht sortieren. Du kannst immer wieder items an Ende dranhängen, neu sortiert wird es nur bei alphasort. Für customsort etc. gibt genug hier im Forum

Zitat:

Und geht es, dass ich z.b. auf denn button klicke und er sortiert sie alphabetisch (das mache ich mit listview := stText) und bei nochmals klicken, werden sie wieder wie vorher sortiert bzw. angeordnet.
Erstell dir eine zusätzliche unsichtbare Spalte oder geh über die Data-eigenschaft, hinterlege dort deinen Index, z.B. fortlaufende Nummerierung und sortier dann danach um die ursprüngliche Reihenfolge wiederherzustellen.

Mfg Frank

marabu 19. Jun 2005 08:42

Re: ListView Items verschieben und sortieren !?
 
Hallo Äfan,

was du da vor hast macht nur Sinn mit ListViews, die gleichzeitig Daten-Container sind, die also keine virtuellen ListViews sind.

Zu deinem Code: Move() und Exchange() gibt es hier nicht. Insert() gibt dir einen Zeiger auf das neue ListItem zurück. Den solltest du dir merken um seine Assign() Methode verwenden zu können. Statt Delete() solltest du besser Free() verwenden, um keine Speicher-Lecks zu produzieren.

Damit deine neuen Items immer hinten angefügt werden können musst du mit SortType = stNone und der Methode CustomSort() arbeiten.

Ein Gedächtnis für die vorherige Sortierung hat die ListView nicht. Aber da du keine virtuelle ListView verwendest, kannst du den Data-Pointer verwenden um dort einen TimeStamp (GetTickCount eignet sich da ganz gut) zu hinterlegen. Anhand dieses Wertes kannst du zumindest die Erstellungsreihenfolge während einer Windows-Session wieder herstellen.

Grüße vom marabu

alcaeus 19. Jun 2005 09:05

Re: ListView Items verschieben und sortieren !?
 
Hallo Aefan,

zum Listview-Sortieren gibts in der Code-Library etwas: http://www.delphipraxis.net/internal...ct.php?t=23835

Zum Vertauschen von Elementen: Du koenntest wie gesagt mit Insert() und Delete() arbeiten.

Greetz
alcaeus

Äfan 19. Jun 2005 18:08

Re: ListView Items verschieben und sortieren !?
 
Thx @ all

Zitat:

Zum Vertauschen von Elementen: Du koenntest wie gesagt mit Insert() und Delete() arbeiten.
Das habe ich doch auch gemacht. Leider hats ja nicht funktioniert, jetzt gehts aber, hab nur nen kleinen fehler gehabt.

Für die, die den code wollen:

Zitat:

Delphi-Quellcode:
procedure TMainForm.Button3Click(Sender: TObject);
begin
  Listview1.Items.Insert(X);
  Listview1.Items[X].Assign(Listview1.Items.Item[Y]);
  Listview1.Items[Y].Free;
end;
X = Stelle an die das Item soll
Y = Item das verschoben werden soll
Wegen Listview-Sortieren: Geht das nicht schneller, einfacher und kürzer ?

mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz