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 VirtualStringTree ; ist Knoten sichtbar? (https://www.delphipraxis.net/96689-virtualstringtree-%3B-ist-knoten-sichtbar.html)

drchaos 29. Jul 2007 01:15


VirtualStringTree ; ist Knoten sichtbar?
 
Hallo!

Wahrscheinlich ist es ganz einfach, aber ich finde es nicht... also, ich habe Knoten in meinem VST, die wiederum Kindknoten bekommen sollen. Durch die Beschriftung der Kindknoten möchte ich Informationen anzeigen lassen, wenn der Elternknoten expandiert ist.

Nun ändert sich die Menge der darzustellenden Informationen und damit die Anzahl der Kindknoten aber sehr häufig, außerdem gibt es sehr viele Knoten die Informationen in ihren Kindknoten anzeigen wollen. Daher ist es nicht ratsam, bei Änderungen der Informationen auch sofort die Struktur der Kindknoten zu aktualisieren.

Ich möchte das Problem nun so lösen, dass die Struktur der Kindknoten nur dann aktualisiert wird, falls der dazugehörige Elternknoten gerade im VST sichtbar ist (unter Sichtbarkeit verstehe ich hier nicht die Eigenschaft 'Visible', sondern ganz einfach ob der Knoten im Zeichenbereich des VST liegt).

Wie kann ich abfragen, ob ein Knoten derzeit angezeigt wird?

Hawkeye219 29. Jul 2007 09:25

Re: VirtualStringTree ; ist Knoten sichtbar?
 
Hallo,

falls es dir nur um die Behandlung der Ereignisse OnGetText etc. geht - das regelt die VST-Komponente selbst. Die Ereignisse werden nur ausgelöst, wenn es wirklich notwendig ist.

Unabhängig davon kannst du jederzeit die Sichtbarkeit eines Knotens mit der folgenden Funktion überprüfen:

Delphi-Quellcode:
function IsTreeNodeVisible (aTree: TBaseVirtualTree; aNode: PVirtualNode): Boolean;
var
  R : TRect;
begin
  if ((aTree = nil) or (aNode = nil)) then
    Result := False
  else
    begin
      R := aTree.GetDisplayRect(aNode, -1, False);
      Result := IntersectRect(R, aTree.ClientRect, R);
    end;
end;
Gruß Hawkeye

drchaos 29. Jul 2007 10:56

Re: VirtualStringTree ; ist Knoten sichtbar?
 
Zitat:

Zitat von Hawkeye219
falls es dir nur um die Behandlung der Ereignisse OnGetText etc. geht - das regelt die VST-Komponente selbst. Die Ereignisse werden nur ausgelöst, wenn es wirklich notwendig ist.

Danke, das war mir bewußt. Ich habe Knoten, die immer im VST vorhanden sind - sobald die sichtbar werden, wird OnGetText getriggert. Dort frage ich das zu dem Knoten gehörende Objekt ab, ob neue/mehr Informationen dargestellt werden müssen. Ist das so, werden die Kindknoten dementsprechend aufgebaut.

Allerdings kann es aber auch sein, dass die Objekte einfach so andere Informationen darstellen müssen.
Dann könnte ich zwar ohne weiteres Nachfragen die Kindknotenstruktur des zum Objekt gehörenden VST-Knoten ändern - aber das sollte ja eigentlich erst geschehen, wenn der VST-Knoten sichtbar wird (= wenn OnGetText erneut aufgerufen wird).

Und das war der Haken - ist der Knoten bereits sichtbar, wird keine Ereignismethode getriggert. Die Kindknotenstruktur wird folglich nicht aktualisiert, und die dargestellten Informationen sind veraltet.

--------

Aber Dein Code löst das Problem nun - tausend Dank dafür! :-D , ich habe mich in der Doku/im Code zum VST schon halb tot gesucht...


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