![]() |
Unterschidliche Schriftgrössen in Virtualstringtree
Hallo
Ich verwende zur Datenanzeige die Komponente VirtualStringTree. Zur besseren Übersicht hinterlege ich die einzelnen Hauptknoten abwechslungsweise farbig blau-weiss-blau-weiss-usw.... (nicht wegen Herrn Stoiber :wink: ).Die Unterknoten haben die gleiche Farbe wie der Hauptknoten. Soweit kriege ich das auch hin. Nun möchte ich die Unterknoten aber in einer anderen Schriftgrösse anzeigen. Auch das geht mit der untenstehenden Procedure, nur wenn die Kinderknoten ausklappen steigt die CPU-Auslastung auf 95-99%. Sobald ich alle Unterknoten wieder einklappe ist die CPU-Auslastung unter 5%. Ich bin mir sicher, dass es eine einfache Lösung gibt. Nur welche?
Delphi-Quellcode:
Danke für Eure Hilfe
procedure Tfrm_Pos.vstPositionBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellRect: TRect); begin if Node.Parent <> Sender.RootNode then begin TVirtualStringTree(Sender).Font.Size := 8; if not Odd(Node.Parent.Index) then TargetCanvas.Brush.Color := clWhite else TargetCanvas.Brush.Color := kon_color1; end else begin TVirtualStringTree(Sender).Font.Size := 12; if not Odd(Node.Index) then TargetCanvas.Brush.Color := clWhite else TargetCanvas.Brush.Color := kon_color1; end; TargetCanvas.FillRect(CellRect); end; Gruss |
Re: Unterschidliche Schriftgrössen in Virtualstringtree
das beforeitemErase ist denke ich besser für deine zwecke was die farbe betrifft.
du kannst die tiefe eines knoten mit
Delphi-Quellcode:
abfragen um dann die nicht anderes zu malenden knoten zu überspringen.
tiefe:=vst.GetNodeLevel(node);
Delphi-Quellcode:
die fontsize änderst du am besten im on painttext.
procedure TForm1.VirtualStringTree1BeforeItemErase(
Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect; var ItemColor: TColor; var EraseAction: TItemEraseAction); begin if sender.AbsoluteIndex(node) mod 2=0 then ItemColor:=$123344; EraseAction:=eaColor; end;
Delphi-Quellcode:
procedure TForm1.VirtualStringTree1PaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType); begin if sender.AbsoluteIndex(node) mod 2=0 then TargetCanvas.Font.Size:=24; end; |
Re: Unterschidliche Schriftgrössen in Virtualstringtree
@generic
Danke für Deine Hilfe. Funzt prima! Für alle die das gleiche Problem haben noch mein Code:
Delphi-Quellcode:
Gruss
procedure Tfrm_Pos.vstPositionBeforeItemErase(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect; var ItemColor: TColor; var EraseAction: TItemEraseAction); begin if Node.Parent = Sender.RootNode then if Odd(Node.Index) then ItemColor:=kon_color1 else else if Odd(Node.Parent.Index) then ItemColor:=kon_color1; EraseAction:=eaColor; end; procedure Tfrm_Pos.vstPositionPaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType); begin if Node.Parent <> Sender.RootNode then begin TargetCanvas.Font.Size:=8; Node.NodeHeight := 16; end; end; |
Re: Unterschidliche Schriftgrössen in Virtualstringtree
ich glaube nicht das das komiliert.
im oberenblock steht 2 mal hintereinander else else |
Re: Unterschidliche Schriftgrössen in Virtualstringtree
Zitat:
Anders formatiert:
Delphi-Quellcode:
//...
if Node.Parent = Sender.RootNode then if Odd(Node.Index) then ItemColor := kon_color1 else {;} else if Odd(Node.Parent.Index) then ItemColor := kon_color1; |
Re: Unterschidliche Schriftgrössen in Virtualstringtree
Hi
Was heist hier 'Leider doch'? Könnte auch mit begin/end arbeiten, doch mit zwei else hintereinander umgehe ich das. Denn so gehört der else-Zweig zu:
Delphi-Quellcode:
mit nur einem else zu:
if Node.Parent = Sender.RootNode then
Delphi-Quellcode:
Welche Lösung ist sinnvoller, bzw. schneller?
if Odd(Node.Index) then
Gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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 by Thomas Breitkreuz