AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Wo ist das original Style der Controls?
Thema durchsuchen
Ansicht
Themen-Optionen

Wo ist das original Style der Controls?

Ein Thema von Kostas · begonnen am 12. Apr 2018 · letzter Beitrag vom 15. Apr 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Wo ist das original Style der Controls?

  Alt 15. Apr 2018, 07:57
es aber keine Style-Ressource ist
Wichtig: Die Resourcen Namen müssen mit den OS + ComboBox Namen passen
Beispiel ComboBox Name "Dark" steht in Resource als "AndroidDark" und kommt von Datei "AndroidDark.fsf"
Also wenn man Android gestartet hat, Dark auswählt, lädt der AndroidDark.fsf rein üder den Resourcennamen AndroidDark.
So steht es in der .RC Datei AndroidDark RCDATA "C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\19.0\\Styles\\Android\\AndroidDark.fsf" Ich schrieb doch was Source macht oder ist das falsch mit den .fsf Dateien?
Weil wenn das Deine einzige Sorge ist bin ich irgendwie sehr zufrieden mit mir.
Es gibt echt viele Möglichkeiten um Styles zu laden, ich hatte die Befürchtung das ich eine völlig falsche nehme.
Den Resourcenpart kann man auch in ein Daten-Module auslagern um mehr Ordnung/Trennung zu halten.

edit
Ich hab es gerade mal durchgespielt, also Deine Befürchtung des es knallt/eine Exception wird geworfen wenn Resource X nicht gefunden wird kann ich leider nicht nachvollziehen da Style dann NIL ist. Erst ein erfolgreiches LoadFromResource macht aus Style kein NIL.
Ich habe einfach einen Unsinn Eintrag in die ComboBox geadded und in der "if style <> nil then" ein Label umbennen lassen, wenn Resource OK dann Label = Name der Resource, bei NIL bleibt das Label leer ohne Exception.
Das gleiche passiert wenn jemand extern eine Resource löscht, wählt man dann die gelöschte aus passiert gar nichts.
Man könnte ja vielleicht auch bei Laufzeit die vorhandenen Resourcen per Enum durchforsten lassen und nicht so primitiv wie ich es mache. Das war halt mein erster Versuch, mittlerweile ist aus "if TOSVersion.Platform = pfAndroid then" ein "case TOSVersion.Platform of" geworden.
Gruß vom KodeZwerg

Geändert von KodeZwerg (15. Apr 2018 um 09:28 Uhr)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.112 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wo ist das original Style der Controls?

  Alt 15. Apr 2018, 20:11
Hallo Zusammen,

zumindest bei meinem Android 6.0.1 Device funktioniert es nicht.

Mit Button2 lade ich den Style AndroidJet.style in den TStyleManager. Der Style wird geladen und umgestellt. Funktioniert einwandfrei.
Mit Button1 lade ich den default Style, funktioniert ebenfalls einwandfrei.
Mit Button3 frage ich jetzt jeweils den StyleName und gebe es jeweils in Edit1 + Edit2 aus. Der Style Name ist jedes mal leer.

Delphi-Quellcode:
procedure TForm1.bt1Click(Sender: TObject);
begin
  //Auf Tag Style schalten (den default Style verwenden)

  TStyleManager.SetStyle(nil);
end;

procedure TForm1.bt2Click(Sender: TObject);
var StylePath: string;
begin
  //Auf Nacht Style schalten
  StylePath := TPath.GetSharedDocumentsPath + PathDelim + 'fmxstyles' + PathDelim;
  TStyleManager.SetStyleFromFile(StylePath + 'AndroidJet.style');

end;

procedure TForm1.bt3Click(Sender: TObject);
var MeinStil: TFmxObject;

begin
  edit1.text := TStyleManager.ActiveStyle(nil).StyleName;

  MeinStil := TStyleManager.ActiveStyle(nil);

  edit2.text := MeinStil.StyleName;

end;

Mittlerweile mache ich das jetzt anders.
Die Methode TStyleManager.SetStyleFromFile dauert in meiner Android Anwendung mit einigen Controls 5 Sekunden zum laden. Also muss der Anwender für jedes Umschalten 5 Sekunden warten.
Jetzt mache ich es wie folgt: Auf der Form habe ich drei StyleBooks. StyleBooks1 hat keinen Style damit ich den default Style nutzen kann. Die Anwendung wird also mit default Style geladen. Ich benötige zwei weitere Styles zur Auswahl. StyleBooks1 + StyleBooks2 werden bei OnCreate über einen Thread geladen. Das dauert die gleiche Zeit also 10 Sekunden insgesamt, weil es in einem Thread läuft ist es egal. Auf das Style umschalten geht dann Pfeil schnell.


Delphi-Quellcode:

procedure TfrMain.FormCreate(Sender: TObject);
begin
  TThread.CreateAnonymousThread(procedure
  begin
    TThread.Synchronize(TThread.CurrentThread, Procedure
    var StylePath: string;
    begin


      StylePath := TPath.GetSharedDocumentsPath + PathDelim + 'fmxstyles' + PathDelim;

      sb2.LoadFromFile(StylePath + INIStyle1);
      sb3.LoadFromFile(StylePath + INIStyle2);

      actStyle.Enabled := true;

    end);
  end).Start;


end;


procedure TfrMain.actStyleExecute(Sender: TObject);
begin
  actStyle.Checked := not actStyle.Checked;

  if actStyle.Checked
  then frMain.StyleBook := sb3
  else frMain.StyleBook := sb2;


end;



Gruß Kostas
  Mit Zitat antworten Zitat
Antwort Antwort


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 14: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-2025 by Thomas Breitkreuz