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/)
-   -   Delphi FMX: Wann wird ein Style geladen? / Tests für FMX-Workarounds (https://www.delphipraxis.net/198562-fmx-wann-wird-ein-style-geladen-tests-fuer-fmx-workarounds.html)

Der schöne Günther 14. Nov 2018 08:07


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:
OnApplyStyleLookup
-Event:
Delphi-Quellcode:
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;
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
Delphi-Quellcode:
FMX.Memo.TMemo
erstelle liefert
Delphi-Quellcode:
FindStyleResource(..)
nach dem Erstellen des Memos immer
Delphi-Quellcode:
nil
. Ich kann das Ding auch repainten wie ich will, das
Delphi-Quellcode:
OnApplyStyleLookup
wird nie aufgerufen.

Wie kann ich das richtig testen?

Rollo62 14. Nov 2018 10:42

AW: FMX: Wann wird ein Style geladen? / Tests für FMX-Workarounds
 
Bin gerade unterwegs,kann nicht selber nachsehen.
Hat das Memo ein ApplyStyleLookuphttp://docwiki.embarcadero.com/Libra...plyStyleLookup vorher aufzurufen .

Harry Stahl 14. Nov 2018 18:17

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:
styleObj := (Sender as TControl).FindStyleResource('background') as TActiveStyleObject;
halte ich mit dem sofortigen Cast auf TActiveStyleobject für problematisch, würde das gefundene Control immer zuerst mit "is" prüfen...

Ansonsten: Lad ein Beispiel hier hoch, sonst können wir nur raten warum es hier, aber nicht bei Dir funktioniert...

Der schöne Günther 16. Nov 2018 11:20

AW: FMX: Wann wird ein Style geladen? / Tests für FMX-Workarounds
 
Richtig, hier ein komplettes Beispiel:

https://gist.github.com/JensMertelme...0d6c75523b6f92

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:
TMemo.Create(testForm)
und die Geschichte mit dem background/ActiveStyleObject:


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:
TStyleManager.UpdateScenes();
:thumb:


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:
FMX.Forms
abstürzt wenn er
Delphi-Quellcode:
TStyleManager.UnInitialize()
aufruft. Habe ich hier noch etwas vergessen?
(Kompletter Stack)


Der zweite Punkt ist dass ich beim Erzeugen des Projekts nun immer folgende Warnungen bekomme:
Code:
[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.
Was muss ich hier tun?


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