当一个动作甚至触发时,"发送者"总是动作本身.通常这是最有用的,但是在某种程度上可以找出谁触发了行动的onexecute事件?
例
假设您有一个包含以下内容的表单:
Button1
和Button2
actDoStuff
两个按钮分配相同的操作.是否可以显示我点击了哪个按钮?
Example.dfm
object Form1: TForm1
object Button1: TButton
Action = actDoStuff
end
object Button2: TButton
Action = actDoStuff
Left = 100
end
object actDoStuff: TAction
Caption = 'Do Stuff'
OnExecute = actDoStuffExecute
end
end
Run Code Online (Sandbox Code Playgroud)
Example.pas
unit Example;
interface
uses Windows, Classes, Forms, Dialogs, Controls, ActnList, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
actDoStuff: TAction;
procedure actDoStuffExecute(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.actDoStuffExecute(Sender: TObject);
begin …
Run Code Online (Sandbox Code Playgroud) 在Delphi XE7中,我使用此技巧根据是否选择了ListView中的项目来自动启用或禁用工具栏按钮("编辑ListView项目"),以防止用户在没有ListView时单击按钮选择的项目:
actTest
. actTest
给按钮. 在OnUpdate
该事件actTest
的行动写:
procedure TForm1.actTestUpdate(Sender: TObject);
begin
actTest.Enabled := ListView1.SelCount > 0;
CodeSite.Send('actTestUpdate'); // gets fired very often!
end;
Run Code Online (Sandbox Code Playgroud)现在,您可以看到根据是否选择了ListView中的项目来启用或禁用该按钮,与您是使用鼠标还是使用键盘或以编程方式选择/取消选择项目无关.
但是,在CodeSite Live Viewer中,我可以看到actTestUpdate
事件是连续且非常频繁地触发的,因此该语句很快actTest.Enabled := ListView1.SelCount > 0;
就被执行了.
所以我的问题是:这会降低性能吗?如果是,是否有另一种技巧可以实现上述目的?
我想在我的应用程序中有一个快捷键组合(如Ctrl + Alt + D)来调用一个函数,但我不希望快捷方式出现在任何菜单上.您的应用程序中是否可以使用其他不可见的快捷方式?
如何向组件添加操作支持需要做什么.它是一个按钮组件,但我猜它对于任何组件类型都是相同的.任何信息或如何帮助.
当我将TRibbon控件放在不是应用程序MainForm的表单上时,TRibbon的操作(即剪切,粘贴)将始终在执行操作后将焦点返回到MainForm.
即使持有TRibbon的TForm不是MainForm的子代,也会发生这种情况.
我使用的是Windows 7 64位,Embarcadero RAD Studio XE版本15.0.3953.35171.
我是否错误地使用了TRibbon控件,或者这是TRibbon的一个问题?
我有一个用于菜单项和TButton的TAction.我希望菜单项显示标签,TButton 只显示图标.但是,当分配一个Action时,Vcl会自动设置TButton的Caption属性,我无法摆脱它.
有任何想法吗?
这很有趣:)但如何做一些像ActionList1.MyAction.Enable:=false
?
动作列表具有按钮操作,如果按钮不可见,我需要禁用它的动作(如果不执行此操作并按下快捷方式,则执行该过程).
可能是我做错了什么,但我没有给按钮分配动作.我只有一个带动作的动作列表.每个动作都有一个快捷方式 按下此快捷方式后,将执行操作并执行操作.如果单击按钮 - >也将执行相同的过程.
State:=asSuspended
是一个完整的动作列表.
谢谢!!!
我有一些菜单项,其中的操作是这样的:
procedure TMISMainFrm.ActiSalesInvoiceExecute(Sender: TObject);
begin
if CheckMdiList('Sales Invoice') then
BEGIN
SalesInvFrm := tSalesInvFrm.Create(Self,0,UserIdNo,1,1);
SalesInvFrm.Show;
END;
end;
Run Code Online (Sandbox Code Playgroud)
可以从多个位置调用上述操作,但第二个参数(0)可能会更改.如何传递必需的参数,以便我不必重新编码例程?
通常可以像这样改变TActionMainMenuBar或TMainMenu的字体:
Screen.MenuFont.Name := 'Calibri';
Run Code Online (Sandbox Code Playgroud)
使用Vcl样式时,如果为组件注册了StyleHook,则无法再使用它.我进入了位图样式设计器(以前称为Vcl样式设计器)并更改了MenuItemTextNormal的字体.
问题是更改Font没有任何作用,我只能成功更改文本的颜色.
显然我在这里遗漏了一些东西,为什么我可以更改颜色而不是字体?
如果a TAction
链接到一个Object,例如TToolButton
(Item of TToolBar
)或TActionClientItem
(Item of TActionToolBar
),并且Object在运行时是可见的,那么每当你在表单中移动鼠标时(除工具栏之外的任何地方),似乎都会有额外的负载在CPU上基于可见TA的数量,与在前面提到的任一条上都没有看到TAction链接的项目时移动鼠标相比.
显而易见的是,额外负载的显着百分比完全取决于您正在运行的装备类型,但我注意到,当您拥有一个应用程序时,实际差异可能很大:
所以问题是为什么可见项目链接的TAction组件会影响鼠标移动的处理?
delphi ×10
taction ×10
c++builder ×1
components ×1
cpu-usage ×1
delphi-xe ×1
delphi-xe3 ×1
delphi-xe7 ×1
focus ×1
fonts ×1
menu ×1
parameters ×1
ribbon ×1
shortcut ×1
tactionlist ×1
tlistview ×1
tmenuitem ×1
vcl ×1
vcl-styles ×1
windows ×1