2017-06-28 2 views
0

Dans les versions précédentes de Delphi, mon formulaire personnalisé affichait ses propriétés publiées.Les propriétés publiées n'apparaissent pas dans le concepteur

Cependant, je rencontre un problème avec Delphi 10.2 Tokyo. Plus précisément, je ne vois pas un bon moyen d'appeler la méthode appropriée trouvée dans this post.

Pour résumer, un appel à RegisterCustomModule() est nécessaire, cependant, dans l'unité DesignIntf décrit here, il n'y a pas TCustomModule (il y a TBaseCustomModule et TCustomModuleClass, cependant), aussi le module personnalisé de base hérite de TInterfacedObject, qui TForm ne pas (en utilisant FMX comme mon cadre).

Quelle est la méthode correcte pour enregistrer un formulaire FMX pour afficher les propriétés publiées dans la dernière version de Delphi?

Répondre

2
uses DesignEditors; 

type 
    TMySpecialForm = class(TCustomForm) 
    end; 


RegisterCustomModule(TMySpecialForm, TCustomModule); 

RegisterCustomModule prend 2 paramètres: ComponentBaseClass et CustomModuleClass. La première est votre classe de formulaire personnalisée, qui sera, bien sûr, dérivée de TCustomForm. La seconde est une classe qui sera utilisée par le concepteur. Cette classe doit faire 2 choses: dériver de TBaseCustomModule (en DesignIntf unité) et implémenter l'interface ICustomModule. Jetez un oeil au commentaire dans l'unité DesignEditors, autour de la ligne 502.

La classe TCustomModule vous est fournie si vous n'avez aucun comportement autre que le comportement par défaut à ajouter à votre formulaire personnalisé au moment du design.

Si vous voulez une sorte de comportement personnalisé pour votre formulaire tandis que dans le concepteur, par exemple, un menu contextuel avec différentes commandes de réglage de propriété, vous créez votre propre TCustomModule classe:

uses DesignEditors; 

type 
    TMySpecialFormDesigner = class(TCustomModule, ICustomModule) 
     function GetVerb(Index: Integer): string; override; 
     function GetVerbCount: Integer; override; 
    end; 

RegisterCustomModule(TMySpecialForm, TMySpecialFormDesigner); 
+0

merci Dave, j'ai compris les exigences, mais je ne savais pas que la classe TCustomModule était déclarée dans l'unité DesignEditors. En outre, appréciez l'exemple. – SmeTheWiz