AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree: Einzelne Zelle einfärben

Ein Thema von Piro · begonnen am 27. Nov 2009 · letzter Beitrag vom 27. Nov 2009
Antwort Antwort
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

VirtualStringTree: Einzelne Zelle einfärben

  Alt 27. Nov 2009, 09:28
Moin zusammen,

wie färbe ich eine bestimme Zeiles eines VST ein, wenn ein bestimmter Wert des jeweiligen Datensetzes existiert?

Mein bisheriger Code färbt im Wechsel die Zeilen.
Delphi-Quellcode:
procedure Tfrm_main.vst_network_subnetdetailsAfterItemErase(
  Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
  ItemRect: TRect);
var
 SubnetDetailsData : TOSubnetDetailsData;
begin
 if Sender.Selected[Node] then
   Exit;

 if Odd(Node.Index) then
   TargetCanvas.Brush.Color := $F8F8F8
 else
   TargetCanvas.Brush.Color := clWhite;

 TargetCanvas.FillRect(ItemRect);
end;
Wenn ich jetzt folgendes hinzufüge, färbt er leder die ganze Zeile ein. Ich möchte aber nur die Zelle in der 1.Spalte färben.
Delphi-Quellcode:
// Spalte 0 einfärben, wenn es sich um ein Exclude handelt
 SubnetDetailsData := TOSubnetDetailsData(vst_network_subnetdetails.GetNodeData(Node)^);
 if SubnetDetailsData.dhcp_exclude = 0 then
 begin
   TargetCanvas.Brush.Color := clNavy;
   TargetCanvas.FillRect(ItemRect);
 end;
Wie müsste ich meinen Code anpassen, damit das klappt oder muss ich ein anderes Ereignis nehmen? Leider gibt es im AfterItemErase Event keinen Bezug auf die Spalte.

Vielen Dank im voraus. Gruß, Sven
  Mit Zitat antworten Zitat
ToFaceTeKilla

Registriert seit: 17. Mai 2006
Ort: Leipzig
283 Beiträge
 
Delphi XE2 Professional
 
#2

Re: VirtualStringTree: Einzelne Zelle einfärben

  Alt 27. Nov 2009, 09:40
Dann nimm doch OnBeforePaint. Wenn du eine Möglichkeit hast, genau diese Zelle zu identifizieren, sollte das gehen.
Nach dem Löschen, muss er ja eh neu gezeichnet werden. Zur Not erzwingst du es halt (Update).
Billy Gerwitz
"Bei der Softwareentwicklung suchen wir nicht den richtigen Weg, sondern den am wenigsten falschen." - frei nach V. Hillmann
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: VirtualStringTree: Einzelne Zelle einfärben

  Alt 27. Nov 2009, 09:50
Hallo Sven,

OnBeforeCellPaint klingt gut, oder?

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#4

Re: VirtualStringTree: Einzelne Zelle einfärben

  Alt 27. Nov 2009, 10:16
Ich habe es jetzt auch selbst herausgefunden. Nur habe ich AfterCellPaint genommen.

Delphi-Quellcode:
procedure Tfrm_main.vst_network_subnetdetailsAfterCellPaint(
  Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
  Column: TColumnIndex; CellRect: TRect);
var
 SubnetDetailsData : TOSubnetDetailsData;
begin
 // Spalte 0 einfärben, wenn es sich um ein Exclude handelt
 SubnetDetailsData := TOSubnetDetailsData(vst_network_subnetdetails.GetNodeData(Node)^);
 if vst_network_subnetdetails.Header.Columns[Column].Text = 'then
 begin
   if SubnetDetailsData.dhcp_exclude = 0 then
   begin
     TargetCanvas.Brush.Color := clBlack;
     TargetCanvas.FillRect(CellRect);
   end;
 end;
end;
Was ist denn besser AfterCellPaint oder OnBeforeCellPaint?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: VirtualStringTree: Einzelne Zelle einfärben

  Alt 27. Nov 2009, 10:30
Für ein besseres Verständnis solltest du dir die Hilfedatei zum VST (PDF, 8 MByte) ansehen. Dort wird im Kapitel 5.2 "Paint cycles and stages" die Abfolge der einzelnen Ereignisse detailliert beschrieben.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#6

Re: VirtualStringTree: Einzelne Zelle einfärben

  Alt 27. Nov 2009, 10:36
Danke. Das sind ja 801 Seiten. Bei Gelegenheit lesse ich es mir durch.

Benutze das OnBeforeCellPaint Event.

Schönen Tag euch und nochmal vielen Dank.
  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 06:29 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