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?

War es hilfreich?

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);

enter image description here enter image description here enter image description here

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.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top