使用TForm作为组件的基础时,找不到资源错误

时间:2017-01-27 08:34:06

标签: delphi

我正在编写一个组件,并希望将基类型更改为TForm但是在运行时我收到错误“未找到资源TMyComp”。我想这是因为没有dfm,但我不知道该怎么办。

由于

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.

1 个答案:

答案 0 :(得分:8)

TMyComp没有.dfm文件。您可以通过调用CreateNew构造函数而不是Create来避免尝试加载.dfm。

Mc := TMyComp.CreateNew(Self);

来自documentation

  

使用CreateNew而不是Create来创建表单而不使用   关联.DFM文件来初始化它。如果是,请始终使用CreateNew   TCustomForm后代不是TForm对象或TForm的后代。

     

CreateNew绕过先前关联的.DFM的流式传输   文件。因此,如果表单包含可视组件,则必须   在外部.DFM中流,以将可视组件与其绑定   类。如果新创建的表单有外部.DFM文件,那么您   可以通过调用来跟随对CreateNew的调用   InitInheritedComponent。如果您需要为。创建.dfm文件   新表单实例,通过调用括起对CreateNew的调用   WriteComponentResFile和ReadComponentResFile。