如何使用我自己的自定义按钮(图像)替换VST中的默认[-]
/[+]
按钮?
我想用箭头代替(,),但也支持RTL双向模式(,)。TVirtualStringTree - 如何更改[ - ]/[+]按钮?
编辑:我知道bsTriangle
风格(ButtonStyle)。它不尊重RTL。我想使用我自己的自定义图像。
如何使用我自己的自定义按钮(图像)替换VST中的默认[-]
/[+]
按钮?
我想用箭头代替(,),但也支持RTL双向模式(,)。TVirtualStringTree - 如何更改[ - ]/[+]按钮?
编辑:我知道bsTriangle
风格(ButtonStyle)。它不尊重RTL。我想使用我自己的自定义图像。
这些图像通常在Windows Vista和Windows 7中吗?当您启用主题时,树形控件应该在这些系统上自动获取它们。
接近某个东西的简单方法是将ButtonStyle
属性设置为bsTriangle
。不过,这并不完全是问题中显示的图像。 “减号”箭头将指向下方而不是对角线,而“加号”箭头将是实心的而不是轮廓线。
您可以提供自己的位图。将VT_XPBUTTONMINUS和VT_XPBUTTONPLUS资源更改为所需的任何图像,并将ButtonFillMode
属性设置为fmShaded
。
虽然我没有看到基于bi-di模式改变图像的功能。你可以创建一个覆盖PaintNodeButton
的后代类,然后绘制任何你想要的。从父类复制放置代码。
IIRC你通过在PaintOptions中包含toUseExplorerTheme来获得它。然而,这也改变了选择的外观(更好的IMNSHO),可能更多。
例如,如果我一个窗体上放置一个TVirtualStringTree
并添加以下事件处理程序:
procedure TForm1.FormCreate(Sender: TObject);
begin
VT.RootNodeCount := 10;
VT.TreeOptions.PaintOptions := VT.TreeOptions.PaintOptions + [toUseExplorerTheme];
VT.OnInitNode := VTInitNode;
VT.OnInitChildren := VTInitChildren;
end;
procedure TForm1.VTInitChildren(Sender: TBaseVirtualTree;
Node: PVirtualNode; var ChildCount: Cardinal);
begin
ChildCount := 3;
end;
procedure TForm1.VTInitNode(Sender: TBaseVirtualTree;
ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
begin
Include(InitialStates, ivsHasChildren);
end;
我得到
编辑:不幸的是,设置Form1.BiDiMode
到bdRightToLeft
产量 在我的德语Windows 7上。我不知道这是否对阿拉伯语或希伯来语系统更好。
你正在使用什么版本的VirtualTrees? – ZigiZ
@ZigiZ:位于VirtualTrees.pas顶部的联系人说“版本5.0.0”。 –
谢谢先生。这似乎是重写'PaintNodeButton'是唯一的选择。 – ZigiZ