重载了析构函数的非主窗口退出应用程序时发生的一个奇怪的问题(20分)

  • 主题发起人 主题发起人 yangmingnian
  • 开始时间 开始时间
Y

yangmingnian

Unregistered / Unconfirmed
GUEST, unregistred user!
在重载了析构函数的非主窗口frmTestInfo(不是Auto-Create)中放置一退出按钮,用来退出应用程序,源代码如下:
procedure TfrmTestInfo.btnQuitClick(Sender: TObject);
begin
frmTestInfo.Free
// 去掉这一句后析构函数将不再发生
Application.Terminate;
end;
destructor TfrmTestInfo.Destroy;
begin
ShowWindow(FindWindow('Shell_TrayWnd', nil), SW_HIDE)
// 隐藏任务栏
// showmessage('haha')
// 当 frmTestInfo.Free
存在时,去掉这一句将发生错误
inherited;
end;
为什么一点击这个按钮就发生如下错误:
"Access violation at address 00403698 in module 'test.exe'. Read of address 00CC8000"
当我去掉 frmTestInfo.Free
这一句后,错误不再出现,但是窗口重载的析构函数又不会发生(及任务栏不会隐藏),这可不是我希望的结果。
而当析构函数中调用了showmessage函数时,问题又不再出现。
请问这是怎么回事,我要如何解决这个问题。
对不起,本人分数很少,只能给这么点分了,望个位高手指点一二。
 
大家是不是嫌我的分太少啊 :(
有没有人能帮帮我啊,在此先谢过了!!!!
 
procedure TfrmTestInfo.btnQuitClick(Sender: TObject);
begin
Self.Release
//改成这样
Application.Terminate;
end;

destructor TfrmTestInfo.Destroy;
begin
ShowWindow(FindWindow('Shell_TrayWnd', nil), SW_HIDE)

inherited;
end;
 
果然是的,谢谢Pipi.
不过顺便问一下,之前为什么会有错误,而改了以后就不会有呢?
还有就是,为什么加上 showmessage('haha')
后,即使是有 frmTestInfo.Free
这一句,也不会出错呢?
好像问题是多了一点,:) 不过还是希望赐教!
 
还在TfrmTestInfo的方法中不能free自己,否则自己都没了,方法执行完之后就出错
Release是发一个消息,在退出form方法之后free自己
 
明白了,谢谢!
 
后退
顶部