如何在程序中屏蔽系统工具栏程序按钮将程序最小化(300分)

  • 主题发起人 主题发起人 emonster
  • 开始时间 开始时间
E

emonster

Unregistered / Unconfirmed
GUEST, unregistred user!
当前程序在系统工具栏上是按下状态的,当再点一次的时候系统会将当前程序窗口最小化,<br>如何在程序中阻止最小化?。
 
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;<br>&nbsp; var Handled: Boolean);<br>begin<br>&nbsp; if (Msg.message=WM_SYSCOMMAND) and (Msg.hwnd=Application.Handle) then<br>&nbsp; begin<br>&nbsp; &nbsp; if Msg.wParam=SC_MINIMIZE then<br>&nbsp; &nbsp; &nbsp; Handled:=True;<br>&nbsp; end;<br>end;<br>
 
早试过了,不行啊,试过在这个过程里取消消息过滤,只加一个showmessage('')都无法触发<br><br>
 
procedure TMain.WMSysCommand(var Message: TWMSysCommand);<br>begin<br>&nbsp; Inherited;<br>&nbsp; if Message.CmdType = SC_MINIMIZE<br>&nbsp; &nbsp; then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp;......<br>&nbsp; &nbsp; end; &nbsp; <br>end;<br><br>奇怪了,我在家里这段代码都还能阻止最小化按钮最小化,现在和pihome的代码一样,连最小按钮都无法阻止了。我的环境:XP+D7,家中:XP+D6
 
上面这段代码只处理任务栏上的最小化消息(Msg.hwnd=Application.Handle),要处理Form上最小化按钮,在相应的Form中写上类似下面的代码就可以了:<br>procedure TMain.WMSysCommand(var Msg: TWMSysCommand);<br>begin<br>&nbsp; if Msg.CmdType &lt;&gt; SC_MINIMIZE then<br>&nbsp; &nbsp; inherited;<br>end;<br>
 
问题是我要阻止在系统工具栏上的最小化啊
 
你点系统工具栏上的相应该程序按钮试试,无法触发这段过程
 
没问题,最小化的消息都可以响应到<br>对了,实际我发现(Msg.hwnd=Application.Handle)这一段可以去掉,因为按下Form上最小化按钮发出的WM_SYSCOMMAND不经过应用程序循环队列,不会被Application.OnMessage处理到。。。
 
我安装D6试试,在D7下居然不要其中的代码,加一个showmessage都无法显示
 
pihome的写法是可以的,楼主是怎么写的?你在form上放一个ApplicationEvents控件,然后直接写的onMessage事件(copy pihome的代码即可)。
 
[:(]<br>我这是D7 + 2K<br>不应该啊,应该与Delphi的版本无关的才对。。。<br>这个问题有些莫名其妙了[:(!] 有没有试过新建一个空白的Application只写上面的代码呢?<br>emonster,你还是慢慢调吧[:D]
 
在Form上放一个 TApplicationEvents ,设置它的 onEvents1Minimize 事件,加入以下代码:<br>ShowWindow(Application.Handle, SW_RESTORE);<br><br>OK,以后你的 Form 再也不能最小化了。
 
我也有这种问题。
 
后退
顶部