Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView Flackert (https://www.delphipraxis.net/134183-listview-flackert.html)

jokerfacehro 17. Mai 2009 11:38


ListView Flackert
 
Halli Hallo !

ich hab ne schöne TListView mit Report.

Ich muss die ListView jede Sekunde aktualisieren, da komm ich nicht drum rum.
jetzt flackert die natürlich ganz schön und meine Selection wird gelöscht.

Ich fülle die ListView so:
Delphi-Quellcode:
var item:TListItem;
    buffer:TSplit; //(array of String)

for i:=0 to Length(buffer)-3 do begin
 item:=ListView2.Items.Add;
 buffer2:=Split('"',buffer[i]);
 buffer3:=Split(' ',buffer2[0]);

 item.Caption:=IntToStr(i);
 item.SubItems.Add(buffer2[1]);
 item.SubItems.Add(buffer3[0]);
 item.SubItems.Add(buffer3[1]);
end;
ich mach nen ähnliches Programm wie HLSW. Habe HLSW mit WinSpy durchsucht und nen SysListView gefunden, der die Aufgabe übernimmt, was bei mir der TListView macht.

Entweder es gibt ne möglichkeit den TListView flackerfrei zu kriegen oder nen SysListView zu erstellen :D

schon ma danke im vorraus !

Edit: DoubleBuffered is true


Gruß Jokerface

himitsu 17. Mai 2009 11:47

Re: ListView Flackert
 
Probier's mal mit ListView2.Items.BeginUpdate; und ListView2.Items.EndUpdate; vor und hinter deinem Code.


Aber wozu mußt du das denn sekündlich ändern bzw. komplett neu füllen?
Wäre es nicht besser/schöner (OK, auch etwas aufwändiger), wenn du nur die Änderungen in den bestehenden ListView-Inhalt einbaust?
(würde sich unter Umständen auch vorteilhafter auf die Bediehnung auswirken, bezüglich Scrollen und Selektierung)

mirage228 17. Mai 2009 11:48

Re: ListView Flackert
 
Schau Dir mal Delphi-Referenz durchsuchenItems.BeginUpdate und Delphi-Referenz durchsuchenItems.EndUpdate an. Damit kannst Du das Flackern ggf. etwas verringern.
Sonst kannst Dir auch die VirtualTreeView Komponente anschauen, die ist der TListView in sehr vielen Belangen überlegen (aber auch etwas komplexer in der Handhabung)...

Viele Grüße

jokerfacehro 17. Mai 2009 11:53

Re: ListView Flackert
 
Ok, das flackern verringert sich um 33% ^^

Ich muss jede sekunde den status eines servers abfragen und die daten ändern sich jede sekunde.
komischerweise bekommt HLSW dieses problem mit gelöst (benutzt SysListView, weiß nicht ob das nen unterschied macht)

HLSW

Server: afischi.de:28960

Edit: außerdem geht der scrollbalken jedes mal wieder auf Position(0,0)
was sehr stört wenn man ein element bearbeiten will, außerdem wird die selection weggenommen.

komischerweise flackern auch nur die Title Captions. der inhalt ist ok

hmm

himitsu 17. Mai 2009 12:09

Re: ListView Flackert
 
Zitat:

Zitat von jokerfacehro
Edit: außerdem geht der scrollbalken jedes mal wieder auf Position(0,0)
was sehr stört wenn man ein element bearbeiten will, außerdem wird die selection weggenommen.

(wie ich schon sagte ... siehe "Bediehnung" oben)
Ja klar, weil du den Inhalt löschst und da dann nix mehr drin ist, wird hochgescrollt.

Und was HLSW angeht ... die werden wohl nur den Inhalt in der bestehenden Liste ändern und nicht jedesmal die Liste komplet neu aufbauen.


es gibt da 2 grundsätzliche Möglichkeiten:
- erstmal eine interne Liste aufbauen und dann die ListView damit abgleichen
- direkt in der ListView ändern (notfalls "tote"/gelöschte Einträge markieren und im Anschluß löschen)

> also Änderungen überschreiben, Neues per Add/Insert einfügen und Altes löschen

jokerfacehro 17. Mai 2009 16:38

Re: ListView Flackert
 
ich hab das problem gelöst.
wie himitsu gesagt hat ^^

extra liste angelegt und alle subitems einzeln übertragen wenn nötig.
dadurch bleibt das select erhalten.

THX :D

EDIT: BeginUpdate und EndUpdate lassen jetz das listview erst recht flackern, keine ahnung warum.
ohne die beiden flackert es garnicht selbst beim Interval 1sekunden

Freiwilderer 28. Mai 2009 07:24

Re: ListView Flackert
 
hi, weiß nich, obs noch aktuell ist, aber sonst versuch mal
listview1.DoubleBuffered := true
bei ner anderen liste hat mir das sehr geholfen

mfg

himitsu 28. Mai 2009 08:26

Re: ListView Flackert
 
@Freiwilderer: das problem hier war, daß der ListView-Inhalt zwischenzeitlich jede Sekunde komplett geleert und neu befüllt wurde, also kurz garkein Inhalt drin enthalten war, weßhalb da die ListView wirklich leer war.

DoubleBuffered hilft bei diesen langen "leer"-Zeiten nicht wirklich viel,
dazumal es auch noch andere Probleme gab, welche sich so nur um eine kurze Zeit verzögert angezeigt würden.
- es wurde immer wieder hochgescrollt, die Seletions verschwanden .....


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 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