6

如何使用我自己的自定义按钮(图像)来替换VST 中的默认[-]/按钮? 我想使用箭头代替(, ),但也支持 RTL 双向模式(, )。[+]
在此处输入图像描述在此处输入图像描述在此处输入图像描述在此处输入图像描述

编辑:我知道bsTriangle样式(ButtonStyle)。它不尊重 RTL。我想使用我自己的自定义图像。

4

3 回答 3

9

这些图像通常不是在 Windows Vista 和 Windows 7 中吗?当您启用主题时,树控件应在这些系统上自动获取它们。

获得接近它的简单方法是将ButtonStyle属性设置为bsTriangle. 不过,它不会完全是问题中显示的图像。“减号”箭头将指向直下而不是对角线,“加号”箭头将是实心而不是轮廓。

您可以提供自己的位图。将 VT_XPBUTTONMINUS 和 VT_XPBUTTONPLUS 资源更改为您想要的任何图像,并将ButtonFillMode属性设置为fmShaded.

不过,我看不到基于双向模式更改图像的工具。您可以创建一个覆盖的后代类,PaintNodeButton然后绘制您想要的任何内容。从父类复制放置代码。

于 2012-05-17T14:59:26.990 回答
7

IIRC 你可以通过在 PaintOptions 中包含 toUseExplorerTheme 来获得它。然而,这也改变了选择的外观(更好的 IMNSHO),可能更多。

例如,如果我将 aTVirtualStringTree放在表单上并添加以下事件处理程序:

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;

我明白了 带有三角形标记的屏幕截图

编辑:不幸的是,在我的德语 Windows 7 上设置Form1.BiDiModebdRightToLeft产量 带有错误三角形标记的屏幕截图 。我不知道这在阿拉伯语或希伯来语系统上是否效果更好。

于 2012-05-17T17:59:50.203 回答
1

ButtonStyle物业。不确定它是否尊重 RTL 比迪模式思想。

于 2012-05-17T14:53:13.810 回答