AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TStyleManager.TrySetStyle und Form.Show

Ein Thema von Gremlin · begonnen am 11. Aug 2020 · letzter Beitrag vom 11. Aug 2020
Antwort Antwort
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
176 Beiträge
 
Delphi 7 Enterprise
 
#1

TStyleManager.TrySetStyle und Form.Show

  Alt 11. Aug 2020, 10:39
Delphi-Version: 5
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
Gruss Gremlin
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.372 Beiträge
 
Delphi 12 Athens
 
#2

AW: TStyleManager.TrySetStyle und Form.Show

  Alt 11. Aug 2020, 11:58
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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#3

AW: TStyleManager.TrySetStyle und Form.Show

  Alt 11. Aug 2020, 12:13
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
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
176 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: TStyleManager.TrySetStyle und Form.Show

  Alt 11. Aug 2020, 12:57
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.
Gruss Gremlin
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.947 Beiträge
 
Delphi 12 Athens
 
#5

AW: TStyleManager.TrySetStyle und Form.Show

  Alt 11. Aug 2020, 13:52
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.
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
176 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: TStyleManager.TrySetStyle und Form.Show

  Alt 11. Aug 2020, 14:11
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
Gruss Gremlin
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 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