我在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消息的新手,请解释为什么会发生这种情况。
答案 0 :(得分:0)
您正在设置的Font
属性将为整个RichEdit整体设置字体,而不是当前的文本选择。如果要设置按选择字体,则需要使用通过{{1传递的} szFaceName
记录的yHeight
,bCharset
和CHARFORMAT
字段}}。无法按选择分配EM_SETCHARFORMAT
对象,甚至TFont
句柄。