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 - Schriftfarbe der jeweiligen Zelle? (https://www.delphipraxis.net/136080-virtualstringtree-schriftfarbe-der-jeweiligen-zelle.html)

Piro 23. Jun 2009 09:51


VirtualStringTree - Schriftfarbe der jeweiligen Zelle?
 
Guten Tag,

ich würde gerne mit einer For-Schleife durch das VST laufen und alle Datensätze kontrollieren, wie die Schriftfarbe der Werte in einer bestimmten Spalte ist.

Irgendwie fehlt mir der Ansatz. Die Daten des VST liegen in einer Class (Anlehnung an das Beispiel hier im Forum).

Beispielcode:
Delphi-Quellcode:
...
var
 i : Integer;
 curNode : PVirtualNode;
 TimeOverviewDate : TOTimeOverviewData;
...
with vst_zeiterfassung do
 begin
   curNode := GetFirst;
   for i := 0 to RootNodeCount - 1 do
   begin
     TimeOverviewDate := TOTimeOverviewData(vst_zeiterfassung.GetNodeData(curNode)^);

     // Hier müßte jetzt irgendwie die Abfrage kommen, ob der Zelleninhalt (=Schriftfarbe) Rot oder Grün ist. Aber wie???

     curNode := GetNext(curNode);
   end;
end;
Vielen Dank im voraus.
Gruß, Sven

chaosben 23. Jun 2009 10:02

Re: VirtualStringTree - Schriftfarbe der jeweiligen Zelle?
 
Hi!

Ich behaupte jetzt mal ganz frech, das dein Ansatz verkehrtherum ist.

Normalerweise geben die Daten vor, wie die Schriftfarbe ist. D.h. irgendwas in dem jeweiligen TOTimeOverviewData-Objekt sagt: zeig mich rot bzw. grün an.
Das würde man dann beim OnBeforeCellDraw (so in etwa) auswerten und die Farbe entsprechend setzen.
Das würde für dich bedeuten, das du die Auswertung nicht nach der Farbe der Zelle machst, sondern nach dem Inhalt der Daten.

Das wäre imho eine saubere Lösung.

sh17 23. Jun 2009 10:18

Re: VirtualStringTree - Schriftfarbe der jeweiligen Zelle?
 
Ich würde auch sagen, dass man das so sowieso nicht erreichen kann. Das Zeichnen der Zellen passiert ja OnTheFly. D.h. die Schriftfarbe und so weiter wird nicht komplett in allen Nodes hinterlegt sondern direkt vorm Zeichnen festgelegt und ggf. mit OnBeforePaint usw. angepasst. Die Infos musst Du Dir also aus den Daten holen.

Die Schleife wäre so besser:

Delphi-Quellcode:
with vst_zeiterfassung do
begin
   curNode := GetFirst;
   while CurNode <> nil do
   begin
     TimeOverviewDate := TOTimeOverviewData(vst_zeiterfassung.GetNodeData(curNode)^);

     if TimeOverviewDate.IsRot then ...

     curNode := GetNext(curNode);
   end;
end;

Piro 23. Jun 2009 10:19

Re: VirtualStringTree - Schriftfarbe der jeweiligen Zelle?
 
Danke,

aber das passt nicht ganz vom Ablauf mit meinem Programm. Die Daten sind im VST und erst nach betätigen eines Button werden die Daten berechnet. So zu sagen eine Liste mit Zeiten (Rot = Minus und Grüm = Plus).

Am Ende soll dann die Gesamtsumme kommen. Das muss doch irgndwie möglich sein. :-)

sh17 23. Jun 2009 10:26

Re: VirtualStringTree - Schriftfarbe der jeweiligen Zelle?
 
Na dann musst Du Dein Record um die entsprechende Eigenschaft erweitern. Wenn Du den Knoten mit den Daten hinzufügst, wirst Du doch wissen, ob + oder -. bzw. beim Ändern auch.

Piro 23. Jun 2009 12:17

Re: VirtualStringTree - Schriftfarbe der jeweiligen Zelle?
 
Danke für eure Ideen.

Ich habe mir in mein Record ein property gemacht, welches den erforderlichen Wert aufnimmt. Jetzt klappt alles bestens.

Schönen Tag noch.


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