Автоматически позволяя Ctrl + A выделять все в TMemo? - PullRequest
11 голосов
/ 11 декабря 2011

В элементе управления Delphi 7 TMemo попытка сделать комбинацию клавиш Ctrl + A, чтобы выбрать все, ничего не делает (не выбирать все). Итак, я сделал эту процедуру:

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  C: String;
begin
  if ssCtrl in Shift then begin
    C:= LowerCase(Char(Key));
    if C = 'a' then begin
      Memo1.SelectAll;
    end;
  end;
end;

Есть ли хитрость, чтобы мне не пришлось делать эту процедуру? А если нет, то выглядит ли эта процедура в порядке?

Ответы [ 2 ]

25 голосов
/ 11 декабря 2011

Это более элегантно:

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = ^A then
  begin
    (Sender as TMemo).SelectAll;
    Key := #0;
  end;
end;
0 голосов
/ 13 октября 2016

Я использовал предыдущий ответ и обсуждение для создания отдельного компонента, который обрабатывает событие KeyPress, которое я использую в небольших тестовых программах.

TSelectMemo = class(TMemo)
protected
  procedure KeyPress(var Key: Char); override;
end;

...

procedure TSelectMemo.KeyPress(var Key: Char);
begin
  inherited;
  if Key = ^A then
    SelectAll;
end;

Еще один способ добавить поведение «выбрать все» ко всем компонентам формы - добавить в форму список действий со стандартным действием «выбрать все».

...