2

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 コントロールのフォントの色を変更する方法についてのアイデアはありますか?

4

2 に答える 2

9

VCL Styles のバグのようですが、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);

ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

于 2012-02-16T01:00:50.660 に答える
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.
于 2012-02-21T09:20:48.917 に答える