Hallo zusammen.
Ich möchte bei meinem VirtualTreeView welches ich als ListView-Ersatz verwende die Schriftfarbe einer Zeile, oder besser noch, einer Zelle ändern.
Ich habe es geschafft die Hintergrundfarbe zu ändern:
Delphi-Quellcode:
procedure TMainForm.VSTBeforeItemErase(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
ItemRect: TRect; var Color: TColor; var EraseAction: TItemEraseAction);
var
pNodeData : PTreeData;
begin
pNodeData := FVirtualStringTreeBFInfo.GetNodeData(Node);
with Canvas do
begin
if pNodeData.Changed then
Color := CHANGEDCOLOR;
if pNodeData.Conflict then
Color := CONFLICTCOLOR;
EraseAction := eaColor;
end;
Leider ändert sich so die gesamte Textfarbe meines Fensters:
Delphi-Quellcode:
procedure TMainForm.VSTBeforeItemErase(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
ItemRect: TRect; var Color: TColor; var EraseAction: TItemEraseAction);
var
pNodeData : PTreeData;
begin
pNodeData := FVirtualStringTreeBFInfo.GetNodeData(Node);
with Font do
begin
if pNodeData.Changed then
Color := CHANGEDCOLOR;
if pNodeData.Conflict then
Color := CONFLICTCOLOR;
EraseAction := eaColor;
end;
Und so ändert sich garnichts:
Delphi-Quellcode:
procedure TMainForm.VSTBeforeItemErase(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
ItemRect: TRect; var Color: TColor; var EraseAction: TItemEraseAction);
var
pNodeData : PTreeData;
begin
pNodeData := FVirtualStringTreeBFInfo.GetNodeData(Node);
with Canvas.Font do
begin
if pNodeData.Changed then
Color := CHANGEDCOLOR;
if pNodeData.Conflict then
Color := CONFLICTCOLOR;
EraseAction := eaColor;
end;
Gibt es eine Möglichkeit das zu erreichen was ich möchte?
Vielen Dank
P.S.: manchmal lese ich VirtualTreeView und manchmal VirtualStringTree. Wo liegt da der Unterschied?