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/)
-   -   Auswahl von Standardstil zur Laufzeit (https://www.delphipraxis.net/215404-auswahl-von-standardstil-zur-laufzeit.html)

Maekkelrajter 26. Jun 2024 14:36

Auswahl von Standardstil zur Laufzeit
 
Zur Zeit spiele ich ein wenig mit den 'Styles' (VCL) herum. Dazu möchte ich den 'Standard'-Style zur Laufzeit ändern. Das funktioniert auch (anscheinend) fehlerlos:
Delphi-Quellcode:
uses  
  Vcl.Themes, Vcl.Styles,

  type
      StyleArray = TArray<string>;

  var StandardStyleName: string;
        AvailableStyles: StyleArray;
begin
  AvailableStyles:= TStyleManager.StyleNames;
  for i := 0 to length(AvailableStyles) - 1 do combobox1.Items.Add(AvailableStyles[i]);

  [...]

  StandardStyleName := Combobox1.text; // ausgewählter Style
  TStyleManager.TrySetStyle(StandardStyleName); // Style als Standardstyle übernehmen
end
'StandardStyleName' wird dann in der Config-Datei der Anwendung gespeichert und beim Start derselben wieder eingelesen. Dazu hatte ich in der DPR hinter 'Application.Initialize' folgende Zeile eingefügt:

Delphi-Quellcode:
TStyleManager.TrySetStyle(config.StandardStyleName)

Das funktionierte, wie gesagt einwandfrei;

Nun möchte ich aber die Styles auch zur Entwurfszeit sehen können. Normalerweise wird ja in den neueren Delphi-Versionen der mit Projekt/Optionen/Anwendung/Erscheinungsbild/Standardstil gewählte 'Standardstil' auch im Formular-Designer verwendet. Wenn ich aber die DPR modifiziert habe (s.o.), wird in der DPR die Zeile 'TStyleManager.TrySetStyle('StandardStil')', die normalerweise automatisch hinter 'Application.Initialize' eingefügt wird, als erste Zeile noch vor 'program myprog' geschrieben und damit die DPR ruiniert, ein, wie ich meine, höchst seltsames Verhalten. Im Formulardesigner ist dann immer der Default-Stil (Windows) zu sehen. Eine Fehlermeldung erscheint dabei nicht. Die kommt dann natürlich beim ersten Versuch, das Projekt zu kompilieren.
Ich habe das zunächst gelöst, indem ich das Setzten des Standardstiles (aus der Config-Datei der Anwendung) von der DPR ins FormCreate verlegt habe. Dann funktioniert das automatische Einfügen in die DPR beim 'Speichern' des Standardstiles einwandfrei. Das hat im Prinzip das gewünschte Ergebnis, aber mich stört, dass nun beim Start der Anwendung zweimal kurz hintereinander ein 'Standardstil' geladen und zugewiesen wird. Das hat, so glaube ich wenigstens zu sehen, ein zusätzliches unschönes Flackern zur Folge.
Nun meine Frage: läßt sich das automatische Einfügen der Zeile in die DPR irgendwie unterbinden? Ich hoffe ich konnte das Problem einigermaßen verständlich machen.

Gruß LP

himitsu 26. Jun 2024 15:06

AW: Auswahl von Standardstil zur Laufzeit
 
Die Form hat ein StyleName-Property

und prinzipiell lässt sich via der OpenToolsAPI auch die geladene DPR bearbeiten.

Uwe Raabe 26. Jun 2024 17:01

AW: Auswahl von Standardstil zur Laufzeit
 
Du kannst deine Zeile in der DPR einfach unter die automatisch von der IDE verwaltete schreiben. Dann sollte kein Flackern mehr zu sehen sein.

Delphi-Quellcode:
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  TStyleManager.TrySetStyle('Aqua Light Slate');
  TStyleManager.TrySetStyle(config.StandardStyleName);

Maekkelrajter 26. Jun 2024 22:35

AW: Auswahl von Standardstil zur Laufzeit
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1538272)
Du kannst deine Zeile in der DPR einfach unter die automatisch von der IDE verwaltete schreiben. Dann sollte kein Flackern mehr zu sehen sein.

So funktioniert das automatische Einfügen der Zeile tatsächlich ordnungsgemäß. Zwar wird beim Start nach wie vor zweimal hintereinander TStyleManager.TrySetStyle aufgerufen wird, aber das findet eben vor Erstellung der Mainform statt. Das Flackern scheint mir deutlich reduziert. Es ist kein Unterschied zu erkennen, egal ob der Aufruf nur einmal oder zweimal erfolgt. Mit dieser kleinen 'Resourcen-Verschwendung' kann man leben :-D
Danke für den Tip!

Gruß LP


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