AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Unterschidliche Schriftgrössen in Virtualstringtree
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschidliche Schriftgrössen in Virtualstringtree

Ein Thema von aschne1 · begonnen am 3. Feb 2006 · letzter Beitrag vom 3. Feb 2006
Antwort Antwort
aschne1

Registriert seit: 18. Jul 2004
Ort: Davos
64 Beiträge
 
Delphi 2005 Professional
 
#1

Unterschidliche Schriftgrössen in Virtualstringtree

  Alt 3. Feb 2006, 12:55
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 ).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:
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;
Danke für Eure Hilfe

Gruss
Armin
aschne1
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#2

Re: Unterschidliche Schriftgrössen in Virtualstringtree

  Alt 3. Feb 2006, 13:26
das beforeitemErase ist denke ich besser für deine zwecke was die farbe betrifft.
du kannst die tiefe eines knoten mit
tiefe:=vst.GetNodeLevel(node); abfragen um dann die nicht anderes zu malenden knoten zu überspringen.

Delphi-Quellcode:
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;
die fontsize änderst du am besten im on painttext.
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;
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
aschne1

Registriert seit: 18. Jul 2004
Ort: Davos
64 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Unterschidliche Schriftgrössen in Virtualstringtree

  Alt 3. Feb 2006, 17:11
@generic
Danke für Deine Hilfe. Funzt prima!

Für alle die das gleiche Problem haben noch mein Code:

Delphi-Quellcode:
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;
Gruss
Armin
aschne1
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#4

Re: Unterschidliche Schriftgrössen in Virtualstringtree

  Alt 3. Feb 2006, 17:30
ich glaube nicht das das komiliert.

im oberenblock steht 2 mal hintereinander else else
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#5

Re: Unterschidliche Schriftgrössen in Virtualstringtree

  Alt 3. Feb 2006, 17:48
Zitat von generic:
ich glaube nicht das das komiliert.
Leider doch

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;
  Mit Zitat antworten Zitat
aschne1

Registriert seit: 18. Jul 2004
Ort: Davos
64 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Unterschidliche Schriftgrössen in Virtualstringtree

  Alt 3. Feb 2006, 20:16
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:
if Node.Parent = Sender.RootNode then mit nur einem else zu:
if Odd(Node.Index) then Welche Lösung ist sinnvoller, bzw. schneller?

Gruss
Armin
aschne1
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 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