![]() |
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. |
AW: FMX: Hintergrundfarbe eines TMemo ändern
Vielleicht wirst du ja hier fündig, da ging es um die Hintergrund-Farbe eine TPanel.
![]() 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; |
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. |
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; |
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? |
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:
um die Veränderungen sichtbar zu machen.
rect.beginUpdate();
//malen rect.endUpdate(); |
AW: FMX: Hintergrundfarbe eines TMemo ändern
Was passiert wenn Du einfach Stroke.Kind auf None setzt ?
![]() ![]() So mach ich das. Wenn Du aber die einzelnen Sides gesondert steuern musst, dann musst Du wohl mit den Sides arbeiten. |
AW: FMX: Hintergrundfarbe eines TMemo ändern
... Fall des weißen Randes gelöst:
Code:
blendet sehr wohl die Seiten aus aber durch
Rectangle1.Sides:= []
Code:
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:
Rectangle1.Align:=TAlignLayout.Client;
Code:
Denn Zweck von
Rectangle1.Height := Memo1.Height + 2;
Rectangle1.Width := Memo1.Width + 2;
Code:
konnte ich nicht ergründen. Habe die Zeile ohne Folgen (?) weggelassen.
TControl(Obj).Margins:=TBounds.Create(TRectF.Create(-2,-2,-2,-2));
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz