AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE FMX-Styles : StyleLookup zu Controls zuordnen?

FMX-Styles : StyleLookup zu Controls zuordnen?

Ein Thema von himitsu · begonnen am 15. Sep 2025 · letzter Beitrag vom 19. Sep 2025
Antwort Antwort
Benutzerbild von milos
milos

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

AW: FMX-Styles : StyleLookup zu Controls zuordnen?

  Alt Gestern, 21:00
Hi,

wo genau es definiert ist kann ich dir nicht sagen, aber der OI wird alle Styles auflisten welche die Komponente im StyleNamen haben. Deswegen wird cleareditbutton auch bei TButton aufgelistet.

Dass das wirklich so "doof" ist kannst du ganz einfach testen indem du ein custom style für ein Label erstellst und es my_button_style nennst oder wie auch immer, das wird dann bei Buttons aufgelistet aber nicht bei Labels.

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.752 Beiträge
 
Delphi 12 Athens
 
#2

AW: FMX-Styles : StyleLookup zu Controls zuordnen?

  Alt Gestern, 21:45
Bei vielen Komponenten stimmt es schon, aber ganz so einfach kann es doch nicht sein.
> T weglassen und nach dem Namen suchen

TSpeedButton oder TColorListBox stehen nicht in ihren Styles

TScrollBar und TSmallScrollBar stehen in ihren Styles, aber bei denen werden sie garnicht aufglistet, obwohl es mehrere Styles dafür gibt.

Oder beim TListBoxGroupHeader wird nur der listboxplainheader gefunden,
aber beim TListBoxItem passt es aber wieder, also mehreres mit listboxitem.

Dagegen, bei der TTreeView wird auch der treeviewitemstyle vom TTreeViewItem mit gelistet



Und für eine Rückwärtssuche wäre sowas auch extrem ungünstig.
Ich kann zwar einen Style für die Vorschau direkt anzeigen, aber in einer Komponente sieht es oft schon anders aus, weil da dann Teile umarrangiert werden.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

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

AW: FMX-Styles : StyleLookup zu Controls zuordnen?

  Alt Heute, 04:43
Bei vielen Komponenten stimmt es schon, aber ganz so einfach kann es doch nicht sein.
> T weglassen und nach dem Namen suchen

TSpeedButton oder TColorListBox stehen nicht in ihren Styles

TScrollBar und TSmallScrollBar stehen in ihren Styles, aber bei denen werden sie garnicht aufglistet, obwohl es mehrere Styles dafür gibt.

Oder beim TListBoxGroupHeader wird nur der listboxplainheader gefunden,
aber beim TListBoxItem passt es aber wieder, also mehreres mit listboxitem.

Dagegen, bei der TTreeView wird auch der treeviewitemstyle vom TTreeViewItem mit gelistet



Und für eine Rückwärtssuche wäre sowas auch extrem ungünstig.
Ich kann zwar einen Style für die Vorschau direkt anzeigen, aber in einer Komponente sieht es oft schon anders aus, weil da dann Teile umarrangiert werden.
Okay das mit dem TreeViewItems ist ja mal zu lustig, hatte auch schon komisches gesehen aber das noch nicht.

Ich hab interessenshalber mal nachgeschaut, weil ich das verhalten bei ListBoxItem so auch nicht kannte bzw es nicht realisiert habe.

In FMX.Controls in TStyledControl wird eine public const string definiert:

Delphi-Quellcode:
  TStyledControl = class(TControl)
  public const
    StyleSuffix = 'style';
  ...

Dann gibts in der selben Unit/Klasse noch diese drei Funktionen:
(aus lizenztechnischen Gründen nur die Header, sollte es erlaubt sein Code für solche zwecke zu zeigen, lasst es mich wissen)

Delphi-Quellcode:

function TStyledControl.GenerateStyleName(const AClassName: string): string; // 6 Zeilen Code
Die macht eigentlich nichts anderes als:
- Result = AClassName.
- Wenn Result mit TCustom beginnt, wird es weggeschnitten.
- Wenn Result mit T beginnt, wird es weggeschnitten.
- Result + StyleSuffix (style) wird zurückgegeben (Ja, die Funktion hat einen Bug wenn das Control mit TCustomT beginnt )

Hier kommt also das "buttonstyle", "labelstyle" usw her...

Es gibt dann noch diese zwei ein-zeiler/helper funktionen:

Delphi-Quellcode:
function TStyledControl.GetDefaultStyleLookupName: string; // Eine Zeile
function TStyledControl.GetParentClassStyleLookupName: string; // Eine Zeile
Ich nehme mal an bei ListBox haben Sie noch das Root Component geprüft und bei TreeView gar nichts. Man könnte jetzt weiter gehen und schauen wie genau Embarcadero das macht, aber wahrscheinlich findest du ne bessere Alternative.

Code:
PS ...\embarcadero\studio\23.0\source\fmx> Select-String -Path "./*.pas" -Pattern "GetParentClassStyleLookupName"
Findet bei mir 14 weitere Ergebnisse...

Edit: Hab bisschen weiter gestöbert und ich denke hier ist es definiert:

(\embarcadero\studio\23.0\source\Property Editors\FmxStyleLookup.pas)
Code:
-TStyleLookupPropertyValues.GetValues(Proc: TGetStrProc);
  -> Hat eine sub-routine AddStylesForControl(const StyleObject: TFmxObject);
- In der Hauptroutine GetValues wird als erstes TStyleLookupPropertyValues.GetStyledControl aufgerufen.
- In GetStyledControl wird der DefaultStyleLookupName (von FMX.Controls.TStyledControl, siehe oben) benutzt um den default stylenamen zu kriegen. (z.b. buttonstyle)
- Das "style" wird wieder entfernt. (also zurück zu button)
- Es wird durch die styles gelooped und die matches werden als properties aufgelistet. (Einige werden geskippt)
Bin gerade zu müde den Code zu extrahieren / selbst auszuführen / zu debuggen, aber das sollte es sein.
Milos

Geändert von milos (Heute um 06:02 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:34 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