2012-02-16 47 views
2

Delphi XE2の新しいVCLスタイルの中で、RichEditコントロールのテキストの色を変更しようとすると機能しません。たとえばSmokey Quarts KamriとCarbonは黒でテキストを表示し、Cobalt XEMediaではフォントの色を変更することができます。これは、(太字はすべてのスタイルで動作しているようです)私は、フォントの色を変更するために使用されるコードであるDelphi XE2のRichEditコントロールで特定のスタイルのフォントカラーが表示されない

memo.selStart:= length (text); 
memo.selLength:= 0; 
memo.SelAttributes.Color:= clRed; 
memo.SelAttributes.Style:= [fsBold]; 
memo.selText := text; 

のDelphi XE2のスタイルを使用しながら、リッチエディットコントロールにフォントの色を変更する方法上の任意のアイデアは?

答えて

9

これは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); 
ように使用

enter image description here enter image description hereenter image description here

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. 
関連する問題