AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.
Thema durchsuchen
Ansicht
Themen-Optionen

Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.

Ein Thema von Kostas · begonnen am 29. Dez 2016 · letzter Beitrag vom 29. Dez 2016
Antwort Antwort
Kostas

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

Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.

  Alt 29. Dez 2016, 11: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
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.

  Alt 29. Dez 2016, 12:40
Wenn ich das richtig sehe wird ein TMemo (zumindest unter 10 Seattle) aus Bitmaps zusammengeflickt.

Ich persönlich würde einfach ein halbdurchsichtiges TRectangle nehmen, in das Memo packen und HitTest = False setzen
Miniaturansicht angehängter Grafiken
test.png  
  Mit Zitat antworten Zitat
pesi

Registriert seit: 29. Aug 2003
Ort: 36217 Ronshausen
117 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.

  Alt 29. Dez 2016, 15:31
Hmmm.... also in XE5 gibt's TMemo.Color !??!
Gibt's das im 10er etwa nicht mehr??
Miniaturansicht angehängter Grafiken
rot.png  
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.

  Alt 29. Dez 2016, 15:42
Wir sind in der Abteilung "Cross-Platform-Entwicklung", also keine VCL sondern FMX
  Mit Zitat antworten Zitat
pesi

Registriert seit: 29. Aug 2003
Ort: 36217 Ronshausen
117 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.

  Alt 29. Dez 2016, 16:05
Huch... Sorry, hattte ich übersehen
  Mit Zitat antworten Zitat
Kostas

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

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.

  Alt 29. Dez 2016, 16:08
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Hintergrundfarbe von TMemo zur Laufzeit setzen, geschafft.

  Alt 29. Dez 2016, 16:39
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 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