是否可以避免TRichEdit在单击按钮时失去焦点(例如Bold)?

Ros*_*erg 1 delphi controls focus trichedit

使用delphi和rich edit,我需要按照我正在编写的这个编辑器的行来复制一些东西,当你选择一个文本并按下Bold按钮时,文本仍然被选中而不是取消选择并失去焦点.

我怎样才能做到这一点?

谢谢.

And*_*and 7

好的,现在我想我看到了这个问题.你有一个TRichEdit和一个TButton.那你做点什么

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

而且你很恼火Rich Edit控件在你点击时会失去焦点Button1.通常情况下,你使用TToolButtonTToolbar为"大胆"按钮.这不会使编辑器失去焦点,因为a TToolButton不是窗口控件.

如果您不想使用TToolBar(或任何等效控件),只需使用a TSpeedButton而不是a TButton.

然而,正常的做法是使用a TActionList.在表单上删除此类控件,然后添加新操作,调用它ActnBold或其他内容.将标题设置为'Bold',提示'Make the selection bold.',添加快捷方式Ctrl+B和写入

with RichEdit1.SelAttributes do
  Style := Style + [fsBold];
Run Code Online (Sandbox Code Playgroud)

在它的OnExecute事件中.然后,您可以将此操作关联到任何按钮,速度按钮,工具栏按钮,菜单项,...,只需将控件的Action属性设置为ActnBold.

如果你真的,真的想要使用窗口控件,比如a TButton,那你可以做到

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

但它并不美丽(恕我直言).