关于MDI窗体创建时发生EInvalidOperation异常的问题

royalkern 2005-07-30 11:36:46
关于MDI窗体创建时发生EInvalidOperation异常的问题

我自定义了一个函数,函数如下:
function TMainFrm.CreateForm(CForm:TForm):boolean;
var
i:integer;
FormExist:boolean;
begin
FormExist:=false;
if(CForm=Nil) then //判断CFrom是否为空
begin
CreateForm:=false; //函数返回值赋false
exit; //退出本函数
end;
for i:=0 to Screen.FormCount-1 do //判断窗体是否已经建立起来
begin
if Screen.Forms[i].ClassType=CForm.ClassType then //判断窗体存在
FormExist:=true;
end;
if FormExist=false then
begin
CreateForm:=false; //函数返回值赋false
exit; //退出本函数
end;

if CForm.WindowState=wsMinimized then
ShowWindow(CForm.Handle,SW_SHOWNORMAL) //显示窗体
else
ShowWindow(CForm.Handle,SW_SHOWNA); //显示窗体
if not CForm.Visible then
CForm.Visible:=true;
CForm.BringToFront; //当前窗口显示在最前面
CForm.SetFocus;
CreateForm:=true;
end;

下面是调用过程,编译可以成功,但是执行下面application.CreateForm(Typxxfrm,ypxxfrm);时就会报EInvalidOperation异常,请大家指教。

procedure Tmainfrm.N4Click(Sender: TObject);
begin
if CreateForm(ypxxfrm)=false then
application.CreateForm(Typxxfrm,ypxxfrm);
end;


...全文
376 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
winxkm 2005-08-04
  • 打赏
  • 举报
回复
晕!用 if assigned(Frm_name) then来判断窗体是否创建!
royalkern 2005-08-04
  • 打赏
  • 举报
回复
偶然间问题解决了,因为我的登录窗体也是用Application.createForm创建,并在主窗体之前,而Delphi会

把第一个用Application.createForm创建的窗口作为主窗口的,而MDI主窗口必须为整个的主窗口才行。

还是谢谢大家!

hthunter 2005-07-30
  • 打赏
  • 举报
回复
if(CForm=Nil) then
。。。当CForm已经创建过一次并且释放的时候,如果不CForm := nil;赋值的话,CForm<>nil
royalkern 2005-07-30
  • 打赏
  • 举报
回复
各位老大,能否再说详细点,小弟还是不大明白
当主窗体创建时,子窗体都没创建啊,但是一执行application.CreateForm(Typxxfrm,ypxxfrm);就报异常了
luckyboy97 2005-07-30
  • 打赏
  • 举报
回复
每个子窗体关闭的时候都要进行释放,并且保证你创建对象为NIL
GARNETT2183 2005-07-30
  • 打赏
  • 举报
回复
EInvalidOperation is raised when an application attempts an operation that requires a window or widget handle on a component that does not have a parent (The Parent property is Nil in Delphi or NULL in C++). This exception can also occur if a drag-and-drop operation is attempted from a form (for example, when calling the BeginDrag method of a form).

Delphi在线帮助里面的.
内容概要:本文档详细介绍了“南方数码房地一体内外业软件”的操作流程,涵盖从数据准备、外业调查、内外业数据对接,到内业数据处理与成果输出的完整工作链。主要包括调查底图制作(支持DWG、MDB、SHP及倾斜三维模型等多种数据源)、导出外业IDB工程文件、平板端外业调查(宗地与房屋核实、电子签章表确认、照片导出)、内外业数据对接(DB与照片数据导入),以及内业的宗地信息完善、界址属性设置、自然幢生成、房屋面积计算、户属性录入,并最终输出宗地图、房产分户图、各类报表及MDB数据库等成果。; 适合人群:从事农村房地一体权籍调查的测绘、不动产登记及相关地理信息行业的内业处理人员、外业调查员和技术管理人员,需具备基础GIS或CAD操作能力; 使用场景及目标:①指导用户系统完成从原始数据到不动产登记成果的全流程作业;②实现外业调查数据高效采集与内业自动化处理衔接,提升房地一体确权登记工作的标准化与效率; 阅读建议:建议结合实际项目按章节顺序操作,重点关注数据格式转换、IDB工程交互逻辑及成果图输出设置,配合软件界面逐步实践,确保各环节数据完整性与准确性。
内容概要:本文围绕“面向高精度电流控制的PMSM多参数PSO辨识模型研究”,结合Simulink仿真实现,系统探讨了在高性能电机控制背景下,如何利用粒子群优化算法(PSO)对永磁同步电机(PMSM)电流环的关键参数进行多参数协同辨识。研究通过建立PMSM的精确动态数学模型,设计基于PSO的参数辨识框架,实现了对电机电感、电阻、反电动势常数等核心参数的高效在线或离线辨识,有效提升了电流控制的精度与系统鲁棒性。文中详细阐述了PSO算法的实现机制,包括适应度函数构造、参数编码策略与收敛判据,并在Simulink中构建了完整的联合仿真平台,通过大量仿真实验验证了该方法相较于传统辨识技术在准确性、稳定性和适应性方面的显著优势,为高动态性能电机驱动系统的参数获取提供了可靠的技术路径。; 适合人群:自动化、电气工程、控制科学与工程等相关专业的研究生、科研人员及从事高性能电机驱动系统开发的工程师。; 使用场景及目标:①应用于高端制造、新能源汽车、航空航天等领域中对电流控制精度要求极高的PMSM控制系统开发;②作为智能优化算法(如PSO)在电机参数辨识领域应用的典型案例,服务于教学演示与学术研究;③为后续开展自适应控制、智能容错控制及多物理场耦合建模等前沿课题提供坚实的参数辨识基础和技术参考。; 阅读建议:读者应具备扎实的电机控制理论基础(如FOC矢量控制、现代控制理论)以及熟练的MATLAB/Simulink仿真能力,建议在学习过程中结合文中的仿真模型,动手复现PSO参数辨识的完整流程,深入分析算法参数设置对辨识结果的影响,从而全面掌握其工程应用精髓。

5,943

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