独自のカスタムボタン(画像)を使用して、VSTのデフォルトの[-]/ボタンを置き換えるにはどうすればよいですか?
代わりに矢印を使用したい(、)が、RTLビディモード(、)もサポートしたい。[+]



編集:私はbsTriangleスタイル(ButtonStyle)を知っています。RTLを尊重しません。自分のカスタム画像を使いたい。
独自のカスタムボタン(画像)を使用して、VSTのデフォルトの[-]/ボタンを置き換えるにはどうすればよいですか?
代わりに矢印を使用したい(、)が、RTLビディモード(、)もサポートしたい。[+]



編集:私はbsTriangleスタイル(ButtonStyle)を知っています。RTLを尊重しません。自分のカスタム画像を使いたい。
これらの画像は通常、WindowsVistaおよびWindows7にありませんか?テーマを有効にすると、ツリーコントロールはそれらのシステムでそれらを自動的に取得する必要があります。
それに近いものを取得する簡単な方法は、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;
私は得る

編集:残念ながら、ドイツ語のWindows 7でyieldに設定すると
Form1.BiDiMode、
アラビア語またはヘブライ語のシステムでこれがうまく機能するかどうかわかりません。bdRightToLeft
ButtonStyleプロパティを参照してください。RTLビディモードの考え方を尊重しているかどうかはわかりません。