菜鸟问题!!! (禁止程序关闭)(50分)

  • 主题发起人 主题发起人 smhe
  • 开始时间 开始时间
S

smhe

Unregistered / Unconfirmed
GUEST, unregistred user!
不想用户不小心关闭程序, 如ALT-F4, 关闭按钮.<br>但要保留最大化,最小化按钮<br><br>~v~ 我是一只小小鸟
 
在主窗体的onclose事件中写如下代码:<br>procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<br>begin<br>&nbsp; &nbsp;Action := caNone;<br>end
 
主窗体的closequery:<br>procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);<br>begin<br>canclose:=false;<br>end;
 
我如果希望close按钮变成灰色, 保留最大化,最小化按钮<br>而且只能通过自己的button才触发close事件<br>呢???<br><br>~v~<br><br>
 
全局变量:canclose:boolean;<br>procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<br>begin<br>&nbsp; &nbsp;if not canclose then<br>&nbsp; &nbsp; &nbsp;Action := caNone;<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; canclose:=true;<br>&nbsp; form1.Close;<br>end;
 
我如果希望close按钮变成灰色, 保留最大化,最小化按钮<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;****<br>而且只能通过自己的button才触发close事件<br>呢???<br><br>~v~<br><br>
 
我见到别人vc 编的程序里面有的<br>是不是要调api呀?
 
你可以捕捉窗口关闭消息:<br>在你的form的private中定义:<br>&nbsp; procedure WMGetCloseInfo( var Message:TWMCLOSE ); message WM_CLOSE;<br>然后在此过程中判断是否是符合自定义的关闭操作,使用inherited方法就可以<br>正常关闭窗口了。
 
MyMenu = GetSystemMenu(Me.hwnd,0)    <br>'得到系统菜单的句柄,Me.hwnd表示当前窗体的句柄<br>RemoveMenu MyMenu, &amp;HF060, MF_BYCOMMAND <br>'移去“关闭”菜单项,&amp;HF060“关闭”菜单项的命令ID<br><br>一段VB的代码
 
1:<br>使关闭按钮失效 &nbsp;<br>EnableMenuItem(GetSystemMenu(Handle, FALSE), SC_CLOSE,MF_BYCOMMAND or MF_GRAYED<br>2:<br>屏蔽ALT+F4<br>procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<br>begin<br>&nbsp; action:= &nbsp;canone<br>end;<br>或者<br>procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);<br>begin<br>&nbsp; CanClose:=false<br>end;<br>3:<br>private<br>procedure WMCLOSE(var Msg:TMessage);message WM_CLOSE;<br>procedure TForm1.WMCLOSE(var Msg:TMessage);<br>begin<br>if messagedlg('真的要关闭吗?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then<br>postquitmessage(wm_quit) {或用self.close}<br>else<br>application.Minimize;<br>end;<br>
 
同意:张剑波
 
也可以向系统注册热建 alt+f4 使之失效
 
我知道在VC里面可以控制消息的!其实只要当发现应用程序出现WM_QUIT时删掉就可以了!<br>例如在应用程序类里面处理:<br>&nbsp; CWinApp::PreTranslateMessage()就可以了!我想DELPHI中也可以吧1
 
问:我如果希望close按钮变成灰色, 保留最大化,最小化按钮<br><br>答:<br>在窗口的onshow中加入<br>procedure TForm1.FormShow(Sender: TObject);<br>begin<br>&nbsp; EnableMenuItem(GetSystemMenu(Handle, FALSE), SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);<br>end;<br><br>灌一桶,不要给我分数,结束吧。<br>
 
小小鸟被猎了?:)
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<br>begin<br>&nbsp; &nbsp;Action := caNone;<br>end
 
让关闭钮失效什么的,不能防止用ctrl+alt+del来关闭进程.<br>可再屏蔽ctrl+alt+del,方法以前的回答中有.但这会影响系统,带来不便,为解决这个<br>问题,可再写一个程序,后台执行,不在桌面上显示图标,也不在结束任务对话框中出现,<br>(关于这些已答问题中已有),当检测到这个程序关闭后,就自动打开它.
 
同意crystal
 
后退
顶部