标签: taction

我怎样才能看到谁在Delphi中触发了一个动作?

当一个动作甚至触发时,"发送者"总是动作本身.通常这是最有用的,但是在某种程度上可以找出谁触发了行动的onexecute事件?

假设您有一个包含以下内容的表单:

  • 2个按钮,叫做Button1Button2
  • 1 TATION叫 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 taction

14
推荐指数
2
解决办法
1万
查看次数

TAction.OnUpdate事件是否会降低性能?

在Delphi XE7中,我使用此技巧根据是否选择了ListView中的项目来自动启用或禁用工具栏按钮("编辑ListView项目"),以防止用户在没有ListView时单击按钮选择的项目:

  • 将TActionList放在VCL表单上.
  • 在ActionList中创建一个动作actTest.
  • 将TButton放在表单上.
  • 将操作分配actTest给按钮.
  • 在表单上放置一个TListView.
  • 在ListView中创建两个项目.
  • 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;就被执行了.

所以我的问题是:这会降低性能吗?如果是,是否有另一种技巧可以实现上述目的?

delphi taction tlistview delphi-xe7

10
推荐指数
3
解决办法
1370
查看次数

创建没有相应菜单项的Delphi应用程序快捷方式

我想在我的应用程序中有一个快捷键组合(如Ctrl + Alt + D)来调用一个函数,但我不希望快捷方式出现在任何菜单上.您的应用程序中是否可以使用其他不可见的快捷方式?

delphi menu shortcut taction tmenuitem

7
推荐指数
2
解决办法
3978
查看次数

如何在组件中添加对操作的支持

如何向组件添加操作支持需要做什么.它是一个按钮组件,但我猜它对于任何组件类型都是相同的.任何信息或如何帮助.

delphi components vcl taction

6
推荐指数
2
解决办法
2439
查看次数

Delphi XE - TRIBbon动作总是将焦点发送给MainForm

当我将TRibbon控件放在不是应用程序MainForm的表单上时,TRibbon的操作(即剪切,粘贴)将始终在执行操作后将焦点返回到MainForm.

即使持有TRibbon的TForm不是MainForm的子代,也会发生这种情况.

我使用的是Windows 7 64位,Embarcadero RAD Studio XE版本15.0.3953.35171.

我是否错误地使用了TRibbon控件,或者这是TRibbon的一个问题?

delphi ribbon focus taction delphi-xe

6
推荐指数
1
解决办法
1089
查看次数

使用TAction作为"仅图标"TButton

我有一个用于菜单项和TButton的TAction.我希望菜单项显示标签,TButton 显示图标.但是,当分配一个Action时,Vcl会自动设置TButton的Caption属性,我无法摆脱它.

有任何想法吗?

delphi c++builder taction

5
推荐指数
1
解决办法
468
查看次数

Delphi:从动作列表中禁用1动作

这很有趣:)但如何做一些像ActionList1.MyAction.Enable:=false

动作列表具有按钮操作,如果按钮不可见,我需要禁用它的动作(如果不执行此操作并按下快捷方式,则执行该过程).

可能是我做错了什么,但我没有给按钮分配动作.我只有一个带动作的动作列表.每个动作都有一个快捷方式 按下此快捷方式后,将执行操作并执行操作.如果单击按钮 - >也将执行相同的过程.

State:=asSuspended 是一个完整的动作列表.

谢谢!!!

delphi taction tactionlist

4
推荐指数
1
解决办法
3742
查看次数

如何根据TAction触发它来更改事件处理程序的行为?

我有一些菜单项,其中的操作是这样的:

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)可能会更改.如何传递必需的参数,以便我不必重新编码例程?

delphi parameters event-handling taction

4
推荐指数
1
解决办法
420
查看次数

使用Vcl样式时更改TActionMainMenuBar的字体

通常可以像这样改变TActionMainMenuBar或TMainMenu的字体:

Screen.MenuFont.Name := 'Calibri';
Run Code Online (Sandbox Code Playgroud)

使用Vcl样式时,如果为组件注册了StyleHook,则无法再使用它.我进入了位图样式设计器(以前称为Vcl样式设计器)并更改了MenuItemTextNormal的字体.

问题是更改Font没有任何作用,我只能成功更改文本的颜色.

显然我在这里遗漏了一些东西,为什么我可以更改颜色而不是字体?

delphi fonts taction vcl-styles delphi-xe3

4
推荐指数
1
解决办法
1590
查看次数

为什么:可见,控制分配的TA影响应用程序的CPU使用率?

如果a TAction链接到一个Object,例如TToolButton(Item of TToolBar)或TActionClientItem(Item of TActionToolBar),并且Object在运行时是可见的,那么每当你在表单中移动鼠标时(除工具栏之外的任何地方),似乎都会有额外的负载在CPU上基于可见TA的数量,与在前面提到的任一条上都没有看到TAction链接的项目时移动鼠标相比.

显而易见的是,额外负载的显着百分比完全取决于您正在运行的装备类型,但我注意到,当您拥有一个应用程序时,实际差异可能很大:

  • 很多可见的TAction链接项
  • 自定义组件,已对onMouseOver事件执行次要计算,例如更改控件的外观
  • 自定义视觉样式

所以问题是为什么可见项目链接的TAction组件会影响鼠标移动的处理?

windows delphi taction cpu-usage

4
推荐指数
1
解决办法
339
查看次数