【发布时间】:2012-12-11 08:35:39
【问题描述】:
我有一个用于菜单项和 TButton 的 TAction。我希望菜单项显示标签,而 TButton 显示 only 图标。但是,当一个Action被赋值时,Vcl会自动设置TButton的Caption属性,我无法摆脱它。
有什么想法吗?
【问题讨论】:
标签: delphi c++builder taction
我有一个用于菜单项和 TButton 的 TAction。我希望菜单项显示标签,而 TButton 显示 only 图标。但是,当一个Action被赋值时,Vcl会自动设置TButton的Caption属性,我无法摆脱它。
有什么想法吗?
【问题讨论】:
标签: delphi c++builder taction
在菜单项上,将ImageIndex 设置为-1。在按钮上,将Caption 设置为''。您必须在运行时执行此操作。
这将破坏与这些单个属性的操作的关联。该操作仍将用于Hint、OnExecute、OnUpdate 等。
【讨论】:
您可以有两个单独的操作:一个用于菜单项,一个用于按钮。
【讨论】:
OnExecute 和OnUpdate 事件共享相同的处理程序。
OnExecute 和OnUpdate 处理程序,您仍然不在乎哪个控件执行它们。您可以(除其他外)在共享的OnUpdate 处理程序中的一个地方仅禁用这些操作,而不必担心任何事情。
一个更老套的解决方案可能是将 TAG 22 设置为例如在下面的例子中
type
TButton=Class(Vcl.StdCtrls.TButton)
procedure SetText(var Message:TWMSETTEXT); message WM_SETTEXT;
End;
TForm4 = class(TForm)
ActionList1: TActionList;
ImageList1: TImageList;
Action1: TAction;
BitBtn1: TBitBtn;
Button1: TButton;
Button2: TButton;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
{ TMyButton }
procedure TButton.SetText(var Message:TWMSETTEXT);
begin
if Tag<>22 then inherited else Message.Result := 1;
end;
【讨论】: