倾家荡产求解对象及类引用问题,附详细函数,正常及异常情况(50分)

  • 主题发起人 主题发起人 天空还下着沙
  • 开始时间 开始时间

天空还下着沙

Unregistered / Unconfirmed
GUEST, unregistred user!
倾家荡产求解对象及类引用问题,附详细函数,正常及异常情况
其中FormMainWindow是当前窗口,我做了这个函数,就是点击相应菜单,载入其它窗口到当前窗口的一个面板PanelClient中,不知为什么不行,我放在函数外时,就可以
这个函数的参数完全是照着Application.CreateForm的参数来设置的
function TFormMainWindow.LoadChildWindow(InstanceClass : TcomponentClass;
var Reference) : Boolean;
begin
Application.CreateForm(InstanceClass, Reference);
Reference.Parent := FormMainWindow.PanelClient;
//运行到上面出错了,Reference是个参数,若不在此函数内,这里用的是窗口对象名
Reference.Show;
Result := True;
end;

出错类型:Record, Object or Class type required
为什么我在外面用实际对象名操作时就可以,放在这个函数里就不行了呢?
Application.CreateForm(TForm1, Form1);
Form1.Parent := FormMainWindow.PanelClient;
Form1.Show;
以上完全可以
如下方法调用这个函数就不行了
LoadChildWindow(TForm1, Form1);
//就不行啦

不胜感激
 
把函数改一下下,还有条编译错误:-(
procedure TFormMainWindow.LoadChildWindow(InstanceClass : TcomponentClass;
var Reference;
OpenWindowID : integer;
LoadingString, LoadOverString : string);
var
Instance: TComponent;
FMainForm: TForm;
begin
Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance;
try
Instance.Create(Self);
except
TComponent(Reference) := nil;
raise;
end;
if (FMainForm = nil) and (Instance is TForm) then
begin
TForm(Instance).HandleNeeded;
FMainForm := TForm(Instance);
end;

//FormMainWindow.MainStatusBar.Panels.Items[0].Text := LoadingString;
//FormMainWindow.MainStatusBar.Refresh;
//FormMainWindow.FreeChildWindow();
//Application.CreateForm(InstanceClass, Reference);
FMainForm.Parent := FormMainWindow.PanelClient;
FMainForm.Show;
//FormMainWindow.OpenWindowID := OpenWindowID;
//FormMainWindow.MainStatusBar.Panels.Items[0].Text := LoadOverString;
end;


错误:Variable 'FMainForm' might not have been initialized
 
可以定义变量,若和参数名相同就不可以(当然不行)
就我上面说的办法其实就是Application.CreateForm的函数原型。里面的FMainForm是在模块里面定义的

根据编译错误,我加了条 FMainForm := nil;
在FMainForm的这行
if (FMainForm = nil) and (Instance is TForm) then
前面,问题解决了
不知算算不根本解决,还是说只是乱摆平了。因为我实在不能理解这段代码
 
接受答案了.
 
后退
顶部