Delphi XE2中的RichEdit控件在某些样式下不会显示字体颜色

时间:2012-02-16 00:24:56

标签: delphi delphi-xe2 vcl-styles

我刚才注意到在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控件上的字体颜色的任何想法?

2 个答案:

答案 0 :(得分:9)

这似乎是一个VCL样式错误,但你可以使用Style钩子轻松解决这个问题。

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);

enter image description here enter image description here enter image description here

答案 1 :(得分:1)

过去 TStyleManager.Engine.RegisterStyleHook(TRichEdit,TRichEditStyleHookFix); 在* .dpr文件中

eq:

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.