繁体   English   中英

在为所选文本设置背景颜色后,将字体分配给TRichEdit

[英]Assigning a font to a TRichEdit after setting background colour for selected text

我的Delphi表单上有一个TRichEdit控件,我使用perform方法为控件发送一个窗口消息,为文本的某些部分指定背景颜色。 (在调用此代码之前,使用SelStart和SelLength选择文本)。

FillChar(Format, SizeOf(Format), 0);
with Format do
begin
  cbSize := SizeOf(Format);
  dwMask := CFM_BACKCOLOR;
  crBackColor := AColor;
  fRichEdit.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(@Format));
end;

我也希望用户可以更改字体(整个字体,它不像背景突出显示那样),所以当他们想要修改编辑框的字体时,我向用户展示TFon​​tDialog ,我将字体分配给TRichEdit控件的字体。

RichEdit.Font.Assign(SelectedFont);

但是,使用Windows消息似乎会阻止字体更新。 当我注释掉perform方法时,一切正常,但是当我取消注释该行时,字体不会更新。

我是Windows消息的新手,请解释为什么会发生这种情况。

您正在设置的Font属性将整个RichEdit的字体设置为整体,而不是当前文本选择。 如果要设置每个选择字体,则需要使用通过EM_SETCHARFORMAT传递的CHARFORMAT记录的szFaceNameyHeightbCharset字段。 无法在每个选择的基础上分配TFont对象,甚至是HFONT句柄。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM