2009-02-25 12 views
2

Je développe un package de composants enregistrés par IDE, dont la plupart sont dérivés d'une classe TFrame de base. Il existe également diverses formes de dialogue personnalisées appelées par ces composants, incluses dans le package. Je travaille dans Delphi 2007.Ajout de formulaires et de cadres aux packages

Je remarque que parfois les unités d'image et de formulaire, qui ont normalement un fichier DFM associé, ne montrent pas toujours le fichier DFM "dessous" (accessible via la petite arborescence [+] nœud expandeur) en dessous d'eux. Si j'ajoute un fichier PAS basé sur un formulaire existant, par exemple, en cliquant avec le bouton droit sur le projet BPL (dans le Gestionnaire de projets) -> Ajouter, il n'affiche pas le fichier DFM dans la liste.

Si je ajoute Nouveau et que vous créez un nouveau formulaire ou une nouvelle unité de cadre dans le projet, il s'affiche en tant qu'élément imbriqué typique à deux fichiers dans le Gestionnaire de projets. Il s'affiche également de cette façon si je fais glisser un formulaire existant d'un autre projet du groupe de projets vers ce projet BPL en question.

Cela semble être cohérent, et je préfère les deux fichiers montrant quand l'unité est un cadre ou un formulaire.

Cela indique-t-il quelque chose de mal dans le fichier de projet? Est-ce que j'ajoute incorrectement des formulaires/cadres existants à ce paquet? Si oui, comment dois-je ajouter des unités de formulaire/cadre existantes pour que les deux fichiers apparaissent dans la liste du gestionnaire de projet?

* MISE À JOUR *

De la suggestion de Alen ci-dessous:

J'ai essayé d'ajouter la directive {$ R * .dfm} à l'unité de la forme, et il n'a pas forcé le fichier DFM à apparaître lors de l'ajout à mon package/projet BPL. Ajouter {$ R * .dfm} au fichier projet lui-même (ce que je ne pense pas être ce que vous vouliez dire, mais je pensais l'essayer) ne fonctionnait pas non plus. Cette technique fonctionne-t-elle uniquement avec les projets EXE?

Peut-être (probablement) lié, en essayant de construire avec cette directive dans les lieux me donne ceci:

[Erreur DCC] E2161 Avertissement: ressource en double: Type 10 (RCDATA), ID TTESTTREEVIEW; Fichier E: \ Projects \ MyApp \ Components \ TTestTreeViewFrame.dfm ressource conservée; fichier La ressource E: \ Projects \ MyApp \ Components \ TTestTreeViewFrame.dfm a été supprimée.

"Keping" et "jeter" le même fichier ??


plus tard: Il semble que cette question « ressource en double » pourrait être liée à this. Pas certain, mais au moins dans un cas les deux se sont produits simultanément.

+0

J'ai essayé moi-même les suggestions Allen Bauers/Vegars sur Turbo Delphi 2006, et cela fonctionne. Vous devez ajouter {Form #} après la ligne dans la section contient. Après avoir fermé votre bpl et l'avoir rouvert, le fichier .dfm apparaît dans le gestionnaire de paquets. –

Répondre

6

Vegar est sur la bonne voie. Pour que le gestionnaire de projet affiche le noeud .dfm, il doit savoir qu'un formulaire/frame/datamodule est associé au fichier pas. Il regarde le commentaire {Form1} dans le fichier .dpk ou.fichier dpr pour cette information. Si, lors de l'ajout d'un fichier au projet, l'EDI ne reconnaît pas l'existence d'un .dfm, assurez-vous que le fichier .pas a la directive {$ R * .dfm} en clair. Par cela, je ne devrais pas être enterré dans un IFDEF ou autrement obscurci par les erreurs de syntaxe potentielles dans le fichier. L'EDI utilise la présence de cette directive pour décider s'il doit ou non essayer d'ouvrir le fichier .dfm dans le concepteur.

L'EDI ne tient pas seulement pour acquis que s'il y a un Unit1.pas et un Unit1.dfm, ils sont supposés être ensemble. Considérez que vous avez créé une nouvelle unité de formulaire et qu'elle s'appelait Unit1. Maintenant vous avez effacé juste le Unit1.pas et juste allé et a créé une nouvelle unité qui s'appellerait Unit1.pas. Il n'y a aucune référence à l'ancien, Unit1.dfm périmé là-bas sur le disque de ce nouveau, Unit1.pas même nom de base. Il serait étrange et déroutant que l'IDE ouvre aveuglément ce fichier .dfm.

+0

Allen - Ravi de vous voir et de Nick ici. Merci pour la suggestion et la clarification. J'ai essayé ceci mais j'ai rencontré des problèmes (voir la mise à jour ci-dessus). – Jamo

+0

Assurez-vous qu'il n'y a pas déjà un {$ R * .dfm} dans l'unité en premier. De l'erreur que vous avez, cela semble être le cas. –

+0

En d'autres termes, pensez-vous que j'aurais probablement cette directive à la fois pour l'unité du formulaire et pour le fichier de projet? C'est ce que tu veux dire? – Jamo

2

Si vous jetez un oeil à la source de projet pour le package, vous trouverez une différence dans la Contains section:

contains 
    Unit2 in 'unit2.pas', 
    Unit1 in 'Unit1.pas' {Form1}; 

Unit2 montrera comme une seule unité, et part1 affichera comme une unité avec un formulaire. Comme vous pouvez le voir, unit1 a un commentaire {Form1} qui manque à unit2.

Je ne sais pas s'il est possible d'ajouter une unité existante pour que ce commentaire soit généré automatiquement.

+0

Utile !! Merci. :) – Jamo

0

Une autre raison pour qui que ce soit qui cherche une autre solution est lorsque vous renommez le fichier pas fermez tous les fichiers et rouvrez. La version précédente va rouvrir & doit être supprimé avec le nom précédemment ajouté au projet