TVirtualStringTree-как изменить кнопки [ -] / [ + ]?
как я могу использовать свои собственные кнопки (изображения) для замены по умолчанию [-]
/[+]
кнопки в VST?
Вместо этого я хочу использовать стрелки (, ), но и для поддержки режима RTL bidi (, ).
edit: я знаю о bsTriangle
стиль (ButtonStyle). Он не уважает RTL. Я хочу использовать свои собственные изображения.
3 ответов
разве эти изображения обычно не в Windows Vista и Windows 7? Элемент управления tree должен автоматически получать их в этих системах при включении тем.
простой способ получить что-то близкое к этому-просто установить ButtonStyle
свойство bsTriangle
. Однако это будут не совсем изображения, показанные в вопросе. Стрелка " минус "будет указывать прямо вниз, а не по диагонали, а Стрелка" Плюс " будет сплошной, а не контур.
вы можете предоставить свой собственный рисунок. Измените ресурсы VT_XPBUTTONMINUS и VT_XPBUTTONPLUS на любые изображения и установите ButtonFillMode
свойство fmShaded
.
Я не вижу возможности для изменения изображения на основе режима bi-di, хотя. Можно создать класс-потомок, который переопределяет PaintNodeButton
, а затем нарисовать все, что вы хотите. Скопируйте код размещения из родительского класса.
IIRC вы получите его, включив toUseExplorerTheme в PaintOptions. Однако это также изменяет внешний вид выбора (к лучшему 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;
Я вам
Edit: к сожалению, параметр Form1.BiDiMode
to bdRightToLeft
дает
на моем немецком Windows 7. Я не знаю, работает ли это лучше на арабском или иврите системный.