gpt4 book ai didi

delphi - VirtualTreeView - 同一节点中文本的不同颜色

转载 作者:行者123 更新时间:2023-12-03 14:46:36 25 4
gpt4 key购买 nike

我正在尝试在 TVirtualStringTree 中创建一个类似于以下内容的 View :

Folder view with different font colors

在上面的示例中,我展示了一些我想要达到的可能场景。 FolderA 具有粗体文本,其后的同一节点中的红色非粗体文本位于其后面。我正在寻找产生这种输出的方法。

但是,如果创建起来太难或问题太多,我会很高兴使用 FolderBFolderC 类型的输出 - 可能可以用 2 列来制作,一个包含文件夹名称,另一个包含其中的文件数。

FolderD 此处只是一个没有文件的文件夹示例以及该文件夹的输出(文本未加粗且没有数字)。

我正在寻找如何实现这种效果的任何指示,因为 VirtualTreeView 似乎每个节点只能有单一颜色或粗体设置。任何有关如何朝 FolderAFolderBFolderC 方向移动的提示或建议都非常感谢,所以我有一个起点。 Delphi 或 C++ Builder 示例均受欢迎(但最终代码将在 C++ Builder 中)。

最佳答案

您可以简单地使用toShowStaticText (StringOptions)选项:

implementation

type
PNodeRec = ^TNodeRec;
TNodeRec = record
Name: WideString;
Count: Integer;
IsBold: Boolean;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
Node: PVirtualNode;
NodeRec: PNodeRec;
I: Integer;
begin
VirtualStringTree1.TreeOptions.StringOptions :=
VirtualStringTree1.TreeOptions.StringOptions + [toShowStaticText];
VirtualStringTree1.NodeDataSize := Sizeof(TNodeRec);
// Populate some data
for I := 1 to 10 do
begin
Node := VirtualStringTree1.AddChild(nil);
NodeRec := VirtualStringTree1.GetNodeData(Node);
Initialize(NodeRec^);
NodeRec.Name := 'Node' + IntToStr(I);
NodeRec.Count := I;
NodeRec.IsBold := I mod 2 = 0;
end;
end;

procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
NodeRec: PNodeRec;
begin
NodeRec := PNodeRec(TVirtualStringTree(Sender).GetNodeData(Node));
if TextType = ttNormal then
CellText := NodeRec^.Name
else // ttStatic
CellText := Format('(%d)', [NodeRec^.Count]);
end;

procedure TForm1.VirtualStringTree1PaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType);
var
NodeRec: PNodeRec;
begin
NodeRec := PNodeRec(TVirtualStringTree(Sender).GetNodeData(Node));
if TextType = ttNormal then
begin
if NodeRec^.IsBold then
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
end
else // ttStatic
TargetCanvas.Font.Color := clRed;
end;

输出:

enter image description here

关于delphi - VirtualTreeView - 同一节点中文本的不同颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27275306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com