2 votes

Un descendant de TStyledPresentationProxy n'a pas été enregistré pour la classe

J'ai un contrôle de grille personnalisé qui hérite de TGrid appelé TFmGrid . Ce contrôle fonctionnait parfaitement dans Rad Studio 10 Seattle Update One. J'ai récemment effectué une mise à niveau vers la version 10.1 Berlin et j'ai commencé à remarquer que ce message d'erreur s'affichait sur ma page d'accueil. TFmGrid à la fois lorsque j'exécute l'application et dans le concepteur :

Un descendant de TStyledPresentationProxy n'a pas été enregistré pour la classe TFmGrid. Peut-être est-il nécessaire d'ajouter le module FMX.Grid.Style à la section des utilisations.

L'image ci-dessous montre comment le message d'erreur s'affiche sur mes contrôles de grille :

enter image description here

J'ai commencé par faire ce que le message suggère, et par ajouter #include <FMX.Grid.Style.hpp> au fichier d'en-tête de mon TFmGrid mais cela ne semble pas avoir eu d'effet.

Donc, en ce qui concerne l'enregistrement d'un descendant de TStyledPresentationProxy Je ne sais pas exactement par où commencer. J'ai trouvé cette documentation sur une méthode qui :

Tente d'enregistrer la classe de proxy de présentation avec le nom spécifié ou la combinaison spécifiée de classe de contrôle et de type de contrôle.

Je suppose donc que je dois utiliser cette méthode ou au moins quelque chose de similaire, mais je ne comprends pas comment je suis censé appeler cette méthode.

Mais cela soulève la question de savoir OÙ dois-je appeler ce code ?

Mon contrôle personnalisé possède une méthode dans son espace de noms appelée Register() qui, je crois, a été généré automatiquement par l'IDE lorsque le contrôle a été créé :

namespace Fmgridu
{
    void __fastcall PACKAGE Register()
    {
        TComponentClass classes[1] = {__classid(TFmGrid)};
        RegisterComponents(L"Kalos FM Controls", classes, 0);
    }
}  

Dois-je appeler quelque chose là-dedans pour enregistrer un descendant de TStyledPresentationProxy ? Quelle est la meilleure façon de procéder ?

5voto

Yaroslav Brovin Points 202

Il suffit de surcharger la méthode virtuelle DefinePresentationName en vous TfmGrid et retourner le nom de la présentation de la grille :

function TfmGrid.DefinePresentationName: string;
begin
  Result := 'Grid-' + GetPresentationSuffix;
end;

Fm enregistre la présentation par un nom de chaîne et utilise le nom de la classe pour cela, donc si vous créez un nouveau composant (basé sur un composant existant) vous changez automatiquement le nom de la classe, donc le système ne peut pas trouver la présentation pour vous. Il y a deux solutions :

  1. Indique que vous allez utiliser la présentation de TGrid (DefinePresentationName)
  2. Enregistrez la présentation existante pour votre classe (regardez la section d'initialisation de FMX.Grid.Style.pas)

P.S. Il y a un an, j'ai écrit un article sur le sujet en commun. eNouvelle approche du développement du contrôle FireMonkey "Contrôle - Modèle - Présentation". Première partie J'espère que cela vous aidera

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X