Question

Dans un formulaire Delphi, j'aimerais remplacer un composant visuel par un autre. Exemple: je souhaite remplacer un composant du Panel par un ElPanel provenant d'un package tiers.

Je souhaite que toutes les propriétés et les événements identiques du premier composant soient transférés vers le nouveau, et que tous les composants appartenant au premier composant (par exemple, barres d'outils, mémos, barres d'état, etc.) soient finalement placés sur le nouveau composant exactement où ils étaient sur le premier.

Existe-t-il un moyen plus simple et plus simple de procéder, en ajoutant le nouveau composant à la fiche et en lui transférant méticuleusement chaque propriété, événement et composant?

Était-ce utile?

La solution

Je le fais comme suit:

  1. Faites un clic droit sur le formulaire et choisissez (Afficher en tant que texte).
  2. Appuyez sur Ctrl + F pour rechercher le nom de la classe de composant comme TPanel et le remplacer par TElPanel
  3. Revenir au formulaire (Afficher en tant que formulaire)
  4. Dans la section interface, remplacez TPanel par TElPanel.

Si vous avez de nombreux composants utilisant GExperts, les solutions seront plus réalisables.

Autres conseils

Vous pouvez utiliser GExperts ou le faire à la main.

Pour le faire à la main, ouvrez le fichier .dfm dans le bloc-notes et remplacez tous les noms de classes. (Remplacez TPanel par TElPanel par exemple). Une fois toutes vos modifications effectuées, ouvrez le fichier .pas avec le Bloc-notes et procédez de la même manière.

Assurez-vous d’ajouter les unités requises à votre clause uses.

Ouvrez ensuite le formulaire dans l'EDI et éliminez tout événement incompatible ou problème de propriété inconnue.

Si je me souviens bien, l'excellent plugin gratuit GExperts le fait. Cliquez avec le bouton droit sur votre formulaire et sélectionnez "Remplacer les composants". http://www.gexperts.org

IMHO, le gros inconvénient du composant Remplacer GExpert est qu’il change l’ordre des composants dans le code source. Ce n’est pas très convivial avec VCS. : -)

Si vous avez d'autres composants à l'intérieur d'un conteneur, ce remplacement par GExperts provoquera de mauvaises exceptions et peut-être un comportement inattendu dans l'EDI.
La meilleure solution consiste donc à modifier le fichier .dfm où vous voulez (à l'intérieur ou à l'extérieur de l'EDI) et à remplacer manuellement les types de composants que vous souhaitez modifier. Cela provoquera peut-être aussi des exceptions, mais l'EDI les gérera.
Si vous le faites dans l'EDI, après avoir basculé en mode Création si vous enregistrez le fichier .dfm immédiatement, l'EDI vous demandera de modifier le type des variables liées aux composants que vous avez touchés, afin de vous permettre de le faire.

  

Pour convertir les formats dfm texte et binaire, utilisez l'outil convert.exe du répertoire bin \ Delphi. - Tim Knipe (28 octobre à 4:15)

Vous pouvez également utiliser le menu contextuel du concepteur de formulaire, du moins avec BDS 2006. Il s'agit du dernier élément de menu ("Text-DFM" dans un IDE allemand).

Dans mon projet, je devais convertir quelques dizaines de formulaires d'un ensemble de composants à un autre. J'ai créé un petit script Perl pour convertir les composants et ses propriétés et faire toutes les cartographies nécessaires. Le script est une solution rapide mais très configurable. Il analyse tous les fichiers dfm et pas dans le répertoire de projet et convertit les définitions des composants dfm conformément aux règles que vous devez fournir dans les procédures / événements ObjectBeginFound, PropertyFound, ObjectEndFound.

Les fichiers DFM doivent être en mode texte. Testé sur des fichiers Delphi 5. Je ne sais pas si ce sera compatible avec les nouvelles versions. S'il vous plaît envoyer des messages si vous le découvrez.

UTILISATION: perl.exe cxdfm.pl > logfile.txt

TÉLÉCHARGER LE LIEN http://dl.dropbox.com/u/15887789/cxdfm.pl

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top