![]() |
FMX: Wann wird ein Style geladen? / Tests für FMX-Workarounds
Ich habe mit FMX noch keine Erfahrung. Ich möchte ein Memo-Feld mit der gleichen Hintergrundfarbe wie das Formular darstellen.
Der einzige Weg den ich gefunden habe ist über das
Delphi-Quellcode:
-Event:
OnApplyStyleLookup
Delphi-Quellcode:
Da mir niemand garantiert dass Embarcadero z.B. "background" eines Tages nicht mal umbenennt wollte ich einen Test dafür schreiben. Wenn ich in einem DUnit-Testprogramm ein
procedure TTextBox.MemoApplyStyleLookup(Sender: TObject);
var styleObj: TActiveStyleObject; begin styleObj := (Sender as TControl).FindStyleResource('background') as TActiveStyleObject; if not Assigned(memoStyleSource) then memoStyleSource := styleObj.Source; if isReadOnly then styleObj.Source := nil else styleObj.Source := memoStyleSource; end;
Delphi-Quellcode:
erstelle liefert
FMX.Memo.TMemo
Delphi-Quellcode:
nach dem Erstellen des Memos immer
FindStyleResource(..)
Delphi-Quellcode:
. Ich kann das Ding auch repainten wie ich will, das
nil
Delphi-Quellcode:
wird nie aufgerufen.
OnApplyStyleLookup
Wie kann ich das richtig testen? |
AW: FMX: Wann wird ein Style geladen? / Tests für FMX-Workarounds
Bin gerade unterwegs,kann nicht selber nachsehen.
Hat das Memo ein ApplyStyleLookup ![]() |
AW: FMX: Wann wird ein Style geladen? / Tests für FMX-Workarounds
Also hier- auch unter Seattle - findet FindStyleResource das Object.
Hast Du evtl. etwas an den Namen der Styleresource im Style-Editor geändert? ApplyStyleLookUp wird nur einmal zum Programmstart aufgerufen oder wenn Du später einen anderen Style lädst. Den direkten Aufruf von
Delphi-Quellcode:
halte ich mit dem sofortigen Cast auf TActiveStyleobject für problematisch, würde das gefundene Control immer zuerst mit "is" prüfen...
styleObj := (Sender as TControl).FindStyleResource('background') as TActiveStyleObject;
Ansonsten: Lad ein Beispiel hier hoch, sonst können wir nur raten warum es hier, aber nicht bei Dir funktioniert... |
AW: FMX: Wann wird ein Style geladen? / Tests für FMX-Workarounds
Richtig, hier ein komplettes Beispiel:
![]() Im Endeffekt ist es nur ein DUnit-Projekt in welchem ich ein FMX-Formular anlege:
Delphi-Quellcode:
.
testForm := TForm.CreateNew(nil);
TStyleManager.UpdateScenes(); Mein Memo lege ich einfach an mit
Delphi-Quellcode:
und die Geschichte mit dem background/ActiveStyleObject:
TMemo.Create(testForm)
Delphi-Quellcode:
procedure TestTextBox.TestBackgroundStyle();
var obj: TFmxObject; begin cut.Parent := testForm; cut.ApplyStyleLookup(); obj := cut.FindStyleResource('background'); CheckNotNull(obj); CheckIs(obj, TActiveStyleObject); end; Was soll man sagen? Es funktioniert, danke für den Tipp mit
Delphi-Quellcode:
:thumb:
TStyleManager.UpdateScenes();
Es verbleiben zwei Problem: Die DUnit-Testanwendung stürzt beim Schließen mit einem Runtime-Error 216 ab. Da macht es keinen Unterschied ob es eine DUnit-Konsolenanwendung oder mit grafischer Oberfläche ist. Im Degbugger sieht man dass er bei der Finalisierung der Unit
Delphi-Quellcode:
abstürzt wenn er
FMX.Forms
Delphi-Quellcode:
aufruft. Habe ich hier noch etwas vergessen?
TStyleManager.UnInitialize()
( ![]() Der zweite Punkt ist dass ich beim Erzeugen des Projekts nun immer folgende Warnungen bekomme:
Code:
Was muss ich hier tun?
[dcc32 Hinweis] H2161 Warning: Duplicate resource: Type 12 (CURSOR GROUP), ID 32761; File c:\program files (x86)\embarcadero\studio\17.0\lib\Win32\release\FMX.Controls.Win.res resource kept; file c:\program files (x86)\embarcadero\studio\17.0\lib\Win32\release\controls.res resource discarded.
[dcc32 Hinweis] H2161 Warning: Duplicate resource: Type 12 (CURSOR GROUP), ID 32762; File c:\program files (x86)\embarcadero\studio\17.0\lib\Win32\release\FMX.Controls.Win.res resource kept; file c:\program files (x86)\embarcadero\studio\17.0\lib\Win32\release\controls.res resource discarded. [dcc32 Hinweis] H2161 Warning: Duplicate resource: Type 12 (CURSOR GROUP), ID 32763; File c:\program files (x86)\embarcadero\studio\17.0\lib\Win32\release\FMX.Controls.Win.res resource kept; file c:\program files (x86)\embarcadero\studio\17.0\lib\Win32\release\controls.res resource discarded. [dcc32 Hinweis] H2161 Warning: Duplicate resource: Type 12 (CURSOR GROUP), ID 32766; File c:\program files (x86)\embarcadero\studio\17.0\lib\Win32\release\FMX.Controls.Win.res resource kept; file c:\program files (x86)\embarcadero\studio\17.0\lib\Win32\release\controls.res resource discarded. [dcc32 Hinweis] H2161 Warning: Duplicate resource: Type 12 (CURSOR GROUP), ID 32767; File c:\program files (x86)\embarcadero\studio\17.0\lib\Win32\release\FMX.Controls.Win.res resource kept; file c:\program files (x86)\embarcadero\studio\17.0\lib\Win32\release\controls.res resource discarded. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 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