Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   FMX: Hintergrundfarbe eines TMemo ändern (https://www.delphipraxis.net/204975-fmx-hintergrundfarbe-eines-tmemo-aendern.html)

Stewag 20. Jul 2020 09:08

FMX: Hintergrundfarbe eines TMemo ändern
 
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.

philipp.hofmann 20. Jul 2020 11:36

AW: FMX: Hintergrundfarbe eines TMemo ändern
 
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;

Stewag 21. Jul 2020 09:39

AW: FMX: Hintergrundfarbe eines TMemo ändern
 
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.

philipp.hofmann 21. Jul 2020 10:40

AW: FMX: Hintergrundfarbe eines TMemo ändern
 
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;

Stewag 22. Jul 2020 20:38

AW: FMX: Hintergrundfarbe eines TMemo ändern
 
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?

philipp.hofmann 23. Jul 2020 07:17

AW: FMX: Hintergrundfarbe eines TMemo ändern
 
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.

Rollo62 23. Jul 2020 07:42

AW: FMX: Hintergrundfarbe eines TMemo ändern
 
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.

Stewag 24. Jul 2020 20:49

AW: FMX: Hintergrundfarbe eines TMemo ändern
 
... 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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 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