Autor Beitrag
MaPsTaR
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 90
Erhaltene Danke: 4

Win XP
Delphi 7 Enterprise
BeitragVerfasst: Mi 09.06.10 23:55 
Hallo,

ich habe eine ListView mit MultiSelect.
In OnSelectItem werden bei der Auswahl eines Eintrages Berechnungen und andere Aktionen ausgeführt (z.B. Buttons deaktivieren, ...).
Diese führen allerdings bei einer Mehrfachauswahl zu extremen Performance-Einbußen, da offensichtlich jeder Eintrag einzeln durch OnSelectItem geht und damit auch die Berechnungen durchgeführt werden, die bei einer Mehrfachauswahl eigentlich nur NACH dem Markieren der Einträge notwendig wäre und nicht für jeden einzelnen.

Ich habe es schon über SelCount probiert, um das Ende der Auswahl zu erkennen.
Dies wird aber anscheinend auch erst hochgezählt, wenn der Eintrag markiert ist.

OnChange und OnChanging werden auch für jeden markierten Eintrag einzeln aufgerufen.

Gibt es eine Möglichkeit zu erkennen, wann die gewünschte Auswahl wirklich markiert ist und erst dann Berechnungen u.a. durchführen zu lassen?

_________________
Liebe Kinder, es stimmt ... solnage auch nur der ertse und lezte Bchutsabe rihctig ist und alle andreen Bcuhsatben irgendwie vorahnden sind,
dann knan man es dennonch lesen, also macht nur weiter so, wir verstehen euch schon
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 10.06.10 00:24 
Hallo,

allein aus der Sicht der Ereignisse des ListView wird es nicht gehen.
Ich würde in OnSelectItem den Status der Tasten prüfen die zur Mehrfachselection genutzt werden und im Bezug dazu die Berechnung laufen lassen oder eben nicht.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 10.06.10 07:12 
Oder im OnChange einen Timer starten, der dann einmalig die eigentliche Aktion durchführt. Ist zwar nicht ganz sauber, sollte aber klappen. ;-)

_________________
We are, we were and will not be.