6

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

編集:私はbsTriangleスタイル(ButtonStyle)を知っています。RTLを尊重しません。自分のカスタム画像を使いたい。

4

3 に答える 3

9

これらの画像は通常、WindowsVistaおよびWindows7にありませんか?テーマを有効にすると、ツリーコントロールはそれらのシステムでそれらを自動的に取得する必要があります。

それに近いものを取得する簡単な方法は、ButtonStyleプロパティをに設定することbsTriangleです。ただし、質問に示されている画像とは正確には一致しません。「マイナス」の矢印は対角線ではなく真下を指し、「プラス」の矢印は輪郭ではなく実線になります。

独自のビットマップを提供できます。VT_XPBUTTONMINUSおよびVT_XPBUTTONPLUSリソースを必要な画像に変更し、ButtonFillModeプロパティをに設定しますfmShaded

ただし、bi-diモードに基づいて画像を変更する機能はありません。をオーバーライドする子孫クラスを作成してPaintNodeButtonから、必要なものをペイントできます。親クラスから配置コードをコピーします。

于 2012-05-17T14:59:26.990 に答える
7

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間違った三角形のマーカーのスクリーンショット

于 2012-05-17T17:59:50.203 に答える
1

ButtonStyleプロパティを参照してください。RTLビディモードの考え方を尊重しているかどうかはわかりません。

于 2012-05-17T14:53:13.810 に答える