Richedit Control in Delphi XE2 zeigt unter bestimmten Stilen keine Schriftfarben an
-
25-10-2019 - |
Frage
Mir ist gerade aufgefallen, dass in einigen der neuen VCL -Stile in Delphi XE2 versucht, die Farbe des Textes in einer Richedit -Kontrolle zu ändern, funktioniert nicht. Zum Beispiel zeigt Smokey Quarts Kamri und Carbon nur Text in Schwarz, während in Cobalt Xemedia die Schriftfarbe geändert werden kann. Dies ist der Code, den ich verwendet habe, um die Schriftfarbe zu ändern (mutig scheint in allen Stilen zu funktionieren)
memo.selStart:= length (text);
memo.selLength:= 0;
memo.SelAttributes.Color:= clRed;
memo.SelAttributes.Style:= [fsBold];
memo.selText := text;
Irgendwelche Ideen, wie man die Schriftfarbe auf einer Richedit -Steuerung verändert, während sie Delphi XE2 -Stile verwenden?
Lösung
Es scheint ein VCL -Styles -Fehler zu sein, aber Sie können dies einfach mit einem Style -Haken beheben.
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;
Und so verwenden
TStyleManager.Engine.RegisterStyleHook(TRichEdit, TRichEditStyleHookFix);
Andere Tipps
Past TStylemanager.Engine.registerStylehook (Trichedit, Tricheditstylehookfix); in Ihrer *.dpr -Datei
Gl.:
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.