我想请问一下如何更改在Delphi 7中MDI子窗体所属的MDI主窗体?,我在写程序时,我先创建了一个Login窗体,再建了一个MDI主窗体和MDI子窗体,但一运行到子窗体上,就出错,说没有找到MDI主窗体,请问个位高手们应怎么样解决?
解决方案 »
- 请教:串口通信各位大大一般是用的哪个控件,在哪里有下载?
- 我想把MainMenu的一个SubMenu和一个PopupMenu同步,如何操作?
- 出现这样的错误提示一般是什么原因,怎么解决呢?
- 如何才能看到只有.dcu的文件里的枚举、函数(参数)的定义??(有.dpr文件)
- bde administrator 如何卸载?
- 如何将数字用文字代替
- 利用api如何修改显示器分辨率?
- 关于listbox使用了lbVirtual风格后的问题(急)
- 使用ADO时如何实现类型TSession.GetAliasDriverName的功能?
- 我做了一个局域网聊天软件,想要的举手...
- 谁能简单的给我介绍一下Delphi?
- 关于数值取值头痛的问题,请大侠指点
FormStyle威fsmdiform
子窗口fsMDIForm
一个程序中可以有2个MDI主窗体吗?每个窗体都有MDIChildCount属性,而MDIChildCount属性是通过GetMDIChildCount函数得到的.看看代码实现:
function TCustomForm.GetMDIChildCount: Integer;
var
I: Integer;
begin
Result := 0;
if (FormStyle = fsMDIForm) and (FClientHandle <> 0) then
for I := 0 to Screen.FormCount - 1 do
if Screen.Forms[I].FormStyle = fsMDIChild then Inc(Result);
end;
它是通过查找全局对象Screen中的Forms数组来确定数量的,而其中的查找参数只有fsMDIChild一个,如果所有的MDI子窗体分成两部分,那他们的FormStyle属性还是fsMDIChild的,同时有两个MDI主窗体,都得不到正确的MDIChildCount,所以我想不可以这样使用的,这样会引起管理混乱的!
因为一个窗体只有一个主窗体MainForm,而MDI子窗体的创建与一般的窗体创建过程不太一样,它是依靠MainForm中的一个窗体(就是我们看到的那个凹下去的客户区窗口)创建的.这是它的创建的关键代码:
WindowHandle := SendMessage(Application.MainForm.ClientHandle,
WM_MDICREATE, 0, Longint(@CreateStruct));
所以你的各个子窗体都是由MainForm.ClientHandle来创建的,只能属于MainForm中的这个框架,即使其他地方你还建立了MDI主窗体.
随便说说,有错误恳请指出!
子窗体的FormStyle := fsMDIChild
试试吧
主窗口fsMDIForm
子窗口fsMDIForm
{
try
{
TFace *Temp=new TFace(Application);//启动窗口
Temp->Show();
Temp->Update();
Application->Initialize();
Application->CreateForm(__classid(TMainForm), &MainForm);
Application->CreateForm(__classid(TSimulator), &Simulator);
Application->CreateForm(__classid(TInputData), &InputData);
Application->CreateForm(__classid(TSet_Line), &Set_Line);
Application->CreateForm(__classid(TOpen), &Open);
Application->CreateForm(__classid(TDataModel), &DataModel);
Application->CreateForm(__classid(TShowConfig), &ShowConfig);
Application->CreateForm(__classid(TCKWHXD), &CKWHXD);
Application->CreateForm(__classid(TXZLJ), &XZLJ);
Application->CreateForm(__classid(TSysLogForm), &SysLogForm);
Application->CreateForm(__classid(TSetCom), &SetCom);
Application->CreateForm(__classid(TSearchDevice), &SearchDevice);
Application->CreateForm(__classid(TPasswordDlg), &PasswordDlg);
Application->CreateForm(__classid(TUser), &User);
Application->CreateForm(__classid(TSuper), &Super);
Application->CreateForm(__classid(TDeviceConfig), &DeviceConfig);
Application->CreateForm(__classid(TFDY_Report), &FDY_Report);
Sleep(2500);
Temp->Close();
for (int i=0;i<4;i++)
{
PasswordDlg->ShowModal(); //登陆窗口
if (PasswordDlg->Checked) //登陆成功
{
memmove(&MainForm->UserData,&PasswordDlg->UserData,sizeof(TUserData));
Application->Run();
break;
}
}
}
catch (Exception &exception)
{
// Application->ShowException(&exception);
}
catch (...)
{
try
{
// throw Exception("");
}
catch (Exception &exception)
{
// Application->ShowException(&exception);
}
}
return 0;
}