Einzelnen Beitrag anzeigen

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