我有一个带有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错误,还是误用了动作“模型”?