【问题标题】: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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-11
        • 2015-05-08
        • 2011-08-21
        • 2011-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-01
        相关资源
        最近更新 更多