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

时间:2019-05-16 10:51:41

标签: delphi fonts windows-messages

我在Delphi表单上有一个TRichEdit控件,并且我正在使用Perform方法将Windows消息发送给控件,从而为文本的某些部分分配背景色。 (在调用此代码之前,使用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;

我还希望用户可以更改字体(整个字体,它不像背景突出显示那样具有选择性),所以当用户想要为字体修改字体时,我向其呈现TFontDialog编辑框,然后将字体分配给TRichEdit控件的字体。

RichEdit.Font.Assign(SelectedFont);

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

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

1 个答案:

答案 0 :(得分:0)

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