Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TStyleManager.TrySetStyle und Form.Show (https://www.delphipraxis.net/205193-tstylemanager-trysetstyle-und-form-show.html)

Gremlin 11. Aug 2020 10:39

Delphi-Version: 5

TStyleManager.TrySetStyle und Form.Show
 
Hallo,


scheinbar werden in DelphiXE beim Ändern eines Styles zur Laufzeit die Show-Events aller geöffneten Formulare aufgerufen.
Kann man dies irgendwie global abstellen?

Problem: Die Formulare enthalten Initialisierungscode, der eigentlich nur einmal ausgeführt werden darf.

Vielen Dank

himitsu 11. Aug 2020 11:58

AW: TStyleManager.TrySetStyle und Form.Show
 
OnShow ist nunmal eben kein Event, dass nur einmal ausgeührt wird.
Immer wieder, sobald Show bzw. Visible=True ausgeführt wird.

Ich vermute aber mal, dass es Absichst ist, falls da im OnShow Code drin ist, der die Oberfläche Initialisiert (z.B. Komponenten ausrichten).

Dalai 11. Aug 2020 12:13

AW: TStyleManager.TrySetStyle und Form.Show
 
Eigentlich ist die Sache ganz einfach: (private) Boolean-Variable in die Form oder das Programm, und wenn die False ist, den Kram im OnShow ausführen und dann diese Variable auf True setzen. Also sowas:
Delphi-Quellcode:
if NOT InitDone then begin
   DoSomeStuff;
   InitDone:= True;
end;
Grüße
Dalai

Gremlin 11. Aug 2020 12:57

AW: TStyleManager.TrySetStyle und Form.Show
 
Danke, das ist schon klar, nur möchte ich jetzt nicht den Programmcode von 250++ Formularen ändern.
Zum Glück stammen fast alle Formulare von einer Ableitung ab, dann kann ich mich in die Methode DoShow reinhängen.

Der Weg des Aufrufs geht nach dem CM_StyleChanged über

- TCustomForm.CMShowingChanged(var Message: TMessage);
- DoShow
- FormShow


Oder ich lass die Änderungen eines Styles einfach nicht zu, wenn irgendein relevantes Formular geöffnet ist.

Rollo62 11. Aug 2020 13:52

AW: TStyleManager.TrySetStyle und Form.Show
 
Hat jetzt nicht direkt mit TStyleManager zu tun, aber ich hatte schonmal bei größeren Projekten zwangsweise die App neu starten lassen, für so eine Einstellung.

Ich weiss, ist nur suboptimal, geht aber auch, und es sollte auch jeder Kunde Verständnis für haben.
Schliesslich macht man das nur einmal normalerweise.
Es hat sich darüber jedenfalls noch nie jemand beschwert, im Gegenteil,
die Kunden waren froh das sowas überhaupt geht.

Das würde Dir zumindest einen größeren Umbau ersparen,
nach der 80/20 Regel, möglichst wenig Arbeit in unütze Dinge stecken.

Gremlin 11. Aug 2020 14:11

AW: TStyleManager.TrySetStyle und Form.Show
 
Vielen Dank
Das werde ich mal ins Auge fassen :)

Zum Glück ist die Ursache jetzt bekannt.
Immer wenn ich die Styles gesetzt hatte, waren die Einstellungen der Anwendung (und auch die Variable die den ausgewählten Style enthielt) wieder zurückgesetzt :(:-D


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