Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi [XE5] Firemonkey TButton Style zur Laufzeit ändern (https://www.delphipraxis.net/179694-%5Bxe5%5D-firemonkey-tbutton-style-zur-laufzeit-aendern.html)

stoxx 25. Mär 2014 10:18

[XE5] Firemonkey TButton Style zur Laufzeit ändern
 
Hallo, ich mache gerade meine ersten Gehversuche mit Firemonkey mobile, und bräuchte eine kleinen Dankanstoß.
Ich möchte den Style eines TButtons zur Laufzeit ändern.
Mein erster Versuch war, das TStylebook bearbeiten zu wollen, da dies nicht direkt ging, hab ich es in die Datei xx.style abgespeichert, und wollte manuell einen Eintrag zu kopieren und einen neuen hinzufügen und "buttonstyle" in "buttonstyle1" umzubennen.
Nach dem Laden des Styles wurde aber "buttonstyle1" nicht angezeigt, das funktioniert also nicht.
Hab allerdings nicht verstanden, warum?

mein neuer Versuch war, ein zweites Stylebook aufs Formular zu legen, um dort einen "roten" Button im Style zu kreieren.
Aber wie kann ich nun dem einzelnen Button den Style zuweisen, ohne das alle anderen Buttons davon betroffen sind?

Vielen Dank!


Delphi-Quellcode:
  object TLayout
    StyleName = 'buttonstyle'
    DesignVisible = False
    Height = 26.000000000000000000
    Position.X = 384.000000000000000000
    Position.Y = 488.000000000000000000
    Width = 73.000000000000000000
    object TRectangle
      StyleName = 'background'
      Align = alContents
      Fill.Kind = bkGradient
      Fill.Gradient.Points = <
        item
          Color = xFF505050
          Offset = 0.000000000000000000
        end
        item
          Color = xFF303030
          Offset = 1.000000000000000000
        end>
      Locked = True
      Height = 26.000000000000000000
      HitTest = False
      Stroke.Color = xFF222222
      XRadius = 3.000000000000000000
      YRadius = 3.000000000000000000
      Width = 73.000000000000000000
      object TColorAnimation
        Duration = 0.200000002980232200
        PropertyName = 'Fill.Color'
        StartValue = xFF505050
        StopValue = xFF707070
        Trigger = 'IsMouseOver=true;IsPressed=false'
        TriggerInverse = 'IsMouseOver=false;IsPressed=false'
      end
      object TColorAnimation
        Duration = 0.200000002980232200
        PropertyName = 'Fill.Color'
        StartValue = xFF707070
        StopValue = xFF404040
        Trigger = 'IsPressed=true'
        TriggerInverse = 'IsPressed=false'
      end
    end

Union 25. Mär 2014 10:55

AW: [XE5] Firemonkey TButton Style zur Laufzeit ändern
 
Der iOS Style wird immer geladen. Daher musst Du Deinen Style umbenennen und den Namen dann im StyleLookup des Buttons eintragen. Dem Elternformular des Buttons ist dann das Stylebook zuzuweisen.

stoxx 25. Mär 2014 11:34

AW: [XE5] Firemonkey TButton Style zur Laufzeit ändern
 
Zitat:

Zitat von Union (Beitrag 1253397)
Der iOS Style wird immer geladen. Daher musst Du Deinen Style umbenennen und den Namen dann im StyleLookup des Buttons eintragen. Dem Elternformular des Buttons ist dann das Stylebook zuzuweisen.

Also dem Formular hab ich ein (das) Stylebook zugewiesen.
Wenn ich dem Elternformular ein alternatives Stylebook zuweise, dann ändert sich leider die Farbe aller TButtons.
Irgendwie lässt sich aber das Stylebook auch nicht bearbeiten, so dass ich den oben gezeigten "Text" hinzufügen könnte.

Im Moment probiere ich mit Android.

Oder könntest Du denn vielleicht bitte eine kleine Demo App zusammenklicken, für eine "firemonkey mobile" .
Kleine App mit zwei TButtons mit 2 verschiedenen Farben?
Danke, falls Du soviel Zeit haben solltest.

Gruß stoxx

Union 25. Mär 2014 11:46

AW: [XE5] Firemonkey TButton Style zur Laufzeit ändern
 
Liste der Anhänge anzeigen (Anzahl: 2)
Anbei die App. Hat 3 verschiedene Button-Styles:
  • RedRoundButtonStyle
  • refreshtoolbutton
  • <ohne>

und die werden alle gleichzeitig und korrekt angezeigt.

stoxx 25. Mär 2014 13:00

AW: [XE5] Firemonkey TButton Style zur Laufzeit ändern
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von Union (Beitrag 1253403)

und die werden alle gleichzeitig und korrekt angezeigt.

Hallo .. erstmal vielen Dank, aber das ist noch nicht ganz das, was ich wollte.


ich habe jetzt zur Style Datei ein ein TLayout "BlueRoundButtonStyle" hinzugefügt.
Und obwohl ich in die die Property vom Button2 "BlueRoundButtonStyle" eingetragen hat, bleibt der Button Grau ohne Style.
im StyleLookUp steht auch nach einem Neustart der IDE "BlueRoundButtonStyle" nicht zur Verfügung.

Die MobileStyles.style sieht derzeit so aus:

Delphi-Quellcode:
object TStyleContainer
  object TLayout
    StyleName = 'RedRoundButtonStyle'
    DesignVisible = False
    Height = 52.000000000000000000
    Position.X = 424.000000000000000000
    Position.Y = 494.000000000000000000
    Width = 118.000000000000000000
    object TRoundRect
      StyleName = 'background'
      Align = alContents
      Fill.Kind = bkGradient
      Fill.Gradient.Points = <
        item
          Color = xFFD40F0F
          Offset = 0.108974359929561600
        end
        item
          Color = claWhite
          Offset = 1.000000000000000000
        end>
      Fill.Gradient.StartPosition.X = 0.500000000000000000
      Fill.Gradient.StartPosition.Y = 1.000000000000000000
      Fill.Gradient.StopPosition.X = 0.499999970197677600
      Fill.Gradient.StopPosition.Y = 0.000000000000000000
      Height = 52.000000000000000000
      Width = 118.000000000000000000
      object TInnerGlowEffect
        StyleName = 'InnerGlowEffect'
        Softness = 0.400000005960464500
        GlowColor = xFF4F4848
        Opacity = 0.899999976158142100
        Trigger = 'IsPressed=true'
      end
    end
    object TText
      StyleName = 'text'
      Align = alContents
      Color = claWhite
      Height = 52.000000000000000000
      Text = 'AAA'
      Width = 118.000000000000000000
    end
  end
object TLayout
    StyleName = 'BlueRoundButtonStyle'
    DesignVisible = False
    Height = 52.000000000000000000
    Position.X = 424.000000000000000000
    Position.Y = 494.000000000000000000
    Width = 118.000000000000000000
    object TRoundRect
      StyleName = 'background'
      Align = alContents
      Fill.Kind = bkGradient
      Fill.Gradient.Points = <
        item
          Color = xFF0F0FD4
          Offset = 0.108974359929561600
        end
        item
          Color = claWhite
          Offset = 1.000000000000000000
        end>
      Fill.Gradient.StartPosition.X = 0.500000000000000000
      Fill.Gradient.StartPosition.Y = 1.000000000000000000
      Fill.Gradient.StopPosition.X = 0.499999970197677600
      Fill.Gradient.StopPosition.Y = 0.000000000000000000
      Height = 52.000000000000000000
      Width = 118.000000000000000000
      object TInnerGlowEffect
        StyleName = 'InnerGlowEffect'
        Softness = 0.400000005960464500
        GlowColor = xFF48484F
        Opacity = 0.899999976158142100
        Trigger = 'IsPressed=true'
      end
    end
    object TText
      StyleName = 'text'
      Align = alContents
      Color = claWhite
      Height = 52.000000000000000000
      Text = 'AAA'
      Width = 118.000000000000000000
    end
  end
end

Union 25. Mär 2014 13:07

AW: [XE5] Firemonkey TButton Style zur Laufzeit ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich habe Deinen blauen Button in mein Stylebook eingefügt und es funktioniert bestens. Was steht bei Dir in Form1.StyleBook (Siehe mein erster Post - Dem Elternformular des Buttons ist dann das Stylebook zuzuweisen)? Leider fhlt die f,x Datei in Deinem Zip, so dass ich hier nur raten kann.

stoxx 25. Mär 2014 13:14

AW: [XE5] Firemonkey TButton Style zur Laufzeit ändern
 
Zitat:

Zitat von Union (Beitrag 1253422)
Also ich habe Deinen blauen Button in mein Stylebook eingefügt und es funktioniert bestens.

>edit< .. jetzt gehts bei mir auf einmal auch, ich konnte das Stylebook laden.
Nur, warum geht das jetzt?
Ich hatte vorhin mit einem umfangreichem Stylebook genau das gleiche probiert, und da konnte er das Stylebook nicht laden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 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