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 Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.663 Beiträge
 
Delphi 12 Athens
 
#1

AW: Wo ist das original Style der Controls?

  Alt 12. Apr 2018, 10:19
P.S. Sag mal Uwe gibt es etwas was du nicht kennst.
Da bin ich mir sicher.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.386 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wo ist das original Style der Controls?

  Alt 12. Apr 2018, 10:26
Er weiß nur grade nicht was das sein könnte.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Kostas

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

AW: Wo ist das original Style der Controls?

  Alt 14. Apr 2018, 13:22
Halo Zusammen,

hat jemand eine Idee wie der Name des aktiven Styles abgerufen werden kann?

So geht es nicht, das result ist immer leer auch wenn der Style über TStylemanager.SetStyleFromFile( INIStyle ) gesetzt wurde:
TStyleManager.ActiveStyle(nil).StyleName oder TStyleManager.ActiveStyle(self).StyleName Hintergrund der Frage ist, wenn ich den default Style über Uwes Methode setze TStylemanager.SetStyle(nil); funktioniert es zwar einwandfrei. Ich darf die Methode nur kein zweites mal aufrufen da ansonsten die Meldung kommen "doppelte Namen sind nicht zulässig" oder so ähnlich. Wenn also der Standard-Style bereits gesetzt ist, darf er nicht erneut gesetzt werden. Ich könnte das zwar selbst verwalten, ich dachte nur es muss doch eine Möglichkeit geben abzufragen welcher Style gerade gesetzt ist. Übrigens, es geht hier um ein Android FMX Projekt!


Gruß Kostas
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Wo ist das original Style der Controls?

  Alt 14. Apr 2018, 18:41
Bitte verbessert mich, es ist bestimmt falsch, aber wenn ich der FMX Doku folge, sollte ein FMX.Styles.TStyleManager.ActiveStyle( INIFile ) als Ergebniss den Stil liefern, oder ?!

Also so in etwa:
Delphi-Quellcode:
var
 MeinStil : TFmxObject;
begin
 MeinStil := TStyleManager.ActiveStyle( INIFile );
end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Kostas

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

AW: Wo ist das original Style der Controls?

  Alt 14. Apr 2018, 21:33
Bitte verbessert mich, es ist bestimmt falsch, aber wenn ich der FMX Doku folge, sollte ein FMX.Styles.TStyleManager.ActiveStyle( INIFile ) als Ergebniss den Stil liefern, oder ?!

Also so in etwa:
Delphi-Quellcode:
var
 MeinStil : TFmxObject;
begin
 MeinStil := TStyleManager.ActiveStyle( INIFile );
end;

TStyleManager.ActiveStyle( INIStyle ).StyleName StyleName ist immer leer.

[Edit] Was soll eigentlich der Parameter beim ActiveStyle das habe ich auch nicht verstanden.

Gruß Kostas

