Ich habe FireMonkey-Steuerelemente entworfen, aber es gibt ein Problem, mit dem ich echte Probleme hatte, und das ist das Einbetten von Bitmaps in FireMonkey-Stile mit dem FireMonkey-Stil-Designer (und insbesondere nicht mit dem Bitmap-Stil-Designer). Bestimmte gestylte Objekte (z. B. TButtonStyleObject) verfügen über BitmapLink-Eigenschaften, aber ich kann nicht sehen, wie sie in den neuen benutzerdefinierten Stilen funktionieren, die für ein FireMonkey-Steuerelement generiert werden.
Lassen Sie mich versuchen, das Problem so transparent wie möglich zu machen. Ich füge ein StyleBook hinzu und lege seine Resource auf das MetropolisUIGreen.Style im Delphi Style-Verzeichnis (in XE7 befindet es sich in C: \ Benutzer \ Public \ Documents \ Embarcadero \ Studio \ 16.0 \ Styles). Ich öffne dann den FireMonkey Style Designer und suche den Buttonstyle Style, der aus einem TButtonStyleObject und einem TButtonStyleTextObject besteht, die beide zu einem TLayout gehören. Das TButtonStyleObject hat einen SourceLookup-Eigenschaftswert von MetroGreenstyle.png, einem StyleName, der mit einem TImage verknüpft ist, in das das MetropolisUIGreen.png-Bild geladen wurde.
Wenn das TButtonStyleObject (dessen StyleName im Hintergrund ist) ausgewählt ist, untersuche ich die NormalLink-Eigenschaft, bei der es sich um eine Sammlung von TBitmapLinks handelt. Ich verstehe, dass der eine BitmapLink, den ich in NormalLink definiere, Informationen über die Bitmap enthält, die für die Schaltfläche verwendet werden soll, einschließlich der Koordinaten (SourceRect), die einem rechteckigen Bereich der MetroGreenstyle.png-Datei entsprechen.
Meine Annahmen scheinen falsch zu sein, denn wenn ich MetroGreenstyle.png mit einem Grafikprogramm untersuche, ist an diesen Koordinaten nichts Interessantes. Ich habe die BitmapLinks vieler anderer Stile untersucht, und auch dort finde ich, dass die SourceRect-Koordinaten scheinbar keinen sinnvollen Bereich der stylelookup-PNG-Datei definieren.
Ich habe das offensichtlich falsch. Wie definieren die SourceRect-Koordinaten eines BitmapLinks die Bitmap, die FireMonkey beim Rendern eines Steuerelements verwenden soll?
- Edit Ich habe tatsächlich vier Fragen gestellt. Ich habe diese Frage aktualisiert, um nur eine Frage zu enthalten. Ich werde die anderen Fragen in einen anderen Beitrag aufnehmen. -
Ich glaube, es gibt einen Unterschied zwischen der in der .style-Datei eingebetteten Bitmap (eingebettet als Ressource) und der in der Datei (C: \ Benutzer \ Öffentlich \ Dokumente \ Embarcadero \ Studio \ 15.0 \ Styles \ MetropolisUIGreen gespeicherten Datei .png, das ist 519x760).
Das eingebettete Bitmap scheint eine andere Größe zu haben als die externe Datei (Sie können dies überprüfen, indem Sie im Style-Editor den Knoten metrogreenstyle.png auswählen, den Eigenschaftseditor für MultiResBitmap öffnen und die Bildgröße für Scale anzeigen 1.00: 750x850.
Dies erklärt, warum Koordinaten falsch erscheinen. Ich weiß nicht, ob es die externe Datei ist, die veraltet ist oder das Gegenteil.
HTH!
Update: Ich habe es geschafft, die in der .style Datei gespeicherte Bitmap zu extrahieren und ich kann bestätigen, dass die Koordinaten relativ zu dieser Bitmap sind!
Aktualisierung (2): .Style-Dateien und .fmx-Datei sind sehr ähnlich, so dass Sie tun können:
1) öffnen MetropolisUIGreen.Style mit einem Texteditor und lokalisieren Sie die eingebettete Bitmap (Zeile 18), können Sie sehen:
%Vor%2) Erstellen Sie eine neue FMX-Anwendung, fügen Sie ein TImage in das Formular ein und laden Sie eine Bitmap (jedes Bild, das Sie möchten)
3) Kopieren Sie den PNG-Wert aus der .Style-Datei in die XFM-Datei. Achten Sie darauf, auch die Eigenschaften Breite und Höhe zu korrigieren:
%Vor%4) Sie sollten das Bild zur Entwurfszeit sehen können;
5) fügen Sie eine Schaltfläche mit Image1.Bitmap.SaveToFile ('C: \ temp \ new_file.png') hinzu; Führen Sie das Programm aus und speichern Sie die Datei auf Ihrer Festplatte. : -)
Ich möchte Andreas Lösung verifizieren. Das habe ich gemacht.
Alle Farbänderungen wurden sofort in meinem Design reflektiert. Möglicherweise gibt es einen einfacheren Weg, aber ich weiß es nicht. Ich habe das in XE10 Seattle gemacht.
Tags und Links delphi firemonkey firemonkey-style