Einzelnen Beitrag anzeigen

Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.

  Alt 29. Dez 2016, 12:13
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
  Mit Zitat antworten Zitat