AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Quellcode von VCLStyleViewer u. FMXStyleViewer
Thema durchsuchen
Ansicht
Themen-Optionen

Quellcode von VCLStyleViewer u. FMXStyleViewer

Ein Thema von Pfaffe · begonnen am 24. Nov 2015 · letzter Beitrag vom 29. Nov 2015
Antwort Antwort
Seite 1 von 2  1 2      
Pfaffe

Registriert seit: 29. Jan 2009
297 Beiträge
 
Delphi 12 Athens
 
#1

Quellcode von VCLStyleViewer u. FMXStyleViewer

  Alt 24. Nov 2015, 11:51
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?
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Quellcode von VCLStyleViewer u. FMXStyleViewer

  Alt 24. Nov 2015, 22:11
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.
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
297 Beiträge
 
Delphi 12 Athens
 
#3

AW: Quellcode von VCLStyleViewer u. FMXStyleViewer

  Alt 25. Nov 2015, 15:38
Zitat:
Für FMX gibt es das "ControlsDemo", im Menü des Demoprogramms gibt es einen Befehl "Load Style".
Das TStyleManager.SetStyle(TStyleStreaming.LoadFromFil e(OpenDialog1.FileName)); in der Demo funktioniert.

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.
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
297 Beiträge
 
Delphi 12 Athens
 
#4

AW: Quellcode von VCLStyleViewer u. FMXStyleViewer

  Alt 26. Nov 2015, 08:41
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.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Quellcode von VCLStyleViewer u. FMXStyleViewer

  Alt 26. Nov 2015, 22:59
Kannst Du (grob beschrieben) unter Windows z.B. so machen:

Delphi-Quellcode:
  if FindResource(HInstance, PChar('win8style'), RT_RCDATA) <> 0 then
    TStyleManager.SetStyle(TStyleStreaming.LoadFromResource(HInstance, 'win8style',
     RT_RCDATA));
Da werden die fest verdrahteten Styles geladen. Je nach Windows-Version lädst Du halt "win7style" usw.
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
297 Beiträge
 
Delphi 12 Athens
 
#6

AW: Quellcode von VCLStyleViewer u. FMXStyleViewer

  Alt 27. Nov 2015, 11:12
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:
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.
Von wegen, das ist doch Fummelprogrammierung. Nur mit Deiner Hilfe bin ich weitergekommen. Für die Praxis ist diese Art von Programmierung nicht geeignet, da man den Aufwand nicht einschätzen kann.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Quellcode von VCLStyleViewer u. FMXStyleViewer

  Alt 27. Nov 2015, 19:01
Zitat:
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.
Von wegen, das ist doch Fummelprogrammierung. Nur mit Deiner Hilfe bin ich weitergekommen. Für die Praxis ist diese Art von Programmierung nicht geeignet, da man den Aufwand nicht einschätzen kann.
Ich bin mir nicht ganz sicher was Du meinst. Gut, es hängt natürlich immer ein wenig von der Erfahrung ab, die man mit dem einen oder anderen Bereich gesammelt hat. Wenn das eine oder andere Neuland ist, ist es sicher nicht ganz so einfach, wie ich das mal so locker von mir gegeben habe.

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:
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 = '*Windowsthen 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;
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).

Vielleicht kennt aber auch jemand anders noch eine einfachere Variante.
Miniaturansicht angehängter Grafiken
styles.jpg  
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
297 Beiträge
 
Delphi 12 Athens
 
#8

AW: Quellcode von VCLStyleViewer u. FMXStyleViewer

  Alt 28. Nov 2015, 21:16
Hier meine Lösungen:

vcl-Variante
Delphi-Quellcode:
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;
FMX-Varainte
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;
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
297 Beiträge
 
Delphi 12 Athens
 
#9

AW: Quellcode von VCLStyleViewer u. FMXStyleViewer

  Alt 28. Nov 2015, 23:58
Zitat:
Ich bin mir nicht ganz sicher was Du meinst.
Ich bin auf Emba ziemlich stinkig. Die Entwicklungsumgebung ist ja nicht gerade billig. Der Preis würde ein untergeordnete Rolle spielen, wenn man den Leistungen von Emba vertrauen könnte. Ich habe nicht die Zeit und auch nicht das Kapital um für Emba in meiner Freizeit den kostenlosen Betatester zu machen.
Unter http://www.embarcadero.com/de/produc...udio/whats-new steht "Embarcadero® RAD Studio™ 10 Seattle ist der schnellste Weg zur Erstellung und Aktualisierung datenintensiver, hochgradig vernetzter und optisch anspruchsvoller Anwendungen für Windows 10, Mac, mobile Geräte ..."
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.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Quellcode von VCLStyleViewer u. FMXStyleViewer

  Alt 29. Nov 2015, 15:44
FMX-Varainte
Leider fehlt mir die Defaut Stylebezeichner für iOS und Android. Wenn die Jemand kennt, dann her damit.
Ich habe mal bei verschiedenen "Untersuchungen" folgendes ermittelt:

'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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:14 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