Ü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;