2011-09-14 2 views
3

私のDelphi XEアプリケーションは数日で問題なく、何が間違っているのか分かりません。私のプロジェクトのレイアウト:プロジェクトがDelphi XEで開いていると、メインフォームがDataModuleの画像やアクションにアクセスできないのはなぜですか?

  • ビジュアルコントロールがメインフォーム上でこれらのコントロールのための
  • アクションと画像のリストであるが、データモジュール、私は私のプロジェクトを開く

上にある、メインフォームにはありませんたとえそうであっても、コントロールのいずれかに関連付けられたイメージやアクションを持つことができます。コンパイルすると、エラーメッセージ "モジュール 'winMain'が現在のプロジェクトで見つからないモジュール 'modGeneral'にリンクしています。リンクを別のモジュールにリダイレクト/リダイレクトしますか?"

解決方法:プロジェクトを開いた後でメインフォームを閉じ、プロジェクトマネージャでモジュールをダブルクリックして開きます(現在のプロジェクトに存在します)。 - メインフォームを開く:すべてのアクションと画像が正しく表示されるようになりました。

これはDelphiの既知のバグですか?私のプロジェクトの問題?

+1

ソースコード管理を使用する場合は、チェックインを行い、問題が発生する数日前に戻って、まだ問題がないかどうかを確認できます。問題が解消された場合は、プロジェクトで発生したことですが、diffを使用して何が起こったのかを確認することができます。 –

+0

私は、同じ方法(ビジュアルではビジュアルで、モジュールではビジュアルではない)を使用しているプロジェクトを持っており、私はDelphi XEに問題はありません。 私はそれを使用することはありませんが、プロジェクトのコンテキストメニューにクリーンメニュー項目があります...多分それはsthを解決することができます...(前にバックアップをしてください...) – Whiler

+0

@Chris問題は、diffsを見て、これが起こった日私に伝えますが、私は理由を理解できません:デルファイは、それを変更した、または自動ビルド...私は確かにそれを手動で変更していない。あなたの提案をありがとう。 – jonjbar

答えて

7

.dprファイルを確認してください。問題を再現する1つの方法は、その中のuses節を変更することです。 正常に動作します。この例で考えてみましょう:プロジェクトマネージャのアイコンがDFMとモジュールのいつものように見えます

program Project1; 

uses 
    Forms, 
    Unit1 in 'Unit1.pas' {Form1}, 
    Unit2 in 'Unit2.pas' {DataModule2: TDataModule}; 

{$R *.res} 

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    Application.CreateForm(TForm1, Form1); 
    Application.CreateForm(TDataModule2, DataModule2); 
    Application.Run; 
end. 

を:

Project Manager screenshot 1

あなたはコメントを削除するか、またはそれをコメントアウトした場合:ここでは

program Project1; 

uses 
    Forms, 
    Unit1 in 'Unit1.pas' {Form1}, 
    Unit2 in 'Unit2.pas'; // {DataModule2: TDataModule}; 

{$R *.res} 

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    Application.CreateForm(TForm1, Form1); 
    Application.CreateForm(TDataModule2, DataModule2); 
    Application.Run; 
end. 

、アイコンが変更されました:

Project Manager screenshot 2

...あなたが記述したエラーが発生します。 変更を有効にするには、プロジェクトを閉じてから再度開く必要があります。

+0

同じ行に沿って、データモジュールを見るためのフォームの機能を削除すると、同じセクションの問題が発生し、実装セクションの 'uses'節から何かが削除される可能性があります。 –

+0

また、 'Project | Options | Forms'を使用して、メインフォームとデータモジュールの両方が自動作成リストにあることを確認してから、データモジュールを最初に作成するように移動してください。 (データモジュールは1つにすることはできないため、メインフォームには影響しません)。これにより、設計時と実行時の両方でメインフォームの前にデータモジュールが作成され、データモジュール内のアイテムに安全にアクセスできるようになりますあなたのメインフォームのコードで。 –

+0

それはそれだったTOndrej。私は "Src \ m_Cli_General.pas '{item:TDataModule}"プロジェクトで "m_Cli_General"を持っていて、問題を解決した' Src \ m_Cli_General.pas '{modGeneral:TmodGeneral}の "m_Cli_General"を に変更しました。私はこれがどう起こったのか分からない。ありがとうたくさん – jonjbar

0

TOndrejの回答が完全で正しいです。私はちょうどコメントとして投稿する必要があるかもしれない小さな追加がありますが、私はそれが目立つことはないと恐れています。 ユニットの名前を変更してプロジェクトファイルのリファクタリングを行った後で、記述されたエラーに遭遇しました(実際にはinとコメントはすべてusesセクションから削除されました)。私は使用セクションで必要なパターンを返しましたが、まだエラーがあります。

DMMain  in 'DMMain.pas'  {fdmMain : TDataModule}, 
DMIndex in 'DMIndex.pas' {fdmIndex : TDataModule}, 

驚くべきこと本当に事項:私のミスは、私はセクションを使用して、コメントを追加アラインメントしました。アライメントを取り除く

DMMain  in 'DMMain.pas'  {fdmMain: TDataModule}, 
DMIndex in 'DMIndex.pas' {fdmIndex: TDataModule}, 

エラーを修正して、問題なく動作しました。

+0

コンパイラは、パンチされたカード上でFORTRAN(またはCOBOL)とよく似たコードを拒否しているかもしれません;) – mjn

関連する問題