Сочетание клавиш больше не вызывает действия после нескольких простых шагов - PullRequest
0 голосов
/ 19 января 2019

У меня есть форма с рихедитом и правкой. Я определяю действие с помощью сочетания клавиш Ctrl B, которое должно вызывать его.

Я хочу, чтобы только действие было запущено в richedit, при редактировании я хочу обработку по умолчанию. Поэтому я решил назначить и отменить назначение обработчика действий соответственно в обработчиках richedit onEnter и onExit.

Когда я впервые нажимаю 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, простой обходной путь состоит в использовании вместо действия обработчика OnKeyDown Richedit.

Но я хотел бы понять, почему текущий код не работает. Ошибка Delphi или злоупотребление действием "модель"?

...