100分:如何关闭窗体(100分)

E

emoth

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟我在编写一个系统栏程序时,在form的close事件中将canclose总是设为false,意即当按<br>关闭窗体时,默认为最小化,只有通过菜单中的退出才能真正关闭窗体。但是这样一来,当<br>我在“开始”菜单中使用关闭或重启系统时,由于我程序的存在,系统总是不能关闭或重启,<br>然后就返回到了桌面。我知道要拦截windows的关闭消息,只是不知道具体应该怎么做,请教<br>各位高手,如何解决这个问题呢。
 
使用托盘控件吧,设置一下属性就可以了,<br>如果要写还是比较麻烦些,不过也只是写三四个事件,网上很多,搜索一下
 
不会吧,我的意思是:如果点击标题栏的关闭按钮,我的程序最小化。但是这样一来,当其<br>它外部程序要求windows重启时,由于我的程序不允许关闭窗体(只能通过菜单中的“关闭”)<br>因此windows总是不能关闭或重启,非得先关闭我的程序后才能重启或关闭windows。
 
关闭 Windows:<br>控制 Windows 的开关:如关闭 Windows 、重新启动 Windows 等。<br>ExitWindowsEx(UINT uFlags,DWORD dwReserved); 是实现这一功能的API函数。<br>首先定义常数<br>const<br>EWX_FORCE=4; //关闭所有程序并以其他用户身份登录<br>EWX_LOGOFF=0; //重新启动计算机并切换到MS-DOS方式<br>EWX_REBOOT=2; //重新启动计算机<br>EWX_SHUTDOWN=1; //关闭计算机<br>运行时给How赋值,让他等于EWX_SHUTDOWN或其他,调用以下语句<br>ExitWindowsEx(How,0);<br>
 
你在关闭时没有把它注销掉,,在close事件中应该是form.release,<br>显示时:<br>&nbsp; form:=tform.create(nil)<br>&nbsp; ...<br>&nbsp; ...<br>&nbsp; form.show;<br><br>
 
当外部程序要求重启时,我的程序有一个queryClose事件,在此事件中判断是外部<br>程序要求重启(此时程序允许重启)还是用户选择了标题栏的关闭按钮(此时程序最小化)<br>还是用户选择了菜单中的关闭(此时程序关闭),但是在此事件中,如何象wangsir所说的<br>“运行时给How赋值,让他等于EWX_SHUTDOWN或其他”呢。<br>是不是要先拦截该消息,让某一特定的变量为True,然后在QueryClose事件中如果该变量为<br>True,则关闭程序,否则最小化。<br><br>
 
我找到解决方法了<br><br>//声明拦截WM_QueryEndSession消息的过程<br>procedureWMQueryEndSession(varMsg:TMessage);MessageWM_QueryEndSession;<br><br>//实现<br>procedureTForm1.WMQueryEndSession(varMsg:TMessage);<br>begin<br>&nbsp; Msg.Result:=1;<br>end;<br>
 
收藏之。谢谢!
 
WM_QUIT:<br>一般当调用DestroyWindow时用PostQuitMessage(1)产生
 
private<br>&nbsp; &nbsp;procedure wmexit(var msg:tmessage);message wm_queryendsession;<br>procedure tform1.wmexit(var msg:tmessage);<br>begin<br>msg.Result:=1;<br>application.ProcessMessages;<br>application.Terminate;<br>end;
 
我接受了
 

Similar threads

回复
0
查看
660
不得闲
回复
0
查看
827
不得闲
回复
0
查看
886
不得闲
回复
0
查看
701
不得闲
顶部