![]() |
Quellcode von VCLStyleViewer u. FMXStyleViewer
Im Ordner "C:\Program Files (x86)\Embarcadero\Studio\17.0\bin\" liegen die VCLStyleViewer.exe und die FMXStyleViewer.exe.
Ich hätte Interesse am Quellcode diesen Anwendungen. Gibt es den irgendwo? Oder ein anderes gleichwertiges Demo? |
AW: Quellcode von VCLStyleViewer u. FMXStyleViewer
Wäre mir nicht bekannt, dass der Quellcode offen ist.
Für FMX gibt es das "ControlsDemo", im Menü des Demoprogramms gibt es einen Befehl "Load Style". Im Prinzip dürfte es ja nicht schwer sein, das sowohl für die VCL und FMX selber nachzubauen: Gewünschte Komponenten auf die Form und die entsprechenden Routinen zum laden der Styles einbauen. |
AW: Quellcode von VCLStyleViewer u. FMXStyleViewer
Zitat:
In der vcl läuft bei mir ein TStyleManager.SetStyle(TStyleManager.LoadFromFile( OpenDialog1.FileName); auf eine Exception, wenn ich zweimal hintereniander den gleichen Style lade. Zudem wird eine OnShow ausgelöst. Setze ich ein ReportMemoryLeaksOnShutdown := True; dann hagelt es memory leaks. Auch TStyleManager.UnRegisterStyle(TStyleManager.Active Style); hilft nicht. |
AW: Quellcode von VCLStyleViewer u. FMXStyleViewer
Als Alternative zu TStyleManager.SetStyle(TStyleStreaming.LoadFromFil e(OpenDialog1.FileName)) funktioniert auch TStyleManager.SetStyleFromFile(OpenDialog1.FileNam e).
Jetzt suche ich nach einer Möglichkeit wieder auf den Systemstyle umzuschalten. In der Hilfe steht dazu setsystemstyle, diese Methode scheint es aber gar nicht zu geben. Alles ein bisschen seltsam.:gruebel: |
AW: Quellcode von VCLStyleViewer u. FMXStyleViewer
Kannst Du (grob beschrieben) unter Windows z.B. so machen:
Delphi-Quellcode:
Da werden die fest verdrahteten Styles geladen. Je nach Windows-Version lädst Du halt "win7style" usw.
if FindResource(HInstance, PChar('win8style'), RT_RCDATA) <> 0 then
TStyleManager.SetStyle(TStyleStreaming.LoadFromResource(HInstance, 'win8style', RT_RCDATA)); |
AW: Quellcode von VCLStyleViewer u. FMXStyleViewer
Danke, die FMX Variante funktioniert soweit unter Windows. Nur wie ist das unter anderen Betriebssystemen?
Unter der vcl bekomme ich es überhaupt nicht hin. Zitat:
|
AW: Quellcode von VCLStyleViewer u. FMXStyleViewer
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Einen VCL-Style kann man in der Tat nur einmal laden, beim 2. Mal gibt es eine Exception. Sollte man vermeiden, da es da z.T. zu anderen Problemen kommen kann. Daher muss man sich merken, ob der Style schon geladen wurde. Auf der VCL-Seite ist es ein wenig tricky zu prüfen, ob der Style schon geladen ist, da Style-Name und Style-Dateiname nicht immer gleich sein müssen, da gibt es dann schon mal Probleme. Ich merke mir daher Dateiname und Name des Styles in einer Stringliste. Ich verwende in meinen Programmen immer so einen Auswahl-Dialog (siehe Screenshot), wo man sich den gewünschten Style auswählen und aktivieren kann. Hier mal ein Auszug vom Source-Code, der Dir vielleicht eine Idee gibt, wie man das lösen kann (GetFieldStr ist eine eigene Prozedur, welche Elemente in einem String, getrennt durch ein betimmtes Feldtrennzeichen zurück liefert):
Delphi-Quellcode:
Vom Ablauf ist es so, dass der Dialog beim Aufruf prüft, welche Style-Dateien im Programmverzeichnis liegen und liest die dann in die Dropdown-Box ein (zum Programmstart wird natürlich schon ein Style geladen, der ist dann schon in der zuvor von mir erzeugten Style-Liste - slStyles - drin).
procedure hs_ChangeDesign(sMenu: string);
var OK: Boolean; // Prüfen, ob der Style schon geladen wurde function StyleIsLoaded (var s: string): boolean; var i: Integer; begin result := false; for I := 0 to slStyles.Count-1 do begin if GetFieldStr ('=', slStyles[i], 1) = s then begin s := GetFieldStr ('=', slStyles[i], 2); // den Namen des Styles ermitteln und zurückgeben Result := True; break; end; end; end; begin ProgStyle := sMenu; if ProgStyle = '*Windows' then begin TStyleManager.SetStyle('Windows'); end else begin if TStyleManager.IsValidStyle(chkPath (AppPath) + SMenu) then begin if FileExists (chkPath (AppPath) + sMenu) then begin try OK := StyleIsLoaded (sMenu); if OK then begin // Style ist schon geladen, SetStyle kann verwendet werden TStyleManager.SetStyle(sMenu); end else begin // Style noch nicht geladen, muss erst geladen werden, dann zur Merkliste hinzufügen TStyleManager.SetStyle(TStyleManager.LoadFromFile(chkPath (AppPath) + sMenu)); slStyles.add (Progstyle + '=' + TStyleManager.ActiveStyle.Name); end; except end; end; end else begin TStyleManager.TrySetStyle('Windows'); end; end; end; Vielleicht kennt aber auch jemand anders noch eine einfachere Variante. |
AW: Quellcode von VCLStyleViewer u. FMXStyleViewer
Hier meine Lösungen:
vcl-Variante
Delphi-Quellcode:
FMX-Varainte
procedure TFStyles.Set_Styles(const FileName: string);
var StyleInfo: TStyleInfo; begin if sametext(FileName, 'DEFAULT') then // DEFAULT -> Betriebssystem TStyleManager.SetStyle('Windows') // Einstellung unter den Projektoptionen auf WINDOWS lassen else begin if TStyleManager.IsValidStyle(FileName, StyleInfo) then begin // Wenn FileName nicht valide ist, dann wir eine Exception geworfen try TStyleManager.SetStyle(StyleInfo.Name); except TStyleManager.SetStyle(TStyleManager.LoadFromFile(FileName)); // OnShow wird ausgelöst end; end; end; end; Leider fehlt mir die Defaut Stylebezeichner für iOS und Android. Wenn die Jemand kennt, dann her damit.
Delphi-Quellcode:
procedure TForm1.Set_Styles(FileName: string);
begin if sametext(FileName, 'DEFAULT') then // DEFAULT -> Betriebssystem begin try if TOSVersion.Platform = pfWindows then begin FileName:= 'win' +TOSVersion.Name.Substring(TOSVersion.Name.Length-2).trimleft+ 'style'; // Windows 7,8,10 if FindResource(HInstance, PChar(FileName), RT_RCDATA) <> 0 then TStyleManager.SetStyle(TStyleStreaming.LoadFromResource(HInstance, FileName, RT_RCDATA)); end else // if TOSVersion.Platform = (pfWindows, pfMacOS, pfiOS, pfAndroid, pfWinRT, pfLinux); then raise Exception.Create(format('Betriebssystem "%s" wird derzeit nicht unterstützt.', [TOSVersion.ToString])); except end; end else begin TStyleManager.SetStyleFromFile(FileName); end; end; |
AW: Quellcode von VCLStyleViewer u. FMXStyleViewer
Zitat:
Unter ![]() Tatsache ist: a. Auch nach dem Update 1 läuft die IDE immer noch nicht stabil. Nicht benötigte Packages müssen in der Regiestrie ausgeschaltet werden. Wenn man nicht permanent an den Fenstergrößen rumziehen möchte, muss man sich Zusatztools aus China installieren (wie peinlich). IDEFixPacks werden benötigt. b. In Hilfedateien stehen falche Dinge, die mich in die Irre führen und mich unproduktive Zeit kosten. c. Auf der Willkommensseite werde ich mit Werbung bestrahlt, die ich nur mit Hilfe dritter, hier im Forum, abschalten konnte. Wenn es eine Freeware wäre, dann würde ich es akzeptieren, das es keine offizielle Möglichkeit gibt, Werbung auszuschalten. d. :oops: |
AW: Quellcode von VCLStyleViewer u. FMXStyleViewer
Zitat:
'ipadstyle' // IOS 'androidstyle' // Android 'lionstyle' // MAC Habe es selber aber nicht verwendet, da ich im konkreten Fall was anders gemacht habe. Sollte aber funktionierten, den Test muss ich nun Dir überlassen. Funktioniert natürlich nur, wenn das kompilierte Programm auf der jeweiligen Plattform ausgeführt wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 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 by Thomas Breitkreuz