![]() |
Listview: Markierte Einträge auslesen ohne Schleife
Hallo,
um in einer Listview alle markierten Einträge herauszufinden, würde man normalerweise eine Schleife nehmen. Also etwa so:
Delphi-Quellcode:
Das funktioniert bei 10 Einträgen gut, meinetwegen auch bei 1000. Allerdings habe ich in meiner Listview 200000 Einträge, was entsprechend lange dauert wenn alle durchsucht werden müssen. Darum stellt sich natürlich die Frage, ob es eine bessere Möglichkeit gibt um an die Einträge zu kommen.
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin with listview do for i := 0 to Items.Count - 1 do if Items[i].Selected then [was auch immer] end; Meine erste Idee war vielleicht direkt beim markieren eines Eintrags diesen in einem Array oder was auch immer zu speichern, dass dann hinterher nur noch der Array mit allen markierten Einträgen ausgelesen werden muss. Allerdings müsste man hier beachten dass ja nicht nur per Maus sondern auch per Tastatur markiert werden kann und wo man diese Abfrage abfangen könnte ohne auf die Performance zu drücken. Vielleicht gibts aber auch eine super einfache Lösung, vielleicht verfügt die ListView schon über einen Array oder etwas ähnliches, den man nur anzapfen muss. Schließlich müssen die markierten Einträge ja auch irgendwo gespeichert sein und es dauert auch nicht ewig bis diese dargestellt sind. Kennt da jemand eine Lösung??? Vielen Dank schon mal! Wenn ich was finde poste ich es auch sofort, bei Google und hier im Forum stoße ich nur auf die einfache Lösung wie oben. |
Re: Listview: Markierte Einträge auslesen ohne Schleife
Bei so vielen Einträgen würde ich gar nicht erst eine normale ListView nehmen, das ist doch viel zu langsam...
Eine TVirtualTreeView ist dafür tausend Mal besser geeignet. // EDIT: Damit kannst du mit GetFirstChecked und GetNextChecked direkt diese Einträge mit einem gewünschten Status durchgehen. |
Re: Listview: Markierte Einträge auslesen ohne Schleife
@jaenicke:
Die Daten stehen auch gar nicht in der ListView, sondern in einem Array dahinter. Die ListView nutze ich nur zum Anzeigen und da hatte ich eigentlich nie Probleme mit der Schnelligkeit, der Suche in den Einträgen usw. Das einzige ist eben das markieren, da sich das ja schlecht im Array abbilden lässt - schließlich wird ja in der ListView selber markiert. |
Re: Listview: Markierte Einträge auslesen ohne Schleife
Aber 200.000 Einträge sind schon ziemlich viel. Ich wollte als Benutzer da nichts auswählen wollen. Kannst du das nicht schon irgendwie vorauswähle/vorsortieren?
|
Re: Listview: Markierte Einträge auslesen ohne Schleife
Ich würde da auch eine Unterteilung vornehmen. z.B. eine 2. Box
|
Re: Listview: Markierte Einträge auslesen ohne Schleife
Zitat:
Ein OnItemSelected Ereignis hat die ListView leider nicht direkt. Müsstest wohl die WndProc-Methode der Listview überschreiben so wie es in ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 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-2025 by Thomas Breitkreuz