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 Firemonkey Stylebook und Style dynamisch generieren (https://www.delphipraxis.net/189247-firemonkey-stylebook-und-style-dynamisch-generieren.html)

milos 21. Mai 2016 17:40

Firemonkey Stylebook und Style dynamisch generieren
 
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

Rollo62 21. Mai 2016 20:44

AW: Firemonkey Stylebook und Style dynamisch generieren
 
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

milos 21. Mai 2016 20:48

AW: Firemonkey Stylebook und Style dynamisch generieren
 
Zitat:

Zitat von Rollo62 (Beitrag 1338646)
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

Rollo62 21. Mai 2016 22:05

AW: Firemonkey Stylebook und Style dynamisch generieren
 
Ü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;

milos 22. Mai 2016 05:25

AW: Firemonkey Stylebook und Style dynamisch generieren
 
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 :D

Freundliche Grüsse


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