AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Auswahl von Standardstil zur Laufzeit

Ein Thema von Maekkelrajter · begonnen am 26. Jun 2024 · letzter Beitrag vom 26. Jun 2024
Antwort Antwort
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
157 Beiträge
 
Delphi 12 Athens
 
#1

Auswahl von Standardstil zur Laufzeit

  Alt 26. Jun 2024, 15:36
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:

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

Geändert von Maekkelrajter (26. Jun 2024 um 15:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Auswahl von Standardstil zur Laufzeit

  Alt 26. Jun 2024, 16:06
Die Form hat ein StyleName-Property

und prinzipiell lässt sich via der OpenToolsAPI auch die geladene DPR bearbeiten.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.471 Beiträge
 
Delphi 12 Athens
 
#3

AW: Auswahl von Standardstil zur Laufzeit

  Alt 26. Jun 2024, 18:01
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);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
157 Beiträge
 
Delphi 12 Athens
 
#4

AW: Auswahl von Standardstil zur Laufzeit

  Alt 26. Jun 2024, 23:35
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
Danke für den Tip!

Gruß LP
  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 01:08 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