窗口在外部创建出错(50分)

  • 主题发起人 主题发起人 puppyboy
  • 开始时间 开始时间
P

puppyboy

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个Form1, Form1有个Public的成员变量:Form2:TForm2
在Form1的FormCreate里面(实际上哪个函数都是一样的)调年调用另一个
pas文件的一个函数
ShowDockForm(TForm2Class, Form2)
这个函数的作用是创建Form2,
但是创建之后,在Form1中使用Form2会出错?
把ShowDockForm的代码copy进来就不会出错,真不知道是为什么

TForm1.FormCreate
begin
ShowDockForm(TForm2, Form2)
ShowMessage(Form2.hint) //这一行回出错
end;

ShowDockForm(FormClass: TForm2Class; Form: TForm2)
begin
Form := FormClass.Create(NIL);
end;
 
ShowMessage(Form2.hint) //这一行回出错
你跟踪一下是不是Form2为nil?
我估计你的Form2没有传回来,你把过程ShowDockForm(FormClass: TForm2Class; Form: TForm2)中的 Form: TForm2 改为var Form: TForm2 传指针试一试。
 
把你的那个函数换成这个看看?怕是这个论坛里提得最多的创建窗体函数了,我也很受益的。
procedure OpenForm(FormClass: TFormClass; var AForm;
AOwner: TComponent = nil);
//根据窗口类名建立窗口,如果窗口存在则只激活它
var
i: integer;
Child: TForm;
begin
for i := 0 to Screen.FormCount - 1 do
if Screen.Forms.ClassType = FormClass then
begin
Child := Screen.Forms;
if Child.WindowState = wsMinimized then
Child.WindowState := wsNormal;
Child.BringToFront;
Child.Setfocus;
TForm(AForm) := Child;
exit;
end;
Child := TForm(FormClass.NewInstance);
TForm(AForm) := Child;
if not assigned(aowner) then aowner := application;
Child.Create(AOwner);
end;
 
ShowDockForm(FormClass: TForm2Class; var Form: TForm2)
 
后退
顶部