AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi ListBox.SelectAll dauert etwas länger
Thema durchsuchen
Ansicht
Themen-Optionen

ListBox.SelectAll dauert etwas länger

Ein Thema von Amateurprofi · begonnen am 29. Apr 2012 · letzter Beitrag vom 1. Mai 2012
Antwort Antwort
Seite 1 von 2  1 2      
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#1

ListBox.SelectAll dauert etwas länger

  Alt 29. Apr 2012, 01:38
Ich habe eine TListBox mit Style=lbVirtualOwnerDraw mit ca. 50k Einträgen.
Wenn ich ein SelectAll mache dauert das etwas länger, und wenn das SelectAll
endlich fertig ist, werden die letzten Einträge der Liste angezeigt.
Ich möchte aber erstens, dass das ohne merkliche Verzögerung abläuft und dass
am Schluss die Einträge angezeigt werden, die vorher angezeigt wurden.
Vorerst habe ich das so gelöst:

Delphi-Quellcode:
var i:integer;
begin
   i:=ListBox.TopIndex;
   ListBox.Visible:=false; // Bei vielen Einträgen dauert SelectAll etwas länger
   ListBox.SelectAll;
   ListBox.TopIndex:=i;
   ListBox.Visible:=true;
end;
Das geht blitzartig und die Darstellung ist so, wie ich es möchte.
Mir gefällt aber das .Visible:=false und ab Schluss Visible:=true nicht.

Weiß jemand eine andere Lösung?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: ListBox.SelectAll dauert etwas länger

  Alt 29. Apr 2012, 02:08
Versuch es mal mit
Delphi-Quellcode:
ListBox.Items.BeginUpdate;
try
  // hier jetzt selektieren
finally
  ListBox.Items.EndUpdate;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: ListBox.SelectAll dauert etwas länger

  Alt 29. Apr 2012, 02:24
Und wenn der Code von Sir Rufo keine Besserung bringt (die Items werden ja nicht verändert sondern nur selektiert, was im Hintergrund wahrscheinlich zig1000 Messages verursacht) dann vielleicht dies:
Delphi-Quellcode:
// von TeamB
procedure LockControl(c: TWinControl; lock: boolean);
begin
   if (c = nil) or (c.Handle = 0) then exit;
   if lock then SendMessage(c.Handle, WM_SETREDRAW, 0, 0)
   else begin
      SendMessage(c.Handle, WM_SETREDRAW, 1, 0);
      RedrawWindow(c.Handle, nil, 0,
         RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);
   end;
end;

LockControl(ListBox, True);
try
  ListBox.SelectAll;
  ListBox.TopIndex:=i;
finally
  LockControl(ListBox, False);
end;
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: ListBox.SelectAll dauert etwas länger

  Alt 29. Apr 2012, 08:10
Das Problem sind die 50k Einträge. Da Fehler an der Wurzel gepackt werden sollen, setze hier an: An deinem GUI-Konzept ist was faul, denn wer scrollt schon durch 50k Einträge?
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#5

AW: ListBox.SelectAll dauert etwas länger

  Alt 29. Apr 2012, 10:33
Versuch es mal mit
Delphi-Quellcode:
ListBox.Items.BeginUpdate;
try
  // hier jetzt selektieren
finally
  ListBox.Items.EndUpdate;
end;
Super, Sir Rufo,
funktioniert ganz hervorragend. Vielen Dank.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#6

AW: ListBox.SelectAll dauert etwas länger

  Alt 29. Apr 2012, 10:48
Das Problem sind die 50k Einträge. Da Fehler an der Wurzel gepackt werden sollen, setze hier an: An deinem GUI-Konzept ist was faul, denn wer scrollt schon durch 50k Einträge?
Das ist nur deine Meinung.
Wenn die Entwickler auch dieser Meinung wären, dann
1) wären ListBoxen in ihrer Kapazität limitiert
2) gäbe es z.B. kein BeginnUpdate/EndUpdate, denn das wäre ja nicht nötig.

Warum, deiner Meinung nach, wurde die Limitierung von max 32767 Einträgen, die bis Windows 98 galt, aufgehoben?
Brauchst nicht anworten, das Problem ist gelöst.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: ListBox.SelectAll dauert etwas länger

  Alt 29. Apr 2012, 11:48
Warum, deiner Meinung nach, wurde die Limitierung von max 32767 Einträgen, die bis Windows 98 galt, aufgehoben?
Brauchst nicht anworten, das Problem ist gelöst.
Andere Speicherverwaltung?

Es muß also nicht unbedingt das Ziehl gewesen sein die Beschränkung aufzuheben ... dieses kann ausversehn mitgekommen sein.



z.B. die Limitierung beim Memo wurde dadurch aufgehoben, daß man von einem (vermutlich) statischen 64 KB-Puffer weggegangen ist.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (29. Apr 2012 um 11:55 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: ListBox.SelectAll dauert etwas länger

  Alt 29. Apr 2012, 12:24
Das ist nur deine Meinung.
Äh. Nein.
Zitat:
Wenn die Entwickler auch dieser Meinung wären, dann...
Nuckelt an Fäkalien, 100 Mio Fliegen können nicht irren
Zitat:
Brauchst nicht anworten, das Problem ist gelöst.
Tu ich aber: Denk nach und lerne ein wenig über gutes GUI Deisgn.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#9

AW: ListBox.SelectAll dauert etwas länger

  Alt 29. Apr 2012, 15:32
Das Problem sind die 50k Einträge. Da Fehler an der Wurzel gepackt werden sollen, setze hier an: An deinem GUI-Konzept ist was faul, denn wer scrollt schon durch 50k Einträge?
Nun mal langsam. So ist diese Aussage zu pauschal, denn was ist mit Listen von Dateien/Verzeichnissen, die sicher eine solche Zahl erreichen können? Klar ist ein Scrollen durch eine solche Anzahl sicher nicht sinnvoll, aber das lässt sich ja anders lösen (im Explorer und auch im Total Commander kann man anfangen, den Dateinamen zu tippen).

MfG Dalai

Geändert von Dalai (29. Apr 2012 um 15:35 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: ListBox.SelectAll dauert etwas länger

  Alt 29. Apr 2012, 15:44
Das Problem sind die 50k Einträge. Da Fehler an der Wurzel gepackt werden sollen, setze hier an: An deinem GUI-Konzept ist was faul, denn wer scrollt schon durch 50k Einträge?
Ob es nun Sinn macht alles zu selektieren ist eine Frage für sich, aber die Frage nach 50k Einträgen sehe ich nicht als Problem an. Ich kenne Wörterbücher die zuerst einfach alle Wörter in einer Listbox listen und erst bei der ersten Eingabe anfangen zu filtern. Es ist deren Konzept. Andere teilen es in 26 Teile. Jedem das seine.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:01 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