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 FMX Button Farbe zur Laufzeit ändern (https://www.delphipraxis.net/204268-fmx-button-farbe-zur-laufzeit-aendern.html)

Rainer Wolff 12. Mai 2020 20:59

FMX Button Farbe zur Laufzeit ändern
 
Jetzt google ich mal wieder lang genug blöd rum, um eine Antwort auf eine eigentlich einfache Frage zu finden.

Ich habe 10 Reihen mit je 3 Buttons, die sind beschriftet, und ich möchte zur Laufzeit eine der Button-Reihen einfärben (wechselnd). Die Beschriftung kann sich auch dynamisch zur Laufzeit ändern.

Die Möglichkeit, die ich gefunden habe, ist, einen Custom Style zu definieren, ein Rechtangle hinein (Hit-Test false!), und dann die property Style-Lookup zu ändern.

Aber der Umgang mit diesen Styles ist imho auch etwas schwergängig und bescheiden dokumentiert. Ich würde meine Style dann ja gerne einen Namen ala 'Greenbuttonstyle' geben, aber sobald ich den Style umbenenne, steht er mir im Button nicht mehr zur Auswahl. Der Style muss daher Button1Style1 oder ähnlich bescheiden lauten.

Wo gibts denn für den ganzen Krempel ein paar brauchbare Anleitungen?

Harry Stahl 13. Mai 2020 00:05

AW: FMX Button Farbe zur Laufzeit ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Du musst den Stylenamen im Stildesigner selber (Eigenschaft "StyleName") umbenennen, dann geht es (siehe anlg. Screenshot). Zur Laufzeit (oder auch designzeit) kannst Du dann beliebigen Buttons den Style zuweisen...

jziersch 13. Mai 2020 08:48

AW: FMX Button Farbe zur Laufzeit ändern
 
Zitat:

Zitat von Rainer Wolff (Beitrag 1464414)
Die Möglichkeit, die ich gefunden habe, ist, einen Custom Style zu definieren, ein Rechtangle hinein (Hit-Test false!), und dann die property Style-Lookup zu ändern.

Erstelle einfach ein TRectangle. Ziehe dieses in der strukturierten Übersicht in den Button sodass es ein Kind davon wird. Schalte seine property Align auf Client oder Content und HitTest auf false, sodass der Parent immer noch die events bekommt.
Nun kannst Du die Eigenschaften Fill und Stroke des Rectangle direkt ändern.

jziersch 13. Mai 2020 09:20

AW: FMX Button Farbe zur Laufzeit ändern
 
Falls Du etwas wie eine Vorlage für Deine Buttons verwenden möchtest geht das leicht mit Clone()

rec := TRectangle( Rectangle1.Clone(Button1) );
rec.Parent := Button1;
rec.Align := TAlignLayout.Client;

Clone kopiert auch die Kinder des Objektes sodass Du dort z.b. auch ein TText objekt unterbringen kannst.
Das ganze funktioniert dann ähnlich wie ein Stil, allerdings ohne die Suche über StyleLookup und Stylename.

Thomas Horstmann 13. Mai 2020 15:37

AW: FMX Button Farbe zur Laufzeit ändern
 
Ich leite TButton ab und überschreibe "Paint".

Delphi-Quellcode:
type
  TMyButton = class(TButton)
...
protected
  procedure Paint; override;
...
procedure TMyButton.Paint;
var
iSave : TCanvasSaveState;
begin
{ Ererbte Eigenschaften }
inherited Paint;

{ Einstellungen speichern }
iSave := Canvas.SaveState;
{ Ausgaben deaktivieren }
Canvas.BeginScene;

{ Eigener Hintergrund }
Canvas.Fill.Kind := TBrushKind.Solid;
Canvas.Fill.Color := TAlphaColorRec.Blue;
Canvas.FillRect(LocalRect,0,0,[],1);

{ Ausgaben aktivieren }
Canvas.EndScene;
{ Zurücksetzen }
Canvas.RestoreState(iSave);
end;

Rainer Wolff 14. Mai 2020 12:41

AW: FMX Button Farbe zur Laufzeit ändern
 
Zitat:

Zitat von Harry Stahl (Beitrag 1464426)
Du musst den Stylenamen im Stildesigner selber (Eigenschaft "StyleName") umbenennen, dann geht es (siehe anlg. Screenshot). Zur Laufzeit (oder auch designzeit) kannst Du dann beliebigen Buttons den Style zuweisen...

Darüber habe ich es jetzt auch gemacht, für Verwirrung hat aber gesorgt, dass speziell in dem Formular, in dem ich das brauche, ein IDE-Fehler reinspuckt. Wenn ich hier meinen Style umbenenne, ist er danach im Objektinspector nicht im Dropdown wählbar. Nur von Hand komplett austippen hilft (Vervollständigung geht wg. fehlender Dropdownliste auch nicht).

In einem testweise zusammengeklickten Formular geht es.

Das hatte mich natürlich zusätzlich verwirrt.

TurboMagic 15. Mai 2020 06:30

AW: FMX Button Farbe zur Laufzeit ändern
 
Kannst du mal in quality.embarcadero.com nachschauen, ob dieser Fehler dort schon
erfasst wurde und falls nicht den mal bitte erfassen?
Bitte dann die Report Nummer hier posten.


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