Performance Probleme mit TListview

Rund um die LCL und andere Komponenten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1352
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Performance Probleme mit TListview

Beitrag von corpsman »

Die Nutze ich und es springt dennoch :(

Code: Alles auswählen

Procedure TForm3.ListView1KeyDown(Sender: TObject; Var Key: Word;
  Shift: TShiftState);
Var
  index, i: Integer;
Begin
  // STRG + A = Alles Markieren
  index := ListView1.ItemIndex;
  If (ssCtrl In shift) And (key = ord('A')) Then Begin
    For i := 0 To ListView1.Items.Count - 1 Do Begin
      ListView1.Items[i].Selected := true;
    End;
    exit;
  End;
  If key = ord('N') Then Begin
    For i := 0 To ListView1.Items.Count - 1 Do Begin
      If ListView1.Items[i].Selected Then Begin
        fListViewData[i].Direction := IndexDoNothing;
      End;
    End;
    ListViewSelectItemIndex(ListView1, index);
  End;
  If key = ord('R') Then Begin
    For i := 0 To ListView1.Items.Count - 1 Do Begin
      If ListView1.Items[i].Selected Then Begin
        fListViewData[i].Direction := IndexLeftToRight;
      End;
    End;
    ListViewSelectItemIndex(ListView1, index);
  End;
  If key = ord('L') Then Begin
    For i := 0 To ListView1.Items.Count - 1 Do Begin
      If ListView1.Items[i].Selected Then Begin
        fListViewData[i].Direction := IndexRightToLeft;
      End;
    End;
    ListViewSelectItemIndex(ListView1, index);
  End;
  UpdatePanelInfo;
End; 
--
Just try it

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1352
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Performance Probleme mit TListview

Beitrag von corpsman »

Also ich habs nicht mehr hinbekommen und aufgegeben.

Habe nun alles auf TStringgrid umgeschrieben und zeichne da mittels StringGrid1DrawCell die Imagelist in der Mitte von Hand.

Nachteil der Stringgrid ist halt das man nicht mittels STRG + Linke Maus beliebige Einträge markieren kann, aber dafür hat sie die Performance die ich bei dem Ganzen erwarte...
--
Just try it

wp_xyz
Beiträge: 4324
Registriert: Fr 8. Apr 2011, 09:01

Re: Performance Probleme mit TListview

Beitrag von wp_xyz »

Kannst du ein kleines Projekt posten, in dem ich das nachvollziehen kann? Ich denke mir, dass die Attribute wie Selected im virtuellen Modus ohne weiteres gar nicht gespeichert werden - die ListItems sind ja "virtuell", d.h. werden nicht von der ListView verwaltet und sind nicht persistent. Stattdessen musst du die Änderung von Selected von Hand in deine Datenstruktur übertragen und im OnData-Event wieder auslesen - nur so ne Idee...
corpsman hat geschrieben:
Mo 14. Feb 2022, 17:34
Nachteil der Stringgrid ist halt das man nicht mittels STRG + Linke Maus beliebige Einträge markieren kann
Wer sagt das denn? Setze den RangeSelectMode auf rsmMulti.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1352
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Performance Probleme mit TListview

Beitrag von corpsman »

Und wegen Antworten wie deiner finde ich ONline Foren so toll ;)

Ich bastle was und melde mich wieder wird aber eher mitte / ende der Woche..

[Edit]
Das rsMulti ist Cool, aber wie kriege ich nun raus welche Angewählt sind
selection.top bis selection.bottom geht nun ja nicht mehr ...
Ahh Google ist mein Freund: https://forum.lazarus.freepascal.org/in ... pic=7981.0
[Edit2]
Hab mich Grad gewundert warum der auf meinem Linux System fast ne Sek braucht bis er die stringgrid aufbaut, dann habe ich gemerkt das er da 60000 Elemente reingeschlaufelt hat :lol:
--
Just try it

Benutzeravatar
Winni
Beiträge: 1320
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Performance Probleme mit TListview

Beitrag von Winni »

corpsman hat geschrieben:
Mo 14. Feb 2022, 19:50

Hab mich Grad gewundert warum der auf meinem Linux System fast ne Sek braucht bis er die stringgrid aufbaut, dann habe ich gemerkt das er da 60000 Elemente reingeschlaufelt hat :lol:
Hi!

TStringGrid ist aasig schnell:

Code: Alles auswählen

StringGrid1.LoadFromCSVfile (...
Aus einer realen Lazarus-App:

Beispiel: 7.3 MB in ~ 70.000 Zeilen zu 19 Columns braucht 2300 ms, geladen von HD.
Das sind ~ 1.330.000 Zellen
Davon ist eine Column noch der Inhalt eines Memos.

Schneller gehts wohl nicht.

Winni

Antworten