Delphi-PRAXiS
Seite 2 von 2     12   

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 VirtualStringTree - FullExpand Problem (https://www.delphipraxis.net/128247-virtualstringtree-fullexpand-problem.html)

nuclearping 27. Jan 2009 19:12

Re: VirtualStringTree - FullExpand Problem
 
Entweder wir reden von zwei unterschiedlichen Sachen oder du verstehst nicht, was ich meine.

In keinem Event. Jedesmal wenn du einen neuen Knoten hinzufügst oder mit dem kompletten Aufbau des Baums fertig bist, machst du FullExpand.

UMOL 27. Jan 2009 19:55

Re: VirtualStringTree - FullExpand Problem
 
Ich glaube, wir reden aneinander vorbei... ;-)

Schau dir bitte meine OnGetText Prozedur nochmal an. Dort wird der Tree komplett aufgebaut, und nach dem Aufbau wird FullExpand aufgerufen. Also so, wie du es vorschlägst. ToggleNode wird in diesem Fall nicht ausgelöst, weil OnGetText - wie du richtigerweise erwähnt hattest - zigmal die Sekunde aufgerufen wird. Das heißt, FullExpand muß irgend wo anders aufgerufen werden. Die Frage ist, wo?

Falls ich dich jetzt immer noch nicht verstanden habe (ich lebe schon seit fast zehn Jahren in den USA und mein Deutsch ist etwas eingerostet), dann wäre ich dir wirklich dankbar, wenn du mir mal ein kurzes Code Snippet zeigst, das nicht aus Pseudocode besteht.

Uwe

pertzschc 27. Jan 2009 21:19

Re: VirtualStringTree - FullExpand Problem
 
Zitat:

Zitat von UMOL
Ich glaube, wir reden aneinander vorbei... ;-)

Ja das ist wohl wahr.

OnGetText ist die falsche Prozedur, um mittels StringList die Daten komplett zu beschaffen. Normalerweise beschaffst Du Dir Deine Daten einmalig und hältst sie in einem ContainerObjekt (z.B. der Stringlist). Den VTV baust Du einmalig auf und weisst dabei den Nodes Objekte aus dem ContainerObjekt zu. D.h. ein Node hat die Referenz auf ein Objekt.

In OnGetText wird dann nichts anderes gemacht, als die Referenz auf das Objekt des Nodes (dessen Text bei OnGetText dargestellt werden soll) aufzulösen und dann den String mit entsprechenden Daten des Objektes zu füllen.
Beispiel:

Delphi-Quellcode:
type
  TVST_Hostlist_Node = record
    HostObj: THost;
  end;
  PVST_Hostlist_Node = ^TVST_Hostlist_Node;
Delphi-Quellcode:
function vst_Add_Host(_vst: TVirtualStringTree; _parentNode: PVirtualNode; _Host: THost): PVirtualNode;
var
  Data                                 : PVST_Hostlist_Node;
begin
  Result := _vst.AddChild(_parentNode); // Child-Node erzeugen
  _vst.ValidateNode(Result, False);    // Pointer initialisieren
  Data := _vst.GetNodeData(Result);    // Pointer auf Child-Datenbereich holen
  Data^.HostObj := _Host;
  Logger.Debug2Log('vst_Add_Host: ' + _Host.toString);
end;
Delphi-Quellcode:
procedure TForm1.VST_HostListGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  NodeData                             : PVST_Hostlist_Node;
  lHost                                : THost;
begin
  NodeData := Sender.GetNodeData(Node);
  lHost := NodeData.HostObj;
  if lHost <> nil then begin
    case Column of
      0: CellText := lHost.Hostname;
      1: CellText := lHost.Hostadress;
      2: CellText := lHost.ClientCounterStr;
      3: CellText := '';
      4: CellText := '';
    end;
  end;
end;
Gruß,
Christoph

nuclearping 27. Jan 2009 21:33

Re: VirtualStringTree - FullExpand Problem
 
Im OnGetText den Baum aufzubauen ist wirklich durchs Knie zum Auge, wie's so schön heisst. :P

UMOL 27. Jan 2009 22:12

Re: VirtualStringTree - FullExpand Problem
 
Hi Christoph,

danke, du hast mir genau *das* bestätigt, was ich schon vorher vermutet (und erwähnt) hatte: die Daten in eine Record Structure einlesen und einen entsprechenden Pointer setzen. Okay, werde ich das Ganze wohl nochmal umschreiben müssen...

Vielen Dank an dich und nuclearping für eure Hilfe und Geduld.

Uwe


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr.
Seite 2 von 2     12   

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