![]() |
VCL Skins aus Datei
Ich hoffe ich bin im richtigen Unterforum. Wenn nicht, bitte verschieben.
Ich experimentiere momentan ein wenig mit VCL Styles. Ich möchte sie während das Programm läuft, wechseln können. Ich habe eine ListBox auf meinem Formular und lade dort die Dateien im Style Ordner rein. Klappt problemlos. Beim klick auf eine Stildatei, möchte ich das der Skin geladen und gesetzt wird. Hier mein Quellcode dazu:
Delphi-Quellcode:
Das funktioniert. Teilweise.
procedure TForm1.StyleBoxClick(Sender: TObject);
var stylename: string; begin stylename := LeftStr(StyleBox.Items[StyleBox.ItemIndex], Length(StyleBox.Items[StyleBox.ItemIndex])- 4); ShowMessage(StyleName); if TStyleManager.IsValidStyle('C:\Users\Public\Documents\Embarcadero\Studio\21.0\Styles\'+StyleName+'.vsf') then begin TStyleManager.LoadFromFile('C:\Users\Public\Documents\Embarcadero\Studio\21.0\Styles\'+StyleName+'.vsf'); ShowMessage('Ist ok'); TStyleManager.SetStyle(StyleName); end; end; Es funktioniert wenn die Styles einen kurzen Namen haben. "Auric", "AllPorts" oder sowas. Wird geladen und gesetzt, also das Design entsprechend geändert. Allerdings nicht wenn der Name des Styles (bzw. der Syle Datei) länger ist. "AquaGraphite", "Windows10BlackPerl" oder so. Da kommt die Fehlermeldung das der Stil nicht gefunden wurde. Was nicht sein kann, dann wäre er nicht in der ListBox. Lasse ich den Stil von Delphi unter Projekt->Optionen->Erscheinungsbild ändern, funktioniert es. Der Skin wird also nicht kaputt sein, schätze ich. Das alles verwirrt mich sehr... |
AW: VCL Skins aus Datei
Der Dateiname ist zwar AquaGraphite.vsf, aber der Style heißt intern "Aqua Graphite".
|
AW: VCL Skins aus Datei
Uff, danke.
Ist da irgendeine Logik hinter? Also sowas wie "Wenn Großbuchstabe dann davor Leerzeichen" ? Dann könnte ich das leicht anpassen. Wie man das sonst aus der Stildatei auslesen könnte weiß ich leider nicht. |
AW: VCL Skins aus Datei
Hallo,
so sollte es functionieren.
Delphi-Quellcode:
als Beispiel
var
myStyle : TStyleInfo; begin if TStyleManager.IsValidStyle('C:\Users\Public\Documents\Embarcadero\Studio\21.0\Styles\'+'SmokeyQuartzKamri'+'.vsf', myStyle) then begin TStyleManager.LoadFromFile('C:\Users\Public\Documents\Embarcadero\Studio\21.0\Styles\'+'SmokeyQuartzKamri'+'.vsf'); TStyleManager.TrySetStyle(myStyle.Name,true); end; end; Gruß |
AW: VCL Skins aus Datei
Vielen Dank!
Es klappt und ich habe wieder etwas gelernt. Vielen Dank :) |
AW: VCL Skins aus Datei
Zitat:
Delphi-Quellcode:
Bis bald...
uses
Vcl.Styles, Vcl.Themes, mormot.core.base, mormot.core.text, mormot.core.search, mormot.core.os; type TStyleItem = record fileName: TFileName; styleName: String; end; const STYLE_FOLDER = 'Styles'; STYLE_SEARCHMASK = '*.vsf'; var styleItems: array of TStyleItem; begin var styleInfo: TStyleInfo; var styleItemCount: Integer; var styleFolder: TFileName := MakePath(['c:\Users\Public\Documents\Embarcadero\Studio\22.0', STYLE_FOLDER], True); var styleFiles: TFileNameDynArray := FileNames(styleFolder, STYLE_SEARCHMASK); for var i: Integer := 0 to High(styleFiles) do begin if TStyleManager.IsValidStyle(styleFiles[i], styleInfo) then begin styleItemCount := Length(styleItems); SetLength(styleItems, styleItemCount + 1); styleItems[styleItemCount].fileName := styleFiles[i]; styleItems[styleItemCount].styleName := styleInfo.Name; end; end; var styleNames: RawUtf8; for var i: Integer := 0 to High(styleItems) do AddToCsv(StringToUtf8(styleItems[i].styleName), styleNames, sLineBreak); ShowMessage(Utf8ToString(styleNames)); Thomas |
AW: VCL Skins aus Datei
Danke, ich werde morgen damit weiter rumtesten.
Mein einziges Problem ist eigentlich zu Prüfen ob ein Skin schon geladen ist, damit ich ihn mehrfach aufrufen kann, wenn ich die Liste durchgehe. Das bekomme ich morgen hin, schätze ich. Dein Quellcode sieht nach interessanten Infos aus, für mich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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