Is it possible to avoid a TRichEdit losing its focus when clicking a button (e.g. Bold)?

雨燕双飞 提交于 2019-12-11 07:32:42

问题


Using delphi and rich edit, I need to replicate something along the lines of this very editor I'm writing in, when you select a text and press on the Bold button, the text remains selected instead of unselecting and losing focus.

How can I achieve this?

Thank you.


回答1:


OK, now I think I see the issue. You have a TRichEdit and a TButton. Then you do something like

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

and you are annoyed by the fact that the Rich Edit control loses its focus when you click Button1. Normally you use a TToolButton in a TToolbar as the 'bold' button. This will not make the editor lose its focus, because a TToolButton is not a windowed control.

If you do not wish to use a TToolBar (or any equivalent control), simply use a TSpeedButton instead of a TButton.

The normal way of doing this, however, is to use a TActionList. Drop such a control on your form, and then add a new action, call it ActnBold or something. Set the caption to 'Bold', the hint to 'Make the selection bold.', add the shortcut Ctrl+B, and write

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

in its OnExecute event. Then you can associate this action to any button, speed button, toolbar button, menu item, ..., simply by setting the control's Action property to ActnBold.

If you really, really want to use a windowed control, such as a TButton, then you can do

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

but it isn't beautiful (IMHO).



来源:https://stackoverflow.com/questions/5707638/is-it-possible-to-avoid-a-trichedit-losing-its-focus-when-clicking-a-button-e-g

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!