![]() |
FMX-Styles : StyleLookup zu Controls zuordnen?
Tachchen,
der Property-Editor im OI listet ja im Property StyleLookup oft so Einiges auf, aber woher weiß er was er da auflisten muß? z.B. was ganz Einfaches: TSizeGrip hat nur einen Style aber wenn ich jetzt z.B. einen TButton nehmen, dann gibt es da viele Styles, nur diesen Einen natürlich nicht. Gut, ich kann manuell sizegripstyle dort eintragen und schon sieht der TButton wie ein TSizeGrip aus. Allerdings finde ich nirgendwo etwas, was mir programmseitig sagt "jo, für TButton gibt es diese Styles" oder "also dieser Style" gehört zu dieser Komponente diesen Komponenten. z.B. der Style cleareditbutton gehört zum TButton, aber auch zum TClearEditButton, während beim TClearEditButton nur dieses cleareditbutton gelistet wird, hat der TButton sehr sehr zuviel andere Styles. Also weder im SourceCode steht igendwo etwas (kein "sizegripstyle" zu finden ... hätte fast vermutet die Komponenten "wissen" es jeweils selbst) noch im Style selbst kann ich etwas dafür finden. |
AW: FMX-Styles : StyleLookup zu Controls zuordnen?
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 |
AW: FMX-Styles : StyleLookup zu Controls zuordnen?
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 :stupid: 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. |
AW: FMX-Styles : StyleLookup zu Controls zuordnen?
Zitat:
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:
Die macht eigentlich nichts anderes als:function TStyledControl.GenerateStyleName(const AClassName: string): string; // 6 Zeilen Code - 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 :stupid:) Hier kommt also das "buttonstyle", "labelstyle" usw her... Es gibt dann noch diese zwei ein-zeiler/helper funktionen:
Delphi-Quellcode:
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. ;)
function TStyledControl.GetDefaultStyleLookupName: string; // Eine Zeile
function TStyledControl.GetParentClassStyleLookupName: string; // Eine Zeile
Code:
Findet bei mir 14 weitere Ergebnisse...
PS ...\embarcadero\studio\23.0\source\fmx> Select-String -Path "./*.pas" -Pattern "GetParentClassStyleLookupName"
Edit: Hab bisschen weiter gestöbert und ich denke hier ist es definiert: (\embarcadero\studio\23.0\source\Property Editors\FmxStyleLookup.pas)
Bin gerade zu müde den Code zu extrahieren / selbst auszuführen / zu debuggen, aber das sollte es sein. :P Edit: Formatierung |
AW: FMX-Styles : StyleLookup zu Controls zuordnen?
Hatte vorgestern angefangen nach dem einen Sonderfall zu suchen und hab ihn sogar gefunden (grade gesehen dass er gefunden wurde)
Delphi-Quellcode:
TListBoxItem = class(TTextControl, IGlyph)
function GetDefaultStyleLookupName: string; override; function DoGetDefaultStyleLookupName(const Defaults: TListBoxItemStyleDefaults): string; virtual; function TListBoxSeparatorItem.GetDefaultGroupHeaderStyle: string; begin if ListBox <> nil then case ListBox.GroupingKind of TListGroupingKind.Plain: Result := 'listboxplainheader'; // do not localize TListGroupingKind.Grouped: Result := 'listboxgroupheader'; // do not localize end; end; |
AW: FMX-Styles : StyleLookup zu Controls zuordnen?
Liste der Anhänge anzeigen (Anzahl: 1)
Da ja solche Fragen "Woher weiß eine FMX-Komponente in welchem Style sie sich zu zeichnen hat?" immer wieder mal auftauchen, in der Anlage ein kleiner Beitrag zur Klärung dieser Frage (4-Seitige PDF). Der Text wurde zum Zeitpunkt von Delphi 10.2 erstellt, aber allzuviel dürfte sich da nicht geändert haben.
Evtl. hilft es ja beim Verständnis, wie man bei eigenen Komponenten den Style entsprechend setzt. |
AW: FMX-Styles : StyleLookup zu Controls zuordnen?
Zitat:
Naja, wenn du mit grep o.ä. die FMX lib mit dem Kommentar durchsuchst scheinen noch mehr solcher Fälle vorzukommen... Weiss jetzt nicht genau was du vorhast und wie weit du die Styles <-> Komponentenzuweisung automatisieren willst. Du siehst selbst, Emba macht das alle von Hand und scheint selbst Probleme damit zu haben Ihre Komponenten in Ihrem System richtig zu konfigurieren und aktuell zu halten :lol: Da im TStyleBook export auch nicht mehr als der "StyleName" bei Custom Styles steht hat die IDE auch nicht einfach so genaues Wissen darüber welche custom style nun wirklich für welche Komponenten gedacht sind. Mein Vorschlag wäre eigentlich gewesen semantisch in den Style Controls im TStyleBook zu suchen welche Komponente "so genau wie mölich" zur Definition bzw Regeln der Komponente passen und Sie dort anzeigt, ist auch nicht wirklich brauchbar, denn du könntest ja ein Button auch einfach nur mit einer 'text' Komponente definieren, da weiss man schon wieder nicht genau/automatisch in welche Komponente es wirklich reingehört (button oder label oder einer der ganz vielen anderen bestimmmt...) Also wenn man dann in die einzelnen Controls z.B. ein Button rein geht und schaut dass selbst die relevanten/interaktiven StyleName's alle hardgecoded (z.B. 'text' für Button oder Label) sind und es nicht irgendwo eine zentrale Stelle gibt bei der diese registriert und mit dem Klassentyp verknüft werden oder sonst irgendetwas... Versteh ich warum es in der IDE nicht so macht wie es sollte: Da fehlt ganz einfach die richtige Struktur und Organisation dafür... |
AW: FMX-Styles : StyleLookup zu Controls zuordnen?
Liste der Anhänge anzeigen (Anzahl: 2)
In meinem Fall hätte ich da grade eine kleine App, welche eine Vorschau der Styles hat,
und da würde ich gern, optional zu einem Style diesen Style in seiner natürlichen Umgebung anzeigen, also innerhalb der entsprechenden Komponente. Den "Style" direkt anzuzeigen, so als wäre er selbst die Komponente geht oft, aber in real sieht es dann doch öfters etwas bis ganz anders aus. Idee: Mal sehn wie es läuft, wenn ich bei Programmstart via RTTI alle Klassen/Komponenten in der EXE nach FMX-Komponenten durchsuche und Diese dann jeweils frage, welches ihre Styles sind, bzw. was ihr Standardstyle wäre. Dann könnte ich auch automatisiert auflisten/markieren, welcher dort dann wo etwas fehlt. |
AW: FMX-Styles : StyleLookup zu Controls zuordnen?
Zitat:
Ist wohl eine Markierung für deren Übersetzungstool, dass diese Strings nicht angefasst werden sollen. Es sind ja praktisch Eigennamen/IDs. |
AW: FMX-Styles : StyleLookup zu Controls zuordnen?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Noch schlimmer ist es mit Custom Controls von Drittanbietern... Zitat:
Zitat:
Die exe crasht leider (ohne Fehlermeldung oder Eintrag im Event-Viewer :roll:) aber hab's mal selbst kompilliert und ein paar Teststyles reingeladen. Man sieht sofort welche man noch nicht erstellt hat. :lol: (oder ich noch erstellen sollte :stupid:) Wäre definitiv nützlich wenn man auch die custom styles testen könnte, aber ich glaub ehrlich gesagt das automatische zuordnen ist aktuell nicht so toll umsetzbar (technisch gesehen), bis auf den standard style "componentstyle" und so wies Emba macht, einfach stumpf alles mit "component" im stylenamen aufzulisten. Ich mache das sowieso eigentlich immer so das ich den custom styles den Namen der Komponente mitgebe, also für mich klappt das eigentlich. |
| Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 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