2

カスタム プロパティ エディタを使用しているため、新しいコンポーネント (TComponent) は DsgnIntf​​ を使用します。問題は、カスタム VCL アプリケーションでコンポーネントを使用する場合です - DSGNINTF.DCU が見つかりません! 解決策の 1 つは、コマンド ライン スイッチをコンパイラに追加することです (それが何かはもう覚えていません) が、私はその解決策が好きではありません。2 番目の解決策は、ユニットの分離です。私はこれを見つけました:

http://edn.embarcadero.com/article/27717

問題は、この記事をよく理解していないことです。設計時と実行時のコードを分離するために、コンポーネント ユニットで正確に何をする必要があるのか​​ わかりません。誰かが最も簡単な例を作って説明してくれませんか? コンポーネントを使用しているときに「dsgnintf.dcuが見つかりません」という問題を回避したいだけです。ありがとうございました。

編集:記事をもう少し調べたところ、2番目のユニットが最初のユニットを登録していることに気付きました。dsgnintf.dcu の問題を回避するには、2 番目のユニットが独自の .pas ファイルにある必要があると思いますか?

4

2 に答える 2

8

通常、パッケージを IDE に登録するための単一のユニットを作成します。たとえば、次のようになります。

unit RegPackage;

interface

uses
  Classes, MyUnit;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyPage', [TMyComponent]);
end;

end.

このユニットを設計専用パッケージに含めます。

package MyPackD;

{$R *.res}
..

requires
  rtl, MyPackR; // your runtime package

contains
  RegPackage in 'RegPackage.pas';

end.

リンクする記事には、プロパティ エディターも含まれています。IDE に関連しないすべてのパッケージ コードは、実行専用パッケージに含める必要があります。

package MyPackR;

{$R *.res}
..

requires
  rtl,
  vcl;

contains
  MyUnit in 'MyUnit.pas';

end.
于 2012-10-12T10:26:16.853 に答える
3

ランタイムコードとデザインタイムコードを別々のパッケージに分割する必要があります。コンポーネントコードのみを含むランタイム専用パッケージを作成します。ランタイム専用パッケージとIDEのDesignIDEパッケージをrequiresリストに指定し、プロパティエディタと登録コードのみを含むデザインタイム専用パッケージを作成します。次に、設計時のみのパッケージをIDEにインストールし、プロジェクトで実行時のみのパッケージを参照できます。DesignIDEパッケージは参照を解決しますDsgnInfが、ランタイム実行可能ファイルにリンクすることは許可されていません。IDE専用です。

于 2012-10-13T00:41:19.337 に答える