Можно ли избежать потери TRichEdit при нажатии кнопки (например, жирным шрифтом)? - PullRequest
1 голос
/ 18 апреля 2011

Используя delphi и rich edit, мне нужно повторить что-то по образцу этого самого редактора, в котором я пишу, когда вы выделяете текст и нажимаете кнопку «Жирный шрифт», текст остается выделенным вместо отмены выбора и потери фокуса.

Как мне этого добиться?

Спасибо.

1 Ответ

7 голосов
/ 18 апреля 2011

ОК, теперь я думаю, что вижу проблему. У вас есть TRichEdit и TButton. Тогда вы делаете что-то вроде

procedure TForm1.Button1Click(Sender: TObject);
begin
  with RichEdit1.SelAttributes do
    Style := Style + [fsBold];
end;

и вас раздражает тот факт, что элемент управления Rich Edit теряет фокус, когда вы нажимаете Button1. Обычно вы используете TToolButton в TToolbar в качестве кнопки «полужирный». Это не заставит редактор потерять фокус, потому что TToolButton не является оконным элементом управления.

Если вы не хотите использовать TToolBar (или любой другой эквивалентный элемент управления), просто используйте TSpeedButton вместо TButton.

Обычный способ сделать это, однако, это использовать TActionList. Удалите такой элемент управления в своей форме, а затем добавьте новое действие, назовите его ActnBold или как-то еще. Установите заголовок 'Bold', подсказку 'Make the selection bold.', добавьте ярлык Ctrl+B и напишите

with RichEdit1.SelAttributes do
  Style := Style + [fsBold];

в его OnExecute событии. Затем вы можете связать это действие с любой кнопкой, кнопкой скорости, кнопкой панели инструментов, элементом меню, ..., просто установив свойство Action элемента управления в ActnBold.

Если вы действительно хотите использовать оконный элемент управления, например TButton, тогда вы можете сделать

procedure TForm1.Button1Click(Sender: TObject);
begin
  with RichEdit1.SelAttributes do
    Style := Style + [fsBold];
  RichEdit1.SetFocus;
end;

но это не красиво (ИМХО).

...