如何使用我自己的自定義按鈕(圖像)替換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