Geändert von Kostas (14. Apr 2018 um 21:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.663 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wo ist das original Style der Controls?

  Alt 14. Apr 2018, 22:33
ActiveStyle gibt doch ein TFMXObject zurück. Bei einem TFMXObject gibt StyleName den Stilnamen für das FMX-Objekt an. Wenn das TFMXObject aber ein Style ist, dann müsste der Name des Styles im Property Name stehen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.386 Beiträge
 
Delphi 12 Athens
 
#7

AW: Wo ist das original Style der Controls?

  Alt 14. Apr 2018, 22:34
[Edit] Was soll eigentlich der Parameter beim ActiveStyle das habe ich auch nicht verstanden.
Vermutlich weil niemand eine Ahnung hat, wofür überall dieses "Context: TFmxObject" überhaupt gut sein soll, vorallem da auch in der OH nichts dazu steht.
Aber dem Namen nach klingt für mich eine INI schonmal total falsch.

Wo kommt denn dieser Blödsinn mit dem IniFile her?

Gibt da einfach NIL rein, so wie du es auch beim SetStyle machst, also bei dem SetStyle mit den zwei Parametern, denn das mit einem Parameter gibt da auch nur ein NIL weiter.
Kannst ja mal danach suchen, aber nirgendwo was zu finden, nichtmal eine dieser leeren Pseudo-Hilfeseiten ala "Das ist Methode ABC in Klasse XYZ. Hier steht nichts Sinnvolles, bitte hilf uns das zu füllen".
TStyleManager.StyleResourceForContext
TBehaviorServices.SupportsBehaviorService
IDeviceBehavior.GetOSPlatform
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (14. Apr 2018 um 22:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Wo ist das original Style der Controls?

  Alt 14. Apr 2018, 22:50
Ich habe hier mal ein Demo womit Du unabhängig von externen Style Dateien bist.
Ich habe als Resource Styles eingefügt die Delphi mitbringt c:\Users\Public\Documents\Embarcadero\Studio\19.0\Styles\Android\*.fsf und \iOS\*.fsf Bei Programm Start wird eine ComboBox mit Styles gefüllt, im OnChange wird gewechselt und Du brauchst Dir um den Namen keine Sorge machen.
Das Demo sollte fit für Android und iOS sein, aber da das nicht gerade mein Steckenpferd ist, bitte ich bei Fehler um Nachsicht.
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"

Delphi-Quellcode:
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Ani, FMX.Layouts, FMX.Gestures, FMX.Styles,
  FMX.StdCtrls, FMX.Controls.Presentation, FMX.ListBox;

type
  TForm1 = class(TForm)
    StyleBook1: TStyleBook;
    ToolbarHolder: TLayout;
    ToolbarPopup: TPopup;
    ToolbarPopupAnimation: TFloatAnimation;
    ToolBar1: TToolBar;
    ToolbarApplyButton: TButton;
    ToolbarCloseButton: TButton;
    ToolbarAddButton: TButton;
    ComboBoxStyle: TComboBox;
    procedure ToolbarCloseButtonClick(Sender: TObject);
    procedure FormGesture(Sender: TObject;
      const EventInfo: TGestureEventInfo; var Handled: Boolean);
    procedure FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure ComboBoxStyleChange(Sender: TObject);
  private
    FGestureOrigin: TPointF;
    FGestureInProgress: Boolean;
    { Private declarations }
    procedure ShowToolbar(AShow: Boolean);
  public
    { Public declarations }
    procedure AddComboItem(AText: string);
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  var KeyChar: Char; Shift: TShiftState);
begin
  if Key = vkEscape then
    ShowToolbar(not ToolbarPopup.IsOpen);
end;

procedure TForm1.ToolbarCloseButtonClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.FormGesture(Sender: TObject;
  const EventInfo: TGestureEventInfo; var Handled: Boolean);
var
  DX, DY : Single;
begin
  if EventInfo.GestureID = igiPan then
  begin
    if (TInteractiveGestureFlag.gfBegin in EventInfo.Flags)
      and ((Sender = ToolbarPopup)
        or (EventInfo.Location.Y > (ClientHeight - 70))) then
    begin
      FGestureOrigin := EventInfo.Location;
      FGestureInProgress := True;
    end;

    if FGestureInProgress and (TInteractiveGestureFlag.gfEnd in EventInfo.Flags) then
    begin
      FGestureInProgress := False;
      DX := EventInfo.Location.X - FGestureOrigin.X;
      DY := EventInfo.Location.Y - FGestureOrigin.Y;
      if (Abs(DY) > Abs(DX)) then
        ShowToolbar(DY < 0);
    end;
  end
end;

procedure TForm1.ShowToolbar(AShow: Boolean);
begin
  ToolbarPopup.Width := ClientWidth;
  ToolbarPopup.PlacementRectangle.Rect := TRectF.Create(0, ClientHeight-ToolbarPopup.Height, ClientWidth-1, ClientHeight-1);
  ToolbarPopupAnimation.StartValue := ToolbarPopup.Height;
  ToolbarPopupAnimation.StopValue := 0;
  ToolbarPopup.IsOpen := AShow;
end;

procedure TForm1.AddComboItem(AText: string);
var lbi: TListBoxItem;
begin
  lbi := TListBoxItem.Create(ComboBoxStyle);
  lbi.Parent := ComboBoxStyle;
  lbi.Text := AText;
  ComboBoxStyle.AddObject(lbi);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  AddComboItem('Default');

  if TOSVersion.Platform = pfAndroid then
  begin
    AddComboItem('Dark');
    AddComboItem('Dark2');
    AddComboItem('DarkBlue');
    AddComboItem('Light');
    AddComboItem('Light2');
    AddComboItem('Wear');
    AddComboItem('WearDarkBlue');
    AddComboItem('GoogleGlass');
  end
  else if TOSVersion.Platform = pfiOS then
  begin
    AddComboItem('Black');
    AddComboItem('Transparent');
  end;

  ComboBoxStyle.ItemIndex := 0;
end;

procedure TForm1.ComboBoxStyleChange(Sender: TObject);
var resname: string; style: TFMXObject;
begin
  if ComboBoxStyle.ItemIndex > 0 then
  begin
    if TOSVersion.Platform = pfAndroid then
      resname := 'Android'
    else if TOSVersion.Platform = pfiOS then
      resname := 'iOS';
    resname := resname + ComboBoxStyle.Selected.Text;
// style := TStyleManager.GetStyleResource(resname);
    style := TStyleStreaming.LoadFromResource(HInstance, resname, RT_RCDATA); // ich glaube das ist richtig

    if style <> nil then
      TStyleManager.SetStyle(style);
  end
  else
    TStyleManager.SetStyle(nil);
end;
end.
Ich hoffe das es funktioniert da dies alles nur Theorie ist und Dir irgendwie weiterhelfen kann.
Gruß vom KodeZwerg

Geändert von KodeZwerg (14. Apr 2018 um 22:59 Uhr) Grund: Code aktualisiert
  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 21: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