我有2种形式连接Q1_u和clsPlayer,但是一旦我将两者连接起来,就会抛出错误2197
program Q1_p;
uses
Forms,
Q1_u in 'Q1_u.pas' {Form1},
clsPlayer in 'clsPlayer.pas';
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(Q1_u.TForm1, clsPlayer.TclsPlayer);
Application.Run;
End.
答案 0 :(得分:1)
问题在于CreateForm
的第二个参数应该是一个可以容纳TForm
后代对象的变量,而不是TForm
类(如您所提供的)。每次对CreateForm
的调用都会创建一个应用程序的自动创建表单:第一个参数指定表单类,第二个参数指定将保存对创建实例的引用的变量。因此,如果您有两个自动生成的表单,则需要两个CreateForm
调用。
不过,您不应该手动编辑dpr
文件,至少在这种情况下,不要这样做。 IDE为您执行此操作。
示例:
MyMainForm
,将其颜色设置为clSkyBlue
。MySecondForm
,并将其颜色设置为clMoneyGreen
。 IDE将使新表格自动生成。因此,它将在您的dpr
文件中添加新行。Unit2.pas
)选择单位。将TButton
拖放到您的主窗体上,将其Caption
设置为Show second form
并在其OnClick
处理程序中写入以下内容:
procedure TMyMainForm.Button1Click(Sender: TObject);
begin
MySecondForm.Show;
end;
如果查看项目源代码(dpr
文件),您会发现IDE确实为您编写了代码:
program Project1;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {MyMainForm},
Unit2 in 'Unit2.pas' {MySecondForm};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMyMainForm, MyMainForm);
Application.CreateForm(TMySecondForm, MySecondForm);
Application.Run;
end.
但是,请注意,在很多(大多数情况下)情况下,您根本不需要自动生成的表单,但这是另一回事了。