【问题标题】:RichEdit control in Delphi XE2 won't show font colors under certain stylesDelphi XE2中的RichEdit控件在某些样式下不会显示字体颜色
【发布时间】:2012-03-07 09:47:20
【问题描述】:
我刚刚注意到,在 Delphi XE2 中的一些新 VCL 样式中,尝试更改 RichEdit 控件中文本的颜色是行不通的。例如,Smokey Quarts Kamri 和 Carbon 只会以黑色显示文本,而在 Cobalt XEMedia 中,字体颜色可以更改。这是我用来更改字体颜色的代码(粗体似乎适用于所有样式)
memo.selStart:= length (text);
memo.selLength:= 0;
memo.SelAttributes.Color:= clRed;
memo.SelAttributes.Style:= [fsBold];
memo.selText := text;
关于如何在使用 Delphi XE2 样式时更改 RichEdit 控件上的字体颜色的任何想法?
【问题讨论】:
标签:
delphi
delphi-xe2
vcl-styles
【解决方案1】:
过去
TStyleManager.Engine.RegisterStyleHook(TRichEdit, TRichEditStyleHookFix);
在您的 *.dpr 文件中
当量:
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
TStyleManager.TrySetStyle('Carbon');
TStyleManager.Engine.RegisterStyleHook(TRichEdit, TRichEditStyleHookFix);
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
【解决方案2】:
这似乎是一个 VCL 样式错误,但您可以使用样式挂钩轻松解决此问题。
uses
Vcl.Forms,
Vcl.Themes,
Winapi.RichEdit;
type
TRichEditStyleHookFix = class(TScrollingStyleHook)
strict private
procedure EMSetBkgndColor(var Message: TMessage); message EM_SETBKGNDCOLOR;
end;
{ TRichEditStyleHookFix }
procedure TRichEditStyleHookFix.EMSetBkgndColor(var Message: TMessage);
begin
Message.LParam := ColorToRGB(StyleServices.GetStyleColor(scEdit));
Handled := False;
end;
并像这样使用
TStyleManager.Engine.RegisterStyleHook(TRichEdit, TRichEditStyleHookFix);