请各位大虾帮忙!!!如何测试出程序为什么不能退出系统(采用Application.terminate),如何定位错误?

glboy 2005-09-21 10:09:16
这是程序退出系统时执行的全部代码:
if ConfirmMsg('您确定要退出本系统吗?')=True then
begin
// if (Application.MainForm.MDIChildCount > 0) then
// begin
// for i:=Application.MainForm.MDIChildCount-1 downto 0 do
// Application.MainForm.MDIChildren[i].Close;
// end;
// if Assigned(ChildFormList) then ChildFormList.free;//注释:ChildFormList为主程序create时创建的一个Tstringlist对象
Application.Terminate;
//即使我将上面的代码都屏蔽,只执行 Application.Terminate;但系统就是不能退出,而将上面屏蔽的代码释放,则会出现“地址访问冲突”(特别声明:该情况只发生采用智能ABC输入法录入中文信息才出现异常,而采用其他输入法,不管怎么样,程序都是正常退出系统)

end;

-----------------------------------
以上代码写在程序中的MenuItem中一个Item为“退出系统”的事件代码中
另外在“FormCloseQuery”也放置了一样的代码,因为采用的是MDI模式

放置的代码位置是没问题的,关键是在程序中的录入窗体如果录入数据采用的是智能ABC输入法录入中文信息,那么程序就不能退出,只能用任务管理器关闭,而采用其他任何输入法都没问题,我想程序不能退出,肯定是哪个部分有问题,但我前后都仔细检查过,都没发现有造成这样问题的程序代码
(主要怪异的情况在于:关键是在程序中的录入窗体如果录入数据采用的是智能ABC输入法录入中文信息,那么程序就不能退出,只能用任务管理器关闭,而采用其他任何输入法都没问题,)
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
glboy 2005-09-21
  • 打赏
  • 举报
回复
if ConfirmMsg('您确定要退出本系统吗?')=True then
只要将它屏蔽就可以了,郁闷
abc3000 2005-09-21
  • 打赏
  • 举报
回复
哪句抱错?
glboy 2005-09-21
  • 打赏
  • 举报
回复
问题已测出:是由于ConfirmMsg方法造成的

这是ConfirmMsg的函数定义:

function ConfirmMsg(sMeg:string):boolean;//询问对话框
var sTitle,meg:pchar;
begin
getmem(sTitle,64);
getmem(meg,1024);
strPcopy(sTitle,application.title);
strPcopy(meg,smeg);
if MessageBox(application.handle,Meg,sTitle,MB_ICONQUESTION+MB_YESNO)=IDYES then
result:=true
else
result:=false;
FreeMem(stitle);
freemem(meg);
end;
glboy 2005-09-21
  • 打赏
  • 举报
回复
可是怎么检测出是哪段程序代码或变量对象出错呢?
abc3000 2005-09-21
  • 打赏
  • 举报
回复
地址错误时是关不掉的

调试的时候就算点了终止,也会过一段时间报出AV错.
wtg476 2005-09-21
  • 打赏
  • 举报
回复
关注
abc3000 2005-09-21
  • 打赏
  • 举报
回复
我是问在function ConfirmMsg(sMeg:string):boolean;中哪句抱错?

5,390

社区成员

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

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