2009-02-25 4 views
2

Ich entwickle ein Paket von IDE-registrierten Komponenten, von denen die meisten von einer Basis-TFrame-Klasse abgeleitet sind. Es gibt auch verschiedene benutzerdefinierte Dialogformulare, die von diesen Komponenten aufgerufen werden und im Paket enthalten sind. Ich arbeite in Delphi 2007.Hinzufügen von Formularen und Frames zu Paketen

Ich merke, dass manchmal Frame-und Formular-Einheiten, die normalerweise eine DFM-Datei zugeordnet haben, nicht immer die DFM-Datei "unter" anzeigen (über die kleine [+] Treeview zugänglich Knotenexpander) unter ihnen. Wenn ich eine bestehende formularbasierte PAS-Datei hinzufüge, zB mit der rechten Maustaste auf das BPL-Projekt (im Projektmanager) -> Hinzufügen, wird die DFM-Datei in der Auflistung nicht angezeigt.

Wenn ich jedoch "Neu hinzufügen" hinzufüge und im Projekt eine neue Formular- oder Rahmeneinheit anlege, wird dies als typisches verschachteltes Zwei-Datei-Element im Projektmanager angezeigt. Dies zeigt sich auch, wenn ich ein vorhandenes Formular von einem anderen Projekt in der Projektgruppe in dieses fragliche BPL-Projekt ziehe.

Scheint, dass dies konsistent sein sollte, und ich bevorzuge beide Dateien, wenn das Gerät ein Rahmen oder eine Form ist.

Zeigt dies an, dass in der Projektdatei etwas falsch ist? Füge ich diesem Paket vorhandene Formulare/Frames falsch hinzu? Wenn ja, wie sollte ich bestehende Formular/Frame-Einheiten hinzufügen, so dass beide Dateien im Projektmanager angezeigt werden?

* UPDATE *

Von Alen Vorschlag unter:

ich Zugabe versucht, den {$ R * .dfm} Direktive zu der Einheit Form, und es hat nicht die DFM-Datei zwingen, sich zu zeigen wenn ich es zu meinem BPL-Paket/-Projekt hinzufüge. Das Hinzufügen von {$ R * .dfm} zur Projektdatei selbst (was ich nicht glaube, was Sie meinten, aber ich dachte, ich würde es versuchen), hat auch nicht funktioniert. Funktioniert diese Technik nur mit EXE-Projekten?

Möglicherweise (wahrscheinlich) im Zusammenhang, versuchen, mit dieser Richtlinie an Orten zu bauen gibt mir diese:

[DCC Error] E2161 Warnung: Doppelte Ressource: Typ 10 (RCDATA), ID TTESTTREEVIEW; Datei E: \ Projekte \ MeineApp \ Komponenten \ TTestTreeViewFrame.dfm Ressource beibehalten; Datei E: \ Projekte \ MyApp \ Components \ TTestTreeViewFrame.dfm Ressource verworfen.

"Keping" und "verwerfen" die gleiche Datei ??


später: Es sieht aus wie diese „doppelte Ressource“ Problem könnte zu this bezogen werden. Nicht sicher, aber in einem Fall geschah beides gleichzeitig.

+0

Ich habe Allen Bauers/Vegans Vorschläge selbst auf Turbo Delphi 2006 versucht, und es funktioniert. Sie müssen {Form #} nach der Zeile im contains-Abschnitt hinzufügen. Nachdem Sie Ihr bpl geschlossen und es erneut geöffnet haben, wird das .dfm im Paket-Manager angezeigt. –

Antwort

6

Vegar ist auf dem richtigen Weg. Damit der Projektmanager den .dfm-Knoten anzeigen kann, muss er wissen, dass ein Formular/Rahmen/Datenmodul der Pas-Datei zugeordnet ist. Es schaut auf den {Form1} Kommentar in der .dpk oder.dpr-Datei für diese Information. Wenn beim Hinzufügen einer Datei zum Projekt die IDE nicht erkennt, dass eine .dfm-Datei zugeordnet ist, stellen Sie sicher, dass die .pas-Datei die Anweisung {$ R * .dfm} enthält. Dadurch sollte ich nicht in einem IFDEF begraben oder anderweitig durch mögliche Syntaxfehler in der Datei verdeckt werden. Die IDE verwendet das Vorhandensein dieser Anweisung, um zu entscheiden, ob sie versuchen soll, die .dfm im Designer zu öffnen.

Die IDE nimmt nicht nur an, dass, wenn es eine Unit1.pas und eine Unit1.dfm gibt, sie wirklich zusammen sein sollen. Beachten Sie, dass Sie eine neue Formulareinheit erstellt haben, die Unit1 heißt. Jetzt hast du einfach nur die Unit1.pas gelöscht und dann einfach eine neue Unit erstellt, die den Namen Unit1.pas erhalten sollte. Es gibt keinen Hinweis auf die alte, veraltete Unit1.dfm auf der Festplatte von diesem neuen, gleichnamigen Unit1.pas. Es wäre seltsam und verwirrend, wenn die IDE diese .dfm einfach blind öffnen würde.

+0

Allen - Schön dich und Nick hier zu sehen. Danke für den Vorschlag und die Klärung. Ich habe es versucht, aber es gab Probleme (siehe Update oben). – Jamo

+0

Stellen Sie sicher, dass in der Einheit nicht bereits ein {$ R * .dfm} vorhanden ist. Von dem Fehler, den Sie haben, scheint das der Fall zu sein. –

+0

, d. H., Sie denken, ich hätte wahrscheinlich die Direktive, sowohl die Einheit des Formulars als auch die Projektdatei? Meinst Du das? – Jamo

2

Wenn Sie einen Blick auf die Projektquelle für das Paket nehmen, werden Sie feststellen, einen Unterschied in der Enthält Schnitt:

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

Unit2 als eine einzige Einheit zeigen und unit1 wird als Einheit zeigen mit einer Form. Wie Sie sehen können, hat unit1 einen {Form1} Kommentar, den unit2 nicht enthält.

Ich weiß nicht, ob es möglich ist, eine vorhandene Einheit hinzuzufügen, so dass dieser Kommentar automatisch generiert wird.

+0

Hilfreich !! Vielen Dank. :) – Jamo

0

Ein weiterer Grund für alle anderen, die nach einer anderen Lösung suchen, ist, wenn Sie pas Datei umbenennen alle Dateien schließen und erneut öffnen. Die vorherige Version wird wieder geöffnet & muss entfernt werden mit zuvor genannten hinzugefügt zu Projekt