经过一些简单的步骤,键盘快捷键不再触发操作

时间:2019-01-19 17:59:45

标签: delphi action shortcut

我有一个带有Richedit和编辑的表格。 我使用键盘快捷键Ctrl B定义了可以触发该操作的操作。

我只希望在richedit中触发操作,而在编辑中我希望默认处理。因此,我决定分别在richedit onEnter和onExit处理程序中分配和取消分配动作处理程序。

当我第一次在Richedit中按Ctrl B时,动作触发,很好。 然后我切换到编辑并按Ctrl B,我会听到一声提示音。 当我切换回Richedit并按Ctrl B时,该命令不再触发,哎呀。

我已经调试了VCL代码,但无法理解这是一个错误还是做错了什么(Delphi 2007和Delphi 10.2)。

unit Unit5;

interface uses ActnList,Classes,ComCtrls,Controls,Forms,StdCtrls,Windows;

type TForm5 = class(TForm)

    RichEdit1   : TRichEdit;
    Edit1       : TEdit;

    ActionList1 : TActionList;
    Action1     : TAction;

    procedure Action1Execute(Sender: TObject);

    procedure RichEdit1Enter(Sender: TObject);
    procedure RichEdit1Exit(Sender: TObject);

 end;

var Form5: TForm5;

implementation

{$R *.dfm}

procedure TForm5.Action1Execute(Sender: TObject);
begin
  richedit1.selText := '{Ctrl B}';
end;

procedure TForm5.RichEdit1Enter(Sender: TObject);
begin
  action1.OnExecute := Action1Execute;
end;

procedure TForm5.RichEdit1Exit(Sender: TObject);
begin
  action1.OnExecute := NIL;
end;

end.

我知道,因为我希望仅在Richedit中执行操作,所以一个简单的解决方法是使用Richedit的OnKeyDown处理程序代替操作。

但是我想了解为什么当前代码失败。 Delphi错误,还是误用了动作“模型”?

0 个答案:

没有答案