Hallo Zusammen,
in vielen Beispielen im Internet wird gezeigt wie die Hintergrundfarbe eines TButton oder TEdit gesetzt wird. Beide sollen ein TRectangle haben welche eingefärbt werden kann. Doch das TMemo hat eben kein TRectangle das direkt eingefärbt werden kann. Im Internet habe ich ein Stück Code gefunden wie dieses verdammte TRectangle erzeugt werden kann.
Den Code habe ich erweitert um die die Farbe zur Laufzeit zu setzen in Abhängigkeit zu den Daten.
Welche ein Aufwand um nur die Hintergrundfarbe zu setzen.
Wenn jemand einen besseren Weg kennt, bitte gerne.
Delphi-Quellcode:
procedure TfrMain.NachrichtApplyStyleLookup(Sender: TObject);
var Obj: TFmxObject;
Rectangle1: TRectangle;
i:integer;
aColor:TAlphaColor;
begin
inherited;
//Grün wenn es eine neuen Nachricht ist, ansonsten weiß
if dm1.FDNachrichtigen.FieldByName('status').AsInteger = 0
then aColor := claGreen
else aColor := claWhite;
Obj := Nachricht.FindStyleResource('background');
if Obj <> nil then
begin
//suche das bgColorRect wenn es gefunden wurde, Farbe ändern
for i := 0 to Obj.ChildrenCount-1 do
begin
if ((Obj.Children[i].ClassType = TRectangle) and (Obj.Children[i].Name = 'bgColorRect'))then
begin
TRectangle(Obj.Children[i]).Fill.Color := aColor;
exit;
end;
end;
//Kein TRectangle vorhanden, neues anlegen
TControl(Obj).Margins := TBounds.Create(TRectF.Create(-2, -2, -2, -2));
Rectangle1 := TRectangle.Create(Obj);
Rectangle1.Name := 'bgColorRect';
Obj.AddObject(Rectangle1);
Rectangle1.Align := TAlignLayout.Client;
Rectangle1.Fill.Color := aColor;
Rectangle1.Stroke.Color := claNull;
Rectangle1.HitTest := False;
Rectangle1.SendToBack;
end;
end;
Gruß Kostas