2009-02-25 13 views
2

私はIDEで登録されたコンポーネントのパッケージを開発していますが、そのほとんどはベースのTFrameクラスから派生しています。また、これらのコンポーネントによって呼び出されるさまざまなカスタムダイアログフォームもパッケージに含まれています。私はDelphi 2007で働いています。パッケージにフォームとフレームを追加する

通常、関連するDFMファイルを持つフレームとフォームユニットが、DFMファイルを常に "下に"表示するとは限らないことに気付いています(小さな[+]ツリービューからアクセス可能ですノードエクスパンダ)。既存のフォームベースのPASファイルを追加する場合(たとえば、BPLプロジェクト(プロジェクトマネージャー内) - >追加を右クリックしても、DFMファイルがリストに表示されません。

[新規追加]を選択して、プロジェクト内に新しいフォームまたはフレーム単位を作成すると、プロジェクトマネージャの標準のネストされた2ファイルアイテムとして表示されます。また、プロジェクトグループ内の別のプロジェクトから既存のフォームをこのBPLプロジェクトにドラッグするとその方法が示されます。

これは一貫しているはずです。ユニットがフレームまたはフォームのときに両方のファイルが表示されることをお勧めします。

これはプロジェクトファイルに何か問題があることを示していますか?既存のフォーム/フレームをこのパッケージに間違って追加していますか?もしそうなら、両方のファイルがProject Managerのリストに表示されるように、既存のフォーム/フレーム単位をどのように追加する必要がありますか?以下アレンの提案から

* UPDATE *

私は、フォームのユニットに{$ R * .DFM}ディレクティブを追加しようとしたし、それが表示されるまでDFMファイルを強制しませんでしたBPLパッケージ/プロジェクトに追加するときに使用します。プロジェクトファイルそのものに{$ R * .dfm}を追加することは意味がありませんでしたが、試してみると思っていましたが、どちらもうまくいきませんでした。この手法はEXEプロジェクトでのみ機能しますか?

おそらく(おそらく)関連、場所でそのディレクティブを構築しようとすると、私はこれを与える:

[DCCのエラー] E2161警告:重複リソース:タイプ10(RCDATA)、ID TTESTTREEVIEW。ファイルE:\ Projects \ MyApp \ Components \ TTestTreeViewFrame.dfmリソースが保持されます。ファイル E:\ Projects \ MyApp \ Components \ TTestTreeViewFrame.dfmリソースが破棄されました。

"Keping"と同じファイルを "破棄"しますか?

その後

:この「重複資源」の問題が thisに関連するかもしれないように見えます。確かではありませんが、少なくとも1つのインスタンスでは両方が同時に発生しました。

+0

私はTurbo Delphi 2006でAllen Bauer/Vegarsの提案を自分で試してみました。 {contains}セクションの行の後に{form#}を追加する必要があります。 bplを閉じてもう一度やり直すと、.dfmがパッケージマネージャーに表示されます。 –

答えて

6

Vegarは正しい軌道にあります。プロジェクトマネージャが.dfmノードを表示するためには、フォーム/フレーム/データモジュールがpasファイルに関連付けられていることを知る必要があります。 .dpkファイルの{Form1}コメントを調べます。この情報のためのdprファイル。プロジェクトにファイルを追加するときにIDEが.dfmが関連付けられていると認識しない場合は、.pasファイルに{$ R * .dfm}疑似命令があることを確認してください。これにより、私はIFDEFに埋め込まれてはならず、そうでなければファイル内の潜在的な構文エラーによって隠されるべきではありません。 IDEは、このディレクティブの存在を使用して、デザイナで.dfmを試して開くかどうかを決定します。

IDEは単なるUnit1.pasとUnit1.dfmがあれば、本当に一緒であるはずだということは当然のことではありません。あなたが新しいフォームユニットを作成し、ユニット1と呼ばれたとします。今度はUnit1.pasだけを削除し、Unit1.pasという名前の新しいユニットを作成しました。この新しい、同じベース名のUnit1.pasからディスクに古い、古い古いUnit1.dfmへの参照はありません。 IDEが盲目的​​にその.dfmを開くのであれば、奇妙で混乱するでしょう。

+0

アレン - お会いできて嬉しいです。提案と説明をお寄せいただきありがとうございます。私はこれを試しましたが、問題に遭遇しました(上記のアップデートを参照)。 – Jamo

+0

最初にユニットに{$ R * .dfm}がないことを確認してください。あなたが得たエラーから、それはそうであるように見えます。 –

+0

つまり、フォームの単位とプロジェクトファイルの両方にその指示があると思っていますか?それはあなたが意味することですか? – Jamo

2

あなたがパッケージのプロジェクトのソースを見てみる場合は、セクションが含まれていますで、あなたは違いを見つける:

contains 
    Unit2 in 'unit2.pas', 
    Unit1 in 'Unit1.pas' {Form1}; 
Unit2のは、単一のユニットとして表示され、ユニット1は、ユニットとして表示されます

フォームで ご覧のとおり、unit1にはunit2がない{Form1}コメントがあります。

このコメントが自動的に生成されるように既存のユニットを追加することが可能かどうかわかりません。

+0

役立つ!ありがとう。 :) – Jamo

0

別の解決策を探している他の理由のもう1つは、pasファイルの名前を変更してすべてのファイルを閉じて再度開くときです。以前のバージョンが再び開きます&は以前にプロジェクトに追加された名前で削除する必要があります

関連する問題