AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Firemonkey Stylebook und Style dynamisch generieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey Stylebook und Style dynamisch generieren

Ein Thema von milos · begonnen am 21. Mai 2016 · letzter Beitrag vom 22. Mai 2016
Antwort Antwort
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
509 Beiträge
 
Delphi 11 Alexandria
 
#1

Firemonkey Stylebook und Style dynamisch generieren

  Alt 21. Mai 2016, 18:40
Hallo,

Gibt es eine Möglichkeit das Stylebook des Formulars und dessen Standardstyles für Komponente dynamisch generieren zu lassen? Also so das man zur Laufzeit die Styles bearbeiten kann.

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.088 Beiträge
 
Delphi 12 Athens
 
#2

AW: Firemonkey Stylebook und Style dynamisch generieren

  Alt 21. Mai 2016, 21:44
Wenn du mit Bearbeiten laden oder Umschalten meinst, ja das geht.

Entweder mehrere Stylebooks umschalten, oder mit dem TStyleManager

Womöglich geht auch das Editieren, denn die Styles sind nur primitive Objekte, aber das ist ziemlich frickelig.


Rollo
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
509 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Firemonkey Stylebook und Style dynamisch generieren

  Alt 21. Mai 2016, 21:48
Womöglich geht auch das Editieren, denn die Styles sind nur primitive Objekte, aber das ist ziemlich frickelig.
Genau das meinte ich, habe aber leider keine Möglichkeit gefunden dies zu bewerkstelligen. :/

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.088 Beiträge
 
Delphi 12 Athens
 
#4

AW: Firemonkey Stylebook und Style dynamisch generieren

  Alt 21. Mai 2016, 23:05
Über die OnUpdateObjects Events kommst du an die Style-Elemente ran, siehe auch hier und hier.

An anderer Stelle habe ich mal sowas ausprobiert, s.u.

Also über die StyleNamen kommst du an die Elemente ran, und weil das normal Objekte sind solltest du eigentlich auch zur Laufzeit Editieren, Einfügen, Löschen, etc. können.

Es ist auch so das du einfach ein Control nehmen kannst, machst daraus einen speziellen Style, und vergibst
einen StyleName "MeinStil". Das wird dan über den StyleName bekannt gemacht, und du kannst diesen Prototypen
sofort bei anderen Controls verwenden.

Aber dafür einen Editor zu schreiben ....
Das ist mühsam.
Schau doch mal bei Harry Stahl, der macht viel in der Richtung.
http://www.hastasoft.de/

Rollo


Delphi-Quellcode:
function Styles_Apply_Get(const obj : TListBoxItem; smStyleMode : TS4StyleMode;
                           sParam : Single; var sTxt : TText; var sDet : TText; var sImg : TGlyph) : Boolean;
var
  fmxImg : TFmxObject;
  fmxTxt : TFmxObject;
  fmxDet: TFmxObject;
  fmxMore: TFmxObject;
  sMore: TGlyph;

begin
  Result := False;
  sTxt := nil;
  sDet := nil;
  sImg := nil;

  if not Assigned(obj) then
    Exit;

  if (obj is TListBoxItem) then
  begin

    fmxTxt := (obj as TListBoxItem).FindStyleResource('text');
    fmxDet := (obj as TListBoxItem).FindStyleResource('accessorydetail');
    fmxImg := (obj as TListBoxItem).FindStyleResource('glyphstyle');
    fmxMore := (obj as TListBoxItem).FindStyleResource('accessorymore');


    case smStyleMode of
      smClientWithBottomText :
          begin

            if Assigned(fmxTxt) and (fmxTxt is TText) then
            begin
              sTxt := fmxTxt as TText;
              sTxt.Align := TAlignLayout.Bottom;
              //sTxt.Height := 32;
              sTxt.TextSettings.HorzAlign := TTextAlign.Center;
              sTxt.TextSettings.VertAlign := TTextAlign.Trailing;
              sTxt.TextSettings.WordWrap := True;
            end;

            if Assigned(fmxDet) and (fmxDet is TText) then
            begin
              sDet := fmxDet as TText;
              sDet.Align := TAlignLayout.Bottom;
              //sTxt.Height := 32;
              sDet.TextSettings.HorzAlign := TTextAlign.Center;
              sDet.TextSettings.VertAlign := TTextAlign.Trailing;
              sDet.TextSettings.WordWrap := True;
            end;

          end;

      smLeft:
          begin

            if Assigned(fmxTxt) and (fmxTxt is TText) then
            begin
              Result := True;
            end;

            if Assigned(fmxDet) then
            begin
// sDet := TText(fmxDet);
            end;

          end;

    end;


    if Assigned(fmxImg) and (fmxImg is TGlyph) then
    begin
      sImg := fmxImg as TGlyph; // TListItemImage;
      sImg.Align := TAlignLayout.Client;
      sImg.Margins := TBounds.Create( RectF(sParam, sParam, sParam, sParam) );
    ebd;

    if Assigned(fmxMore) and (fmxMore is TGlyph) then
    begin
      sMore := fmxMore as TGlyph; // TListItemImage;
    end;


  end;

end;
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
509 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Firemonkey Stylebook und Style dynamisch generieren

  Alt 22. Mai 2016, 06:25
Danke ist zwar leider nicht zu 100% wie ich es mir erhofft habe aber konnte es über einen kleinen Umweg gut lösen ^^

Nein soll kein Editor werden, nur eine kleine aber feine einstellungsmöglichkeit für ein tool

Freundliche Grüsse
Milos
  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 12:41 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