Etape 3 - Ajouter des ressources de styles en tant que RCDATA (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Création d'un composant FireMonkey (Delphi)


Chaque fichier .style nécessite un fichier correspondant .rc (à ligne unique) spécifique à la plate-forme, avec les noms racine qui correspondent à l'unité composant.

Par exemple, voici un fichier Windows .rc, un fichier Mac .rc, un fichier iOS .rc et un fichier Android .rc :

  • DialogButtons.win.rc
DialogButtonPanelStyle RCDATA "DialogButtonPanel_win.style"
  • DialogButtons.mac.rc
DialogButtonPanelStyle RCDATA "DialogButtonPanel_mac.style"
  • DialogButtons.ios.rc
DialogButtonPanelStyle RCDATA "DialogButtonPanel_ios.style"
  • DialogButtons.android.rc
DialogButtonPanelStyle RCDATA "DialogButtonPanel_android.style"

Ajouter des ressources de styles sous RCDATA

  1. Activez le projet DialogButtonsPackage.bpl en double-cliquant dessus dans le Gestionnaire de projets.
  2. Pour chaque fichier .rc qui doit être créé :
    • Sélectionnez Fichier > Nouveau > Autre > Autres fichiers > Fichier texte et dans le dialogue Nouveau fichier, sélectionnez Fichier de ressources .rc.
    • Ajoutez la ligne décrite ci-dessus, et enregistrez avec le nom de fichier correct.
    Les fichiers .rc devraient être visibles dans l'arborescence du projet sous le noeud Contient. Pour faciliter l'édition, vous pouvez aussi ajouter les fichiers .style au projet, mais ce n'est pas nécessaire pour la compilation ; les fichiers .style sont automatiquement trouvés car ils résident dans le même répertoire que les fichiers .rc.
  3. Dans DialogButtons.pas, pour charger ces styles, déclarez une redéfinition de TStyledControl.GetStyleObject et implémentez-la :
protected
    function GetStyleObject: TControl; override;

implementation

uses
  System.Types, FMX.Controls, FMX.Styles;

{$IFDEF MACOS}
{$R *.mac.res}
{$ENDIF}
{$IFDEF MSWINDOWS}
{$R *.win.res}
{$ENDIF}

function TDialogButtonPanel.GetStyleObject: TFmxObject;
const
  Style = 'MyPanelButtonsStyle';
begin
  if (StyleLookup = '') then
  begin
    Result := TControl(TStyleStreaming.LoadFromResource(HInstance, Style,
      RT_RCDATA));
    Exit;
  end;
  Result := inherited GetStyleObject;
end;
Le .res approprié compilé du fichier .rc est inclus avec des directives de plate-forme conditionnelles. Le nom de l'élément RCDATA, le même dans les deux fichiers, est une constante dans la fonction.

Remarque : Le StyleName du composant (TRectangle) racine dans le fichier .style est par coïncidence le même que le nom RCDATA. Le StyleName est requis si le style est incorporé dans un livre de styles, et le StyleName auto-documente le style. C'est ainsi une bonne habitude de l'inclure. Mais quand il est chargé directement, le StyleName de la racine n'est pas utilisé et est superflu.

La fonction charge le style seulement si le StyleLookup est vide. Elle utilise TStyleManager pour charger le style, avec le handle du module en cours — à la conception, c'est le package .bpl ; à l'exécution, c'est le .exe ou .dll du programme — car toute tentative d'accès à un RCDATA inexistant déclenche une exception. Sinon, le comportement hérité est utilisé pour chercher un style nommé ou le style par défaut par nom de classe.

  1. Avec le code en place, cliquez avec le bouton droit sur le projet package dans le Gestionnaire de projets et sélectionnez Installer. Cela compile le projet de package et ajoute le composant dans la palette d'outils.

Précédent

Suivant

Voir aussi