2

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

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

ただし、新規追加し、プロジェクトに新しいフォームまたはフレーム ユニットを作成すると、プロジェクト マネージャーでは典型的なネストされた 2 つのファイル アイテムとして表示されます。また、既存のフォームをプロジェクト グループ内の別のプロジェクトから問題の BPL プロジェクトにドラッグすると、そのようになります。

これは一貫しているように思われ、ユニットがフレームまたはフォームの場合に表示される両方のファイルを好みます。

これは、プロジェクト ファイルに何か問題があることを示していますか? このパッケージに既存のフォーム/フレームを間違って追加していませんか? その場合、既存のフォーム/フレーム ユニットを追加して、両方のファイルが Project Manager のリストに表示されるようにするにはどうすればよいですか?

* アップデート *

以下のアレンの提案から:

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

おそらく(おそらく)関連して、そのディレクティブを使用してビルドしようとすると、次のようになります。

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

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


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

4

3 に答える 3

6

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

IDE は、Unit1.pas と Unit1.dfm が存在する場合、それらが実際に一緒に存在することを当然のことと考えているだけではありません。新しいフォーム ユニットを作成し、それが Unit1 という名前だったとします。ここで、Unit1.pas だけを削除してから、Unit1.pas という名前の新しいユニットを作成しました。この新しい同じベース名の Unit1.pas から、ディスク上の古い古い Unit1.dfm への参照はありません。IDE がその .dfm をやみくもに開くとしたら、奇妙で混乱するでしょう。

于 2009-02-25T23:56:28.300 に答える
2

パッケージのプロジェクト ソースを見ると、Contains セクションに違いがあることがわかります。

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

Unit2 は単一のユニットとして表示され、unit1 はフォーム付きのユニットとして表示されます。ご覧のとおり、unit1 には unit2 にはない {Form1} コメントがあります。

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

于 2009-02-25T23:06:44.770 に答える
0

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

于 2009-07-20T20:38:59.027 に答える