Anpassen von FireMonkey-Anwendungen mit Stilen
Nach oben zu FireMonkey-Anwendungsdesign
FireMonkey-Steuerelemente sind Anordnungen einer Hierarchie von Untersteuerelementen sowie von grundlegenden Formen und Pinseln, die mit Effekten ausgestattet sind. Diese Zusammensetzungen sind als Stile definiert, die in einem Stilbuch gespeichert sind. Die einzelnen Elemente eines Stils werden intern Ressourcen genannt; da dieser Begriff aber mehrere andere Bedeutungen hat, wird zur Vermeidung von Verwechslungen der Begriff Stilressource verwendet. Stile stellen eine breite Palette von Anpassungen ohne Erstellung von Unterklassen bereit.
Die im Produkt enthaltenen FireMonkey-Stile befinden sich im Verzeichnis C:\Programme\Embarcadero\RAD Studio\n.n\Redist\styles\Fmx.
Inhaltsverzeichnis |
Standardstile
In FireMonkey hat jede Steuerelementklasse einen fest codierten Standardstil für jede Plattform.
So zeigen Sie die Stildefinitionen im FireMonkey-Stil-Designer an:
- Ziehen Sie im Formular-Designer ein Steuerelement auf das Formular.
- Klicken Sie mit der rechten Maustaste, und wählen Sie Standardstil bearbeiten.
Damit wird eine Kopie des internen fest codierten Stils erstellt. Der Standardstil von FMX.Controls.TPanel ist beispielsweise wie folgt definiert:
- panelstyle: TRectangle
Der Name der Stilressource, die den Stil definiert, lautet "panelstyle". Sie verweist auf ein TRectangle. Das Erscheinungsbild dieses Rechtecks kann im Stil-Designer geändert werden. Jedes TPanel-Steuerelement auf dem Formular wird dann standardmäßig entsprechend Ihren Änderungen dargestellt.
Es gibt aber keine Regel, dass ein TPanel mit einem TRectangle dargestellt werden muss. TRoundRect oder TEllipse wären ebenfalls möglich. (Es wäre zwar sinnlos, aber es könnte sogar ein TCalendar verwendet werden. Das resultierende TPanel-Objekt würde angezeigt werden und oberflächlich wie ein Kalender arbeiten, hätte aber keinen Zugriff auf die Eigenschaften und Ereignisse von TCalendar.)
Sogar einfache Steuerelemente können komplexe Zusammensetzungen sein. Nehmen Sie als Beispiel FMX.Controls.TCheckBox, das ungefähr folgendermaßen aussieht:
- checkboxstyle: TLayout (Das gesamte Steuerelement)
- TLayout (Das Layout für das Kästchen.)
- background: TRectangle (Das Kästchen selbst, das eigentlich eine Zusammensetzung aus dem Folgenden ist:)
- TGlowEffect (Leuchten, wenn das Steuerelement den Fokus hat.)
- TRectangle (Das äußere Rechteck, das das Kästchen bildet.)
- TRectangle (Das innere Rechteck.)
- TColorAnimation (Farbanimation, wenn der Mauszeiger über das Steuerelement geführt wird.)
- TColorAnimation (und wieder zurück.)
- checkmark: TPath (Das Häkchen in dem Kästchen, das als Pfad gezeichnet wird, mit:)
- TColorAnimation (Eigene Farbanimation, wenn das Häkchen ein- oder ausgeblendet wird.)
- background: TRectangle (Das Kästchen selbst, das eigentlich eine Zusammensetzung aus dem Folgenden ist:)
- text: TText (Und wieder auf der obersten Ebene der Text der Beschriftung.)
- TLayout (Das Layout für das Kästchen.)
Der Stil hat einen Namen, damit Sie ihn finden und verwenden können. Zusätzlich haben bestimmte Unterelemente einen Namen, damit sie referenziert werden können. Wird die Eigenschaft IsChecked umgeschaltet, wird die Sichtbarkeit von "checkmark" geändert (durch Animation der Opazität seiner Farbe von gefüllt bis transparent). Wenn Sie den Text von TCheckBox festlegen, wird die Eigenschaft Text des zugrunde liegenden TText-Objekts mit Namen "text" gesetzt.
Ressourcenbenennung und Ressourcenreferenzierung
Zwei Eigenschaften mit ähnlichen Namen bilden die Verknüpfungen zwischen einem Steuerelement, seinem Stil und seinen Unterkomponenten.
- Die Eigenschaft StyleName ist der Name, der einen Stil oder eine Stil-Unterkomponente für andere Elemente identifiziert und von diesen gefunden werden kann.
- Die Eigenschaft StyleLookup eines Steuerelements wird auf den Namen des Stils gesetzt, der übernommen werden soll. Wenn diese Eigenschaft leer ist, wird der Standardstil verwendet.
- Unterkomponenten können durch Aufruf von FindStyleResource mit dem gewünschten Namen gesucht werden.
Ein Steuerelement verfügt über beide Eigenschaften, weil ihm ein Stil zugewiesen werden kann und es aber auch ein Stil (oder ein Teil davon) sein kann. Einfacheren Komponenten, wie Formen, kann kein Stil zugewiesen werden. Sie können nur Stilelemente sein.
Speicherung von Stilressourcen
Eine Sammlung von Stilen für ein Formular kann durch ein TStyleBook-Objekt repräsentiert werden. Bei Bedarf wird beim Öffnen des Stil-Designers automatisch ein Stilbuch erstellt (durch Rechtsklicken auf ein Steuerelement und Auswählen des Kontextmenübefehls Standardstil bearbeiten oder Benutzerdefinierten Stil bearbeiten). Das neu erstellte Objekt wird als Eigenschaft StyleBook des Formulars gesetzt, sodass es sich auf das Formular auswirkt.
Ein Formular kann mehr als ein TStyleBook-Objekt haben. Die Eigenschaft StyleBook kann jeweils ein beliebiges davon referenzieren; oder sie kann auf nil gesetzt werden, was bewirkt, dass das Formular nur den fest codierten Standardstil verwendet.
Der Stil-Designer bearbeitet jeweils die Stile eines einzelnen TStyleBook-Objekts. Durch Doppelklicken auf ein TStyleBook-Objekt auf einem Formular wird der Stil-Designer mit diesen Stilen geöffnet. Der Stil-Designer kann das TStyleBook in eine .style-Datei in einem Textformat speichern und solche Dateien laden. Der gesamte Satz der fest codierten Standardstile kann auch in den Stil-Designer geladen werden.
Benutzerdefinierte Stile
Neue Stile können durch Ändern der Standardstile erstellt oder von Grund auf für eine einzelne Komponente neu erstellt werden.
- Klicken Sie zum Ändern eines Standardstils im Formular-Designer auf ein Steuerelement, und wählen Sie Benutzerdefinierten Stil bearbeiten. Der erzeugte Stilname wird vom Namen des Steuerelements abgeleitet, dadurch ersparen Sie sich das Festlegen eines aussagekräftigen Namens. Der erzeugte Name wird der Eigenschaft StyleLookup des Steuerelements zugewiesen, damit sich der Stil auf das Steuerelement auswirkt. Der neue Stil ist eine Kopie des aktuellen Stils des Steuerelements.
- Vollständig neue Stile erstellen Sie durch Ändern einer
.style-Datei und Laden dieser Datei. Sie können hier sogar Komponenten verwenden, die nicht in der Tool-Palette verfügbar sind. Zum Beispiel: Bearbeiten Sie nach dem Speichern des aktuellen Stilsatzes die Datei, und fügen Sie Folgendes vor dem letztenendhinzu:
object TBrushObject StyleName = 'somebrush' end
Verschachtelte Stile
Stile können auf andere, mit Stilen versehene Komponenten verweisen. Wie üblich werden Stile im TStyleBook-Objekt anhand des Namens ihrer obersten Ebene gefunden. Um beispielsweise denselben Verlauf zu verwenden, gehen Sie folgendermaßen vor:
- Speichern Sie im Stil-Designer die vorhandenen Stile in einer
.style-Datei. - Bearbeiten Sie diese Datei mit einem Texteditor, um ein TBrushObject zu erstellen. Verwenden Sie einen geeigneten StyleName.
- Laden Sie die
.style-Datei. - Wählen Sie den neu definierten Stil aus, damit er im Objektinspektor angezeigt wird.
- Öffnen Sie die Eigenschaft Brush:
- Bearbeiten Sie die Eigenschaft Gradient mit dem Pinsel-Designer (wählen Sie im Dropdown-Menü des Eigenschaftswertes Bearbeiten).
- Setzen Sie die Eigenschaft Kind auf
bkGradient.
- Führen Sie für jede Komponente, die den Verlauf verwendet, Folgendes aus (z.B. für die Eigenschaft Fill von TRectangle):
- Setzen Sie die Eigenschaft Kind auf
bkResource. - Öffnen Sie die Eigenschaft Resource (eine TBrushResource):
- Setzen Sie StyleLookup auf den in Schritt 2 festgelegten Namen.
- Setzen Sie die Eigenschaft Kind auf
Suchreihenfolge für Stilressourcen
Ein Steuerelement sucht nach einem Stil anhand der folgenden (näherungsweisen) Suchsequenz und hält bei der ersten Übereinstimmung an:
- Wenn die Eigenschaft StyleBook des Formulars gesetzt ist, wird dieses TStyleBook anhand zweier Namen durchsucht:
- Der Eigenschaft StyleLookup des Steuerelements, sofern gesetzt.
- Ein Standardname, der aus dem Klassennamen des Steuerelements gebildet wird:
- Der erste Buchstabe (das Präfix
'T'im Standardschema zur Klassenbenennung) wird weggelassen. -
'style'wird hinzugefügt.
- Der erste Buchstabe (das Präfix
- Die fest codierten Standardstile werden anhand von drei Namen gesucht:
- Der Eigenschaft StyleLookup des Steuerelements, sofern gesetzt.
- Der Standardname, der aus dem Klassennamen des Steuerelements gebildet wird.
- Ein Standardname, der aus dem Klassennamen des übergeordneten Steuerelements nach demselben Muster gebildet wird.
Zum Beispiel lauten die Standardnamen für TPanel "Panelstyle" und "Controlstyle". Für TCalloutPanel lauten die Standardnamen "CalloutPanelstyle" und "Panelstyle".
Die Namenssuche berücksichtigt die Groß-/Kleinschreibung nicht. Wenn keine Übereinstimmung gefunden wird, hat das Steuerelement keinen Inhalt und ist eigentlich nicht sichtbar. Code, der vom Auffinden von Unterkomponenten abhängt, schlägt fehl. (Dies dürfte nur bei unvollständigen oder inkorrekt zusammengestellten, benutzerdefinierten Steuerelementen vorkommen, weil alle integrierten Steuerelemente über zugehörige fest codierte Stile verfügen. Direkte Nachkommen von integrierten Klassen hätten den Inhalt ihrer Basisklasse; Nachkommen der zweiten Generation wären leer.)
Formularstil
Obwohl TForm kein Steuerelement und keine Unterklasse von TStyledControl ist, kann ihm dennoch ein Stil zugewiesen werden. Die Eigenschaft StyleLookup eines Formulars hat den Standardwert "backgroundstyle". Die Standard-Stilressource mit diesem StyleName ist ein graues TRectangle-Objekt.
Die Eigenschaft Align der Ressource wird beim Laden auf alContents gesetzt, um den Hintergrund des Formulars damit zu füllen. Dies ist das erste Objekt, das gezeichnet wird, vor den anderen untergeordneten Objekten des Formulars.