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 VCL Style wird nicht mehr gesetzt :-( (https://www.delphipraxis.net/215856-vcl-style-wird-nicht-mehr-gesetzt.html)

haentschman 18. Sep 2024 10:05


VCL Style wird nicht mehr gesetzt :-(
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallöle...8-)

Seit wann der Style nicht mehr gesetzt wird...keine Ahnung. :? Keiner sagt irgendwas. :roll: Die 5 User, die einen anderen Style haben, hätten meckern sollen...nö. :roll:

Unsere Anwendung hat einen Default Style in Blau (VCL Luna, DevExpress Office2010Blue). Die Entwicklung ist auch in Blau. Der Style wird entsprechend einer Einstellung in den StyleManager "übertragen". Zu Test habe ich den FCurrentStyle := styBlack gesetzt.
Delphi-Quellcode:
// setzen der Preferences der Anwendung (Style)
if FileExists(FPreferencesCommon.DictionaryFolder[ftProgramFolder] + conFileNameUserModifiedSytle) then
begin
  Ini := TMemIniFile.Create(FPreferencesCommon.DictionaryFolder[ftProgramFolder] + conFileNameUserModifiedSytle, TEncoding.UTF8);
  try
    dmStyle.CurrentStyle := TCommonStyle(Ini.ReadInteger('ModifiedStyle', 'Style', 0));
  finally
    Ini.Free;
  end;
end
else
begin
  dmStyle.CurrentStyle := FPreferencesCompany.CompanyStyle;
end;
...
procedure TdmStyle.SetCurrentStyle(const Value: TCommonStyle);
begin
  FCurrentStyle := Value;
  case FCurrentStyle of
    styBlack:
      begin
        TStyleManager.TrySetStyle('Obsidian', True);
        FCurrentDevStyleName := conDevStyleNameBlack;
        FCurrentDevLayout := conDevLayoutBlack;
        FCurrentColors.CurrentTreeFocus := conTreeFocusObsidian;
        FCurrentColors.CurrentTreeFocusBorder := conTreeFocusObsidianBorder;
        FCurrentColors.CurrentTreeTextColor := conTreeTextColorObsidian;
        FCurrentColors.CurrentTreeBackground := conTreeBackgroundObsidian;
        FCurrentColors.CurrentBackground := conBackgroundObsidian;
        FCurrentColors.CurrentBackgroundSplash := conBackgroundObsidianSplash;
      end;
    styBlue:
      begin
        TStyleManager.TrySetStyle('Luna', True);
        FCurrentDevStyleName := conDevStyleNameBlue;
        FCurrentDevLayout := conDevLayoutBlue;
        FCurrentColors.CurrentTreeFocus := conTreeFocusLuna;
        FCurrentColors.CurrentTreeFocusBorder := conTreeFocusLunaBorder;
        FCurrentColors.CurrentTreeTextColor := conTreeTextColorLuna;
        FCurrentColors.CurrentTreeBackground := conTreeBackgroundLuna;
        FCurrentColors.CurrentBackground := conBackgroundLuna;
        FCurrentColors.CurrentBackgroundSplash := conBackgroundLunaSplash;
      end;
    stySilver:
      begin
        TStyleManager.TrySetStyle('Silver', True);
        FCurrentDevStyleName := conDevStyleNameSilver;
        FCurrentDevLayout := conDevLayoutSilver;
        FCurrentColors.CurrentTreeFocus := conTreeFocusLight;
        FCurrentColors.CurrentTreeFocusBorder := conTreeFocusLightBorder;
        FCurrentColors.CurrentTreeTextColor := conTreeTextColorLight;
        FCurrentColors.CurrentTreeBackground := conTreeBackgroundLight;
        FCurrentColors.CurrentBackground := conBackgroundLight;
        FCurrentColors.CurrentBackgroundSplash := conBackgroundLightSplash;
      end;
  end;
end;
Problem:
Alle VCL Componenten (roter Rahmen) sind Blau trotz TStyleManager.TrySetStyle('Obsidian', True) = True :gruebel: Im Menüfenster (Bild1) ist das linke Panel (grüner Rahmen) manuell auf eine dunkleres Grau gesetzt...

Was ich geändert habe in der letzten Zeit:

1. Verlagerung von verschiedenen Units in einen "Base" Ordner
2. Verlagerung von verschiedenen Forms in einen "Base" Ordner
3. Projekt auf die neuen Ordner angepaßt...compiliert fehlerfrei.
4. Datenmodul dmStyle ist auch verlagert.
5. Der Quellcode des Setzen des Styles hat sich nicht geändert.
6. Die Componenten Style Einstellungen sind unverändert.


Nach was muß ich schauen? :gruebel:

Danke.

himitsu 18. Sep 2024 10:27

AW: VCL Style wird nicht mehr gesetzt :-(
 
Sind die Styles auch "wirklich" einkompiliert oder werden mitgeliefert?
(bei das RuntimePackage benutzt, bzw. die entsprechende Style-Unit in der EXE drin)

Im Designer zieht es sich ja die Styles übers DesignTimePackage.



Aber ob jetzt Delphis VCL-Styles mit denen von DevExpress kompatibel sind?

haentschman 18. Sep 2024 10:49

AW: VCL Style wird nicht mehr gesetzt :-(
 
Liste der Anhänge anzeigen (Anzahl: 1)
Der Style Code ist seit Jahren unverändert im Projekt, und eincompiliert, drin. :zwinker: Seit wann das so ist...keine Ahnung. Zwischenzeitlich habe ich auch auf 12.1 gewechselt...:gruebel:
Zitat:

Aber ob jetzt Delphis VCL-Styles mit denen von DevExpress kompatibel sind?
...deswegen gibt es für die VCL Komponenten VCL Styles und für die DevExpress Komponenten DevExpress Styles. :roll:

himitsu 18. Sep 2024 12:50

AW: VCL Style wird nicht mehr gesetzt :-(
 
Wobei viele DevExpressKomponenten (ala Button, Edit oder ComboBox, aber abgesehn von den Grids) ja auf den VCL-Komponenten aufsetzen. (in einer ContainerKlasse verwurschtelt)

haentschman 20. Sep 2024 05:59

AW: VCL Style wird nicht mehr gesetzt :-(
 
Liste der Anhänge anzeigen (Anzahl: 2)
Moin...8-)

keiner hat eine Idee? Was muß ich kontrollieren? Wo setze ich Breakpoints im System? :wink:

Lösung:
Vorab: Ich denke, daß ich das selbst war, weil ich in der Entwicklung, in den Forms, den Style "Luna", wegen der Positionierung, eingestellt habe. :oops:

Der in der Form im OI eingtragene Style Name, in diesem Falle "Luna", blockierte das Ändern des Styles zur Laufzeit der kompletten Form! :shock: Trotz Setzen des anderen Styles blieb die gesamte Form auf "Luna". Ob das so gewollt ist, ist mir ein Rätsel. :gruebel: Der Style sollte sich über das Ändern im StyleManager anpassen... 8-)

Fazit:
In der Entwicklung den Style leer lassen, es sei denn, daß für das Control ein fester Style gewünscht wird. Ansonsten grundsätzlich den Standard Style in der IDE auswählen. :wink:

Harry Stahl 20. Sep 2024 11:58

AW: VCL Style wird nicht mehr gesetzt :-(
 
Zitat:

Zitat von haentschman (Beitrag 1541264)
Moin...8-)

keiner hat eine Idee? Was muß ich kontrollieren? Wo setze ich Breakpoints im System? :wink:

Hast Du mal unter Projekt, Erscheinungsbild kontrolliert, ob da etwas anderes als "Windows" steht?

Ansonsten könntest Du in der Unit, wo "TrySetStyle" ausgeführt wird, einen Breakpoint setzen, um zu kontrollieren, ob es irgendwo evtl einen weiteren Aufruf gibt.

Wenn du die Styledateien nicht als separate Dateien auslieferst, sondern einkompiliert sind, könntest Du zur Not (als WorkAround) die Eigenschaft "Stylename" direkt in der Form zur Laufezeit (oder vorher) setzen, wo es problematisch ist (oder auch bei einzelnen Komponenten).

haentschman 20. Sep 2024 12:34

AW: VCL Style wird nicht mehr gesetzt :-(
 
Lösung siehe #5

Danke...:wink:

Uwe Raabe 20. Sep 2024 13:00

AW: VCL Style wird nicht mehr gesetzt :-(
 
Zitat:

Zitat von haentschman (Beitrag 1541264)
Der in der Form im OI eingtragene Style Name, in diesem Falle "Luna", blockierte das Ändern des Styles zur Laufzeit der kompletten Form! :shock: Trotz Setzen des anderen Styles blieb die gesamte Form auf "Luna". Ob das so gewollt ist, ist mir ein Rätsel. :gruebel: Der Style sollte sich über das Ändern im StyleManager anpassen... 8-)

Das ist nicht nur tatsächlich so gewollt, sondern auch so dokumentiert: Stile auf Steuerelementebene
Zitat:

2. Verwenden Sie die Eigenschaft TControl.StyleName zum Definieren des jeweiligen Stils für jedes Steuerelement oder Formular. Der Wert von StyleName muss mit einem der Namen der Stile in den Projektoptionen übereinstimmen. Ein Steuerelement kann den für sein übergeordnetes Steuerelement definierten StyleName verwenden. Sie können also die Eigenschaft StyleName eines Formulars festlegen, damit alle Steuerelemente auf dem Formular einen bestimmten Stil verwenden.

Standardmäßig ist TControl.StyleName leer und Steuerelemente verwenden einen Standardstil. Sie können StyleName auf Windows festlegen, um die Anwendung eines Stils für Steuerelemente oder Formulare zu deaktivieren. Wenn Sie den Namen eines Stils angeben, der sich nicht in den geladenen VCL-Stilen befindet, dann erhält das Steuerelement den Standardstil.
Der erwähnte Standardstil ist halt der über TrySetStyle festgelegte.

haentschman 20. Sep 2024 13:10

AW: VCL Style wird nicht mehr gesetzt :-(
 
Zitat:

Das ist nicht nur tatsächlich so gewollt, sondern auch so dokumentiert:
...wer hat denn zum Lesen Zeit. :stupid::zwinker: ...aber das hätte ich nicht gefunden.:?

Harry Stahl 20. Sep 2024 22:21

AW: VCL Style wird nicht mehr gesetzt :-(
 
Zitat:

Zitat von haentschman (Beitrag 1541306)
Lösung siehe #5

Danke...:wink:

Gerne. Das mit dem mixen der Styles finde ich übrigens eine tolle Geschichte, da man da sehr viele Möglichkeiten hat, sein Design zu gestalten.


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