AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Firemonkey] Styles dynamisch zur Laufzeit ändern

Ein Thema von RWarnecke · begonnen am 25. Jun 2013 · letzter Beitrag vom 27. Jun 2013
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

[Firemonkey] Styles dynamisch zur Laufzeit ändern

  Alt 25. Jun 2013, 20:41
Hallo zusammen,

ich habe mir ein paar eigene Styles erstellt, die wunderbar funktionieren. Jetzt meine Frage, kann ich zum Beispiel in einem Style ein Bitmap (TImage) zur Laufzeit ändern ? Gibt es dazu irgendwelche Anleitungen ?

Edit:
Am besten wäre es, wenn ich die Bitmaps aus Resourcefiles laden könnte.
Rolf Warnecke
App4Mission

Geändert von RWarnecke (25. Jun 2013 um 21:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [Firemonkey] Styles dynamisch zur Laufzeit ändern

  Alt 25. Jun 2013, 22:53
Ich habe mal auf´s Geradewohl ein bischen herum gespielt:

Delphi-Quellcode:
procedure TFormAbfall.Button1Click(Sender: TObject);
var
  O: TFmxObject;
  Ol: TFmxObject;
  Ob: TFmxObject;
begin
  O := FMX.Types.FindStyleResource('checkboxstyle');
  if not Assigned(O) then
    Exit;
  for Ol in O.Children do
  begin
    if Ol.ClassName = 'TLayoutthen // if Ol.StyleName = 'layout' then ??
    begin
      for Ob in Ol.Children do
      begin
        if Ob.StyleName = 'backgroundthen
        begin
          if Ob is TSubImage then
          begin
            (Ob as TSubImage).Source.Bitmap.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'as.bmp');
            Exit;
          end;
        end;
      end;
    end;
  end;
end;
Naiver weise dachte ich, so ein Hintergrundbild für meine Checkbox zuzuweisen.
Statt dessen wird das ganze Formular verändert (das Bild als Hintergrund für das Formular verwendet (incl. NoneClient) und alles übrige recht verfälscht).

Vielleicht bringt Dich aber ja davon etwas auf die zündende Idee...


EDIT: "ich habe mir ein paar eigene Styles erstellt, die wunderbar funktionieren" ... sehen wolln
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: [Firemonkey] Styles dynamisch zur Laufzeit ändern

  Alt 25. Jun 2013, 23:12
Ich habe mal auf´s Geradewohl ein bischen herum gespielt:

Delphi-Quellcode:
procedure TFormAbfall.Button1Click(Sender: TObject);
var
  O: TFmxObject;
  Ol: TFmxObject;
  Ob: TFmxObject;
begin
  O := FMX.Types.FindStyleResource('checkboxstyle');
  if not Assigned(O) then
    Exit;
  for Ol in O.Children do
  begin
    if Ol.ClassName = 'TLayoutthen // if Ol.StyleName = 'layout' then ??
    begin
      for Ob in Ol.Children do
      begin
        if Ob.StyleName = 'backgroundthen
        begin
          if Ob is TSubImage then
          begin
            (Ob as TSubImage).Source.Bitmap.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'as.bmp');
            Exit;
          end;
        end;
      end;
    end;
  end;
end;
Naiver weise dachte ich, so ein Hintergrundbild für meine Checkbox zuzuweisen.
Statt dessen wird das ganze Formular verändert (das Bild als Hintergrund für das Formular verwendet (incl. NoneClient) und alles übrige recht verfälscht).

Vielleicht bringt Dich aber ja davon etwas auf die zündende Idee...
Danke für Dein Beispiel. Ich habe es sogar noch ein wenig verkürzt :
Delphi-Quellcode:
procedure SetTabItemIcon(TabItemControl: TTabItem; Bitmap: string);
var
  T: TFmxObject;
begin
  if TabItemControl = nil then Exit;
  T := TabItemControl.FindStyleResource('tabicnfile');
  if (T <> nil) and (T is TImage) then
  begin
    TImage(T).Bitmap.LoadFromFile(Bitmap);
  end;
  TabItemControl.Repaint;
end;
Das funktioniert jetzt. Jetzt brauche ich nur noc, dass ich unter Windows die Bitmaps aus Resourcen laden kann.

EDIT: "ich habe mir ein paar eigene Styles erstellt, die wunderbar funktionieren" ... sehen wolln
Sind noch nicht ganz fertig. Bis jetzt habe ich beim Treeview nur ein Icon eingesetzt und beim TabItem ein Icon eingesetzt.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: [Firemonkey] Styles dynamisch zur Laufzeit ändern

  Alt 25. Jun 2013, 23:29
Bei mir brachte CheckBox1.FindStyleRessource... immer nil.
Daher der Umweg über die zentrale Ressourcenliste.
Betrifft Deine Änderung dann nur ein einzelnes Tab?

Ich habe mir auch mal einen Style gebastelt (bzw. von einem originalen abgeleitet und erweitert).
Für eigene Komponenten muss man dann allerdings wieder nachbessern, wenn man einen anderen Style verwenden möchte.
Die style.png habe ich mit Gimp verändert.
Das war ziemliche Wurschtelei, auch wenn mir das Ergebnis erst mal gefällt.

Wäre echt mal interessant, ob jemand das Style-Konzept irgendwann plausibel erklären kann (Delphi-Tage?).

PS: Übrigens reicht if (T is TImage) then aus. Nil wäre dann false.
Miniaturansicht angehängter Grafiken
style.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

AW: [Firemonkey] Styles dynamisch zur Laufzeit ändern

  Alt 26. Jun 2013, 00:07
Bei mir brachte CheckBox1.FindStyleRessource... immer nil.
Daher der Umweg über die zentrale Ressourcenliste.
Betrifft Deine Änderung dann nur ein einzelnes Tab?
Ja, es betrifft erstmal nur ein einzelnes Tab, genau das was Du der Procedure übergibst. Sicherlich kann man da noch mehr draus machen. Aber für den ersten Moment reicht mir das erstmal so.

Habe auch noch Probleme die Bitmaps unter Mac OSX zu laden, hat hier jemand noch einen Tipp fürr mich ? Die Bilder werden im Style nicht angezeigt, trotz m.M. richtiger Pfadangabe SetTabItemIcon(TsbYitem1, 'Contents/MacOS/Folder.png');
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

AW: [Firemonkey] Styles dynamisch zur Laufzeit ändern

  Alt 27. Jun 2013, 08:38
Habe auch noch Probleme die Bitmaps unter Mac OSX zu laden, hat hier jemand noch einen Tipp fürr mich ? Die Bilder werden im Style nicht angezeigt, trotz m.M. richtiger Pfadangabe SetTabItemIcon(TsbYitem1, 'Contents/MacOS/Folder.png');
Das funktioniert jetzt. Jetzt brauche ich nur noch, dass ich unter Windows die Bitmaps aus Resourcen laden kann.
Hat jemand noch zu den beiden Vorgängen eine Idee ? Weder beim Mac noch bei Windows komme ich weiter.

Edit:
Das Laden der Bilder auf'm Mac habe ich gelöst. SetTabItemIcon(TI_1, ExtractFilePath(ParamStr(0)) + 'opened_folder.png'); .
Rolf Warnecke
App4Mission

Geändert von RWarnecke (27. Jun 2013 um 08:49 Uhr)
  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 20:32 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