请问,将程序图标放入托盘后,如何去除任务中的那条东东??(30分)

  • 主题发起人 主题发起人 DELPHI门外汉
  • 开始时间 开始时间
D

DELPHI门外汉

Unregistered / Unconfirmed
GUEST, unregistred user!
请给出代码,并说明一下具体原理,谢谢
 
SHOWWINDOW(HWND,SW_HIDE);
 
ShowWindow(form1.handle,SW_HIDE);
 
showwindow(Application.Handle,sw_hide)去除任务栏上的东东<br>showwindow(form1.Handle,sw_hide)隐藏窗体
 
你们是在开玩笑吗??<br>上面那些代码我试过了,不奏效。<br>再说handle不等于hwnd。<br>[:(!][:(!][:(!]
 
上的代码肯定有效,我也这样用的。
 
showwindow(application.handle,sw_hide);
 
application.showmainform := false; // 写在DPR文件中。
 
仅过一番查找<br>我找到答案了<br>用<br>SetWindowLong (Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW)<br>showwindow()不能去除应用程序在任务条栏上那条东西;<br>不过分还是有的,不过略微少了些
 
我在www.developres.com上上傳了一個控件,有源碼.<br>eMaxTrayIcon下載來看看就知道了.
 
控件我不想用,用了后程序会变肥。
 
简直太开玩笑,还不如看人家控件的源代码呢
 
谁说ShowWindow()不可以隐藏哦?<br>如果你要在应用程序窗体最小化的时候隐藏,那么你要写如下的函数:<br>procedure TForm1.MinimizeForm(Sender:TObject);<br>begin<br>&nbsp; //Hide Application Task Bar<br>&nbsp; ShowWindow(Application.Handle,SW_HIDE); <br>end;<br><br>然后在Form1的构造函数加入下列语句:<br>Application.OnMinimize:=MinimizeForm;<br><br>如果你是要在程序开始运行的时候就要隐藏主窗体和任务栏,加以下语句:<br>在Form1的构造函数中加:<br>PostMessage(Application.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);<br>如果你仅要隐藏任务栏,那就在窗体的构造函数中加下列语句:<br>ShowWindow(Application.Handle,SW_HIDE); <br><br>以上语句肯定是正确的,因为我已经在一个项目中实现了并交与用户使用了,根本没任何<br>问题。<br>如果还不放分,那在E-MAIL中告诉我你的E-MAIL,我给你源代码!<br>我的E-MAIL:heytommy@163.com<br>
 
写了才发现没完整:<br>谁说ShowWindow()不可以隐藏哦?<br>如果你要在应用程序窗体最小化的时候隐藏,那么你要写如下的函数:<br>procedure TForm1.MinimizeForm(Sender:TObject);<br>begin<br>&nbsp; //Hide Application Task Bar<br>&nbsp; ShowWindow(Application.Handle,SW_HIDE); <br>end;<br><br>然后在Form1的构造函数加入下列语句:<br>Application.OnMinimize:=MinimizeForm;<br><br>如果你是要在程序开始运行的时候就要隐藏主窗体和任务栏,在指定了上面的语句的情况下<br>还要加以下语句:<br>在Form1的构造函数中加: <br><br>PostMessage(Application.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);<br><br>如果你仅要隐藏任务栏,那还要在窗体的构造函数中加下列语句:<br><br>ShowWindow(Application.Handle,SW_HIDE); <br><br>而不用发上面的消息了!<br><br>以上语句肯定是正确的,因为我已经在一个项目中实现了并交与用户使用了,根本没任何<br>问题。<br>如果还不放分,那在E-MAIL中告诉我你的E-MAIL,我给你源代码!<br>我的E-MAIL:heytommy@163.com<br>
 
我试了HeyTommy的做法,是可以将主窗体从任务栏上去掉的。但不知HeyTommy有没有遇到<br>过以下情况:我是把主窗体最小化(用了你的方法)到托盘(TRAY)上的,但将主窗体<br>最大化后,发现最小化按钮不起作用了。我控制托盘图标的代码如下:<br>procedure TFrm_data.TrayIconCallBack(var Msg:TMessage);<br>begin<br>&nbsp; case Msg.LParam of<br>&nbsp; &nbsp; WM_LBUTTONDBLCLK: &nbsp;//双击最大化和最小化<br>&nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; Visible:=not Visible;<br>&nbsp; &nbsp; &nbsp; &nbsp; Application.ShowMainForm:=Visible;<br>&nbsp; &nbsp; &nbsp; &nbsp; SetForegroundWindow(Application.Handle);<br>&nbsp; &nbsp; &nbsp; end;<br>&nbsp; end;<br>end;<br>如果将最小化的代码改成:<br>procedure TFrm_data.MinimizeForm(Sender:TObject);<br>begin<br>&nbsp; //Hide Application Task Bar<br>{ &nbsp;ShowWindow(Application.Handle,SW_HIDE);}<br>&nbsp; Visible:=FALSE;<br>&nbsp; Application.ShowMainForm:=FALSE;<br>end;<br>则最小化时任务栏没有该东东,最大化时有东东(这是我的要求);但先最小化后再最大化<br>发现主窗体上的最小化按钮已经不起作用,原来还要右键一下任务栏上的东东“恢复”一次<br>,才能最小化。请问这是什么原因?(能做到FOXMAIL的效果是我的要求)<br>多多指教,谢谢!<br>
 
hb207:<br>是可以做到这点的,我最近两天做了一个小程序,呵呵,就是FOXMAIL这样的效果,很容易啊,<br>我上面讲的只是如何将主窗体从任务栏里隐藏掉,要恢复的话,很容易,你需要在TRAY里的<br>回调函数中写代码,将窗体恢复就行了!<br>你的回调函数不能是这样的,要象如下的形式,我给你原码:<br>procedure TFrm_data.TrayIconCallBack(var Msg:TMessage);<br>begin<br>&nbsp; case Msg.LParam of<br>&nbsp; &nbsp; WM_LBUTTONDBLCLK: &nbsp; &nbsp; &nbsp; &nbsp;<br>&nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Restore Application Window<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ShowWindow(Application.Handle,SW_RESTORE);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SetForeGroundWindow(Application.Handle);<br>&nbsp; &nbsp; &nbsp; end;<br>&nbsp; end;<br>end;<br>你看出来了吗?你使用了 ShowWindow(Application.Handle,SW_HIDE)后如果要再正常显示,<br>仍然要用这个函数,但需要使用SW_RESTORE参数了,然后还要把应用程序窗体设为前景窗体。<br><br>你知道你写的这个函数的问题了吗?<br>你通过设置Application.ShowMainForm的属性是无法实现的,你不也说了吗?是要用鼠标来<br>“恢复”才行,这就对了塞,当你使用ShowWindow(Application.Handle,SW_HIDE)后,应用<br>程序在任务栏上的属性被设置为HIDE属性了,所以要恢复原来的样子,还要用它来恢复,<br>其实这属于“应用程序工具栏”编程的范畴了,也就是象任务栏这样的,你如果想深入一点,<br>可以尝试一下进行“AppBar”编程,呵呵,,方法是差不多的!<br><br>
 

Similar threads

后退
顶部