2017-01-27 4 views
1

コンポーネントを作成中ですが、実行時にベースタイプを「リソースTMyCompが見つかりません」というエラーが発生しました。私はこれはdfmがないからだと思うが、私はそれについて何をすべきか分からない。コンポーネントのベースとしてTFormを使用しているときにリソースが見つかりませんでした

おかげ

unit Unit65; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; 

type 
    TMyComp = class(TForm); 

    TForm65 = class(TForm) 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 
    private 
    Mc: TMyComp; 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form65: TForm65; 

implementation 

{$R *.dfm} 

procedure TForm65.Button1Click(Sender: TObject); 
begin 
    Mc := TMyComp.Create(Self); 
    Mc.Parent := nil; 
    Mc.ShowModal; 
end; 

end. 
+0

デルファイのカスタムコンテナパックhttps://sourceforge.net/projects/ccpack/をご覧ください。 – dummzeuch

答えて

3

TMyCompには.DFMファイルはありません。 CreateではなくCreateNewコンストラクタを呼び出すことによって.dfmをロードしようとするのを避けることができます。 documentationから

Mc := TMyComp.CreateNew(Self); 

利用CreateNewの代わりに、それを初期化するために 関連する.DFMファイルを使用せずにフォームを作成するために作成します。 TCustomForm子孫がTFormオブジェクトまたはTFormの子孫でない場合は、常にCreateNewを使用してください。

CreateNewは、以前に関連付けられた.DFM ファイルのストリーミングをバイパスします。したがって、フォームにビジュアルコンポーネントが含まれている場合は、 クラスを使用してビジュアルコンポーネントをバインドするには、外部.DFMで ストリームを送信する必要があります。新しく作成されたフォームに外部の.DFMファイルがある場合、 InitInheritedComponentを呼び出すと、 がCreateNewの呼び出しに続きます。 新しいフォームインスタンスの.dfmファイルを作成する必要がある場合は、WriteComponentResFileとReadComponentResFileの呼び出しでCreateNewの呼び出しを囲みます。

関連する問題