Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft. (https://www.delphipraxis.net/191283-hintergrundfarbe-von-tmemo-zur-laufzeit-setzen-geschafft.html)

Kostas 29. Dez 2016 11:13

Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.
 
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

Der schöne Günther 29. Dez 2016 12:40

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn ich das richtig sehe wird ein TMemo (zumindest unter 10 Seattle) aus Bitmaps zusammengeflickt.

Ich persönlich würde einfach ein halbdurchsichtiges
Delphi-Quellcode:
TRectangle
nehmen, in das Memo packen und
Delphi-Quellcode:
HitTest = False
setzen

pesi 29. Dez 2016 15:31

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmmm.... also in XE5 gibt's TMemo.Color !??! :?:
Gibt's das im 10er etwa nicht mehr??

Der schöne Günther 29. Dez 2016 15:42

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.
 
Wir sind in der Abteilung "Cross-Platform-Entwicklung", also keine VCL sondern FMX ;-)

pesi 29. Dez 2016 16:05

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.
 
Huch... Sorry, hattte ich übersehen :roll:

Kostas 29. Dez 2016 16:08

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.
 
Hallo Zusammen,

es gibt natürlich auch die Möglichkeit ein StyleBook auf die Form zu platzieren und zwei separate Styles zu definieren und dann per code die Styles zu wechseln. Es mir leider nicht gelungen über den custom Styldesigner vom TMemo die Hintergrundfarbe zu ändern. Der Designer zeigt eine Menge Objekte an die zu dem TMemo gehören. Die kann man auch verschieben, das dann passiert habe ich nicht ausprobiert. Wahrscheinlich ist das gesamte Control danach beim Teufel. Es gibt rechts oben zwei Quadrate mit der Farbe Schwarz und Weiß. Do wie die Farbe gesetzt werden kann, habe ich nicht gefunden, auch nicht im Objektinspektor. Irgend wie steige ich da nicht durch.

Der Vorschlag vom Günther ist auch gut.

Irgend wie ist das alles nicht zufriedenstellend. Jetzt gibt es FMX doch schon ziemlich lange. Eigentlich sollte es doch schön langsam anwendungsfreundlicher sein finde ich.

Gruß Kostas

Der schöne Günther 29. Dez 2016 16:39

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.
 
Zitat:

Zitat von Kostas (Beitrag 1357460)
Es gibt rechts oben zwei Quadrate mit der Farbe Schwarz und Weiß. Do wie die Farbe gesetzt werden kann, habe ich nicht gefunden, auch nicht im Objektinspektor.

Wie ich geschrieben habe - So wie ich das sehe sind das auch keine Shapes wie Rechtecke und Linien, sondern es sind reine Bitmaps. Ich habe den Namen vergessen, aber bei irgendeinem der Einträge im Objekt-Inspektor (wenn man in diesem StyleBook drin ist) poppt ein Bitmap-Editor auf und zeigt dir welche Bereiche er sich aus der Bitmap holt um das Memo-Feld zu rendern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz