小弟进来在开发一个系统时要用到MDI,我把主窗体设为famdiform,子窗体设为fachildform,然后在主窗体中调用Open()来打开子窗体,可是为什么显示Cannot Create Form. No MDI forms are currently active我知道这个问题不是太复杂,可是我已经糊涂了!请大家帮帮我啊!不胜感激!
open()函数如下:
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms[i].ClassType=FormClass then
begin
{检查窗体是否已经打开,如果没有打开,打开它,
如果已经打开,让它正常显示即可}
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(fm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
end;
调用语句如下:OpenForm(T子窗体,子窗体,self);
子窗体与主窗体都没有在Option中自动创建!
open()函数如下:
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms[i].ClassType=FormClass then
begin
{检查窗体是否已经打开,如果没有打开,打开它,
如果已经打开,让它正常显示即可}
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(fm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
end;
调用语句如下:OpenForm(T子窗体,子窗体,self);
子窗体与主窗体都没有在Option中自动创建!
ProductChild:TFrmProduct;//这是MDI子窗体
i:integer;
begin
Perform(WM_SETREDRAW,0,0);
if Application.FindComponent('FrmProduct')=nil then
begin
ProductChild:=TFrmProduct.Create(Application);
ProductChild.Show;
end
else
for i:=0 to self.MDIChildCount-1 do
begin
if self.MDIChildren[i] is TFrmProduct then
ShowWindow(MainForm.MDIChildren[i].Handle, SW_MAXIMIZE);
end;
Perform(WM_SETREDRAW, 1, 0);
RedrawWindow(Handle,nil,0,RDW_FRAME+RDW_INVALIDATE+RDW_ALLCHILDREN+RDW_NOINTERNALPAINT);
end;
把这段代码拷贝下来试试,放Button1Click下面也行啊
Auto-Create中启动登录窗体和主窗体(又称父窗体)
而在mainForm.show()中加入
if loginForm.ShowMoadl=mrOK then
begin
LoginForm.Free;
MainForm.Show;
end
else
begin
Application.ShowMainForm := False;
Application.Terminate;
end;
而在loginForm中button1中加入ModalResult := mrOK;