AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Listview: Markierte Einträge auslesen ohne Schleife
Thema durchsuchen
Ansicht
Themen-Optionen

Listview: Markierte Einträge auslesen ohne Schleife

Ein Thema von martinf16 · begonnen am 10. Apr 2009 · letzter Beitrag vom 11. Apr 2009
Antwort Antwort
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#1

Listview: Markierte Einträge auslesen ohne Schleife

  Alt 10. Apr 2009, 20:42
Hallo,

um in einer Listview alle markierten Einträge herauszufinden, würde man normalerweise eine Schleife nehmen. Also etwa so:

Delphi-Quellcode:
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;
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.

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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Listview: Markierte Einträge auslesen ohne Schleife

  Alt 10. Apr 2009, 21:09
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Listview: Markierte Einträge auslesen ohne Schleife

  Alt 11. Apr 2009, 14:22
@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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Listview: Markierte Einträge auslesen ohne Schleife

  Alt 11. Apr 2009, 14:36
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Listview: Markierte Einträge auslesen ohne Schleife

  Alt 11. Apr 2009, 18:10
Ich würde da auch eine Unterteilung vornehmen. z.B. eine 2. Box
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#6

Re: Listview: Markierte Einträge auslesen ohne Schleife

  Alt 11. Apr 2009, 19:34
Zitat von martinf16:
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.
Die markierten Einträge in einem Array resp Liste. zu speichern finde ich nicht mal so schlecht.
Ein OnItemSelected Ereignis hat die ListView leider nicht direkt.
Müsstest wohl die WndProc-Methode der Listview überschreiben so wie es in diesem Artikel auf delphi.about gezeigt wird.
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 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