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 Treeview-Aktualisierung beim Befüllen deaktivieren!? (https://www.delphipraxis.net/44350-treeview-aktualisierung-beim-befuellen-deaktivieren.html)

torud 18. Apr 2005 12:42


Treeview-Aktualisierung beim Befüllen deaktivieren!?
 
Hallo Leute!

Ich befülle einen Treeview dynamisch in einer Schleife mit Einträgen. Mein Problem ist, dass dieser Vorgang zu lange dauert. Ein Kollege aus der VB-Scene riet mir die Aktualisierung des Treeviews, wenn möglich, abzuschalten.

Wenn ich das richtig verstehe, wird ja das Treeview bei jedem AddChild neu gezeichnet...?

Wenn ich dass unterbrechen könnte und für den letzten Eintrag wieder aktivieren könnte, wäre mir zeittechnisch vielleicht schon etwas geholfen.

Treeview1.Enable:=false hat leider nix geholfen...

Wie könnte es klappen???

beber 18. Apr 2005 12:45

Re: Treeview-Aktualisierung beim Befüllen deaktivieren!?
 
:) Hi,

sollte eigentlich einfach sein:

Delphi-Quellcode:
Treeview.Beginupdate;
// Hier wird manipuliert an den Items
Treeview.Endupdate;
Treeview.Update;
Gruss

P.S.: Falls ich falsch liege, bitte nicht schlagen :)

alcaeus 18. Apr 2005 12:48

Re: Treeview-Aktualisierung beim Befüllen deaktivieren!?
 
Zitat:

Zitat von beber
P.S.: Falls ich falsch liege, bitte nicht schlagen :)

*hau* doch :-P
Die Befehle heissen
Delphi-Quellcode:
TreeView1.Items.BeginUpdate;
bzw.
Delphi-Quellcode:
TreeView1.Items.EndUpdate;
;)
Ausserdem wird bei EndUpdate automatisch aktualisiert.

Greetz
alcaeus

torud 18. Apr 2005 13:28

Re: Treeview-Aktualisierung beim Befüllen deaktivieren!?
 
mille gracie!!!

PMM 18. Apr 2005 15:32

Re: Treeview-Aktualisierung beim Befüllen deaktivieren!?
 
Noch ein Hinweise BeginUpdate / EndUpdate immer paarweise aufrufen. Intern wird dies als Zähler veraltet (0=Anzeige aktiviert). Es gib aber keinen "Unterlaufschutz". Wenn also mal ein EndUpdate zuviel aufgerufen wurde, zählt dieser munter ins Minus und die 0 wird danach an unvorhergesehen Stellen erreicht. Leider kann man den UpdateCounter nicht direkt abfragen. Hier hilft der "Privat field hack":

Type THackTreeNodes = class(TPersistent) //"Privat Field Hack"
private //anders kommen wir nicht an FUpDateCount heran
FOwner: TCustomTreeView;
FUpdateCount: Integer;
FNodeCache: TNodeCache;
FReading: Boolean;
end;

Function TreeViewUpdateCount(aTreeView: TTreeView):Integer; //UpdateCount lässt sich nur mit einem Hack auslesen
Begin
Result := THackTreeNodes(aTreeView.Items).FUpdateCount;
end;

Gruß PMM


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz