AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FMX: Hintergrundfarbe eines TMemo ändern

Ein Thema von Stewag · begonnen am 20. Jul 2020 · letzter Beitrag vom 24. Jul 2020
Antwort Antwort
Stewag

Registriert seit: 12. Jun 2008
161 Beiträge
 
Delphi 12 Athens
 
#1

FMX: Hintergrundfarbe eines TMemo ändern

  Alt 20. Jul 2020, 09:08
Für eine FMX App habe ich styles für Android (GoogleGlass.fsf) und iOS (iOSBlack.fsf).

In Android erscheint damit ein TMemo mit weißer Schrift auf schwarzem Grund, in iOS mit schwarzer Schrift auf weißem Grund.

Ich möchte den style für iOS so ändern, dass TMemo wie in Android dargestellt werden, find aber keine Color option.
Dass es aber irgendwie trotzdem möglich sein muss, zeigt doch der Android style, oder?

Ich habe bereits im stylebook manager das property "memostyle" aus dem Android style kopiert und einfach in den iOS style kopiert.
In der IDE erscheint danach tatsächlich das Memo invertiert, nach der Kompilierung für iOS ist aber alles unverändert.
Das wundert ja auch nicht, da das ursprüngliche memostyle immer noch vorhanden ist (löschen geht nicht) und durch das Kopieren ja nur ein zweites memostyle hinzu gekommen ist.
Steffen

Geändert von Stewag (20. Jul 2020 um 09:19 Uhr)
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
859 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: FMX: Hintergrundfarbe eines TMemo ändern

  Alt 20. Jul 2020, 11:36
Vielleicht wirst du ja hier fündig, da ging es um die Hintergrund-Farbe eine TPanel.
https://www.delphipraxis.net/204751-...on-tpanel.html

Ich setze die Hintergrund-Farbe mit dem Aufruf der folgenden Methode (wichtig ist bei iOS aber, der Zeitpunkt, wann man dies tut, FormActivate muss bis zu Ende durchgelaufen sein, du wirst den Code für dich aber natürlich anpassen müssen):
Delphi-Quellcode:
procedure TicTrainerF.memoApplyStyleLookup(Sender: TObject);
var Obj:TFmxObject;
    Rectangle1:TRectangle;
    i:integer;
    color:TAlphaColor;
begin

  if (sender=mCurrentLeg) then
  begin
    Obj:=mCurrentLeg.FindStyleResource('background');
    color:=mCurrentLegColor;
  end else if (sender=mExercise) then
  begin
    Obj:=mExercise.FindStyleResource('background');
    color:=mExerciseColor;
  end else begin
    obj:=nil;
    color:=TAlphaColors.White;
  end;

  if (Obj<>nil) then
  begin
     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:=color;
         exit;
       end;
     end;
     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:=color;
     Rectangle1.Stroke.Color:=claNull;
     Rectangle1.HitTest:=False;
     Rectangle1.SendToBack;
  end;
end;
  Mit Zitat antworten Zitat
Stewag

Registriert seit: 12. Jun 2008
161 Beiträge
 
Delphi 12 Athens
 
#3

AW: FMX: Hintergrundfarbe eines TMemo ändern

  Alt 21. Jul 2020, 09:39
Danke Philipp, hat wunderbar funktioniert!

Habe etwas gebraucht um herauszufinden, dass es nicht reicht die Memo-Textfarbe per Code zur Laufzeit anzupassen, wenn das Textcolor-property nicht einmal im Objektmanager geändert wurde.
Steffen
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
859 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: FMX: Hintergrundfarbe eines TMemo ändern

  Alt 21. Jul 2020, 10:40
Bei Text-Font/Size/Style/Color-Änderungen musste du immer (!) die StyledSettings anpassen, also dementsprechend die deiner Änderung widersprechende Family/Size/Style/FontColor rausnehmen.
Wenn du es zurückdrehst unbedingt daran denken, es wieder reinzusetzen, dies ist teilweise für die Anzeige im Dark-Mode wichtig (denn dann wird Schwarz automatisch zu Weiß, wenn das FontColor-StyledSetting gesetzt ist). Genau dies hast du mit der einmaligen Anpassung im Objekt-Manager gemacht.

Delphi-Quellcode:
    btWizardDownloadWithAudio.StyledSettings:=btWizardDownloadWithAudio.StyledSettings+[TStyledSetting.FontColor];
    btWizardDownloadWithAudio.TextSettings.FontColor:=TAlphaColors.Black;

    btWizardDownloadWithAudioAndVideo.StyledSettings:=btWizardDownloadWithAudioAndVideo.StyledSettings-[TStyledSetting.FontColor];
    btWizardDownloadWithAudioAndVideo.TextSettings.FontColor:=TAlphaColors.Red;
  Mit Zitat antworten Zitat
Stewag

Registriert seit: 12. Jun 2008
161 Beiträge
 
Delphi 12 Athens
 
#5

AW: FMX: Hintergrundfarbe eines TMemo ändern

  Alt 22. Jul 2020, 20:38
Hallo Philipp,

da du so gut im Thema bist noch eine Anschlussfrage: Ich würde die Ränder des Rectangles gerne ausblenden.
Leider funktioniert Rectangle1.Sides:= [] nicht.

Wieso?
Steffen
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
859 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: FMX: Hintergrundfarbe eines TMemo ändern

  Alt 23. Jul 2020, 07:17
Sorry, da bin ich überfragt. Im Objektinspektor sieht es richtig aus, wenn man dies anpasst. Wenn man es zur Laufzeit macht, hilft manchmal ein

Delphi-Quellcode:
rect.beginUpdate();
//malen
rect.endUpdate();
um die Veränderungen sichtbar zu machen.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#7

AW: FMX: Hintergrundfarbe eines TMemo ändern

  Alt 23. Jul 2020, 07:42
Was passiert wenn Du einfach Stroke.Kind auf None setzt ?
http://docwiki.embarcadero.com/Libra....TShape.Stroke
http://docwiki.embarcadero.com/Libra...cs.TBrush.Kind

So mach ich das.
Wenn Du aber die einzelnen Sides gesondert steuern musst, dann musst Du wohl mit den Sides arbeiten.
  Mit Zitat antworten Zitat
Stewag

Registriert seit: 12. Jun 2008
161 Beiträge
 
Delphi 12 Athens
 
#8

AW: FMX: Hintergrundfarbe eines TMemo ändern

  Alt 24. Jul 2020, 20:49
... Fall des weißen Randes gelöst:
Code:
Rectangle1.Sides:= []
blendet sehr wohl die Seiten aus aber durch
Code:
Rectangle1.Align:=TAlignLayout.Client;
wird ein weißer Rand um das Memo erzeugt. Warum, habe ich nicht herausbekommen. Daher habe ich die Größe des Rectangle stattdessen gesetzt mit:
Code:
Rectangle1.Height := Memo1.Height + 2;
Rectangle1.Width := Memo1.Width + 2;
Denn Zweck von
Code:
TControl(Obj).Margins:=TBounds.Create(TRectF.Create(-2,-2,-2,-2));
konnte ich nicht ergründen. Habe die Zeile ohne Folgen (?) weggelassen.
Steffen

Geändert von Stewag (24. Jul 2020 um 20:51 Uhr)
  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 16:03 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