2012-02-16 2 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; 

델파이 XE2 스타일을 사용하는 동안 RichEdit 컨트롤의 글꼴 색상을 변경하는 방법에 어떤 아이디어가?

답변

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 here enter image description here

1

과거 TStyleManager.Engine.RegisterStyleHook (TRichEdit는, TRichEditStyleHookFix);

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. 
:

EQ 당신의 *의 .DPR 파일

관련 문제