CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

最小化的问题

楼主TranceChow(国家养的猪)2003-12-04 08:26:38 在 Delphi / Windows SDK/API 提问

用户按下窗口最小化按钮,或者任务栏按钮或者系统的显示桌面按钮时,程序能从任务栏上隐藏,像flashget一样,怎么做 问题点数:0、回复次数:20Top

1 楼angle097113(深思不解)回复于 2003-12-04 08:37:41 得分 0

转贴   你可以参考下:  
  const  
      wm_trayicon=wm_user+200;  
  public:  
          procedure   wmsyscommand(var   msg:tmessage);message   wm_syscommand;  
          procedure   wmtrayicon(var   msg:tmessage);message   wm_trayicon;  
  //最小化为系统托盘图标  
  procedure   tform1.wmsyscommand(var   msg:tmessage);  
  var  
      myicon:tNotifyIconData;  
  begin  
      if   msg.WParam=SC_MINIMIZE   then  
          begin  
              with   myicon   do  
                  begin  
                      cbSize   :=sizeof(tnotifyicondata);//纪录需要的内存大小  
                      Wnd   :=form1.handle;     //最小化窗体的句柄  
                      uID   :=0;               //托盘图标序号  
                      uFlags:=NIF_ICON   or   NIF_MESSAGE   or   NIF_TIP;//  
                      uCallbackMessage:=wm_trayicon;  
                      hIcon:=form1.Icon.Handle;  
                      szTip   :='系统托盘图标编程示例';  
                  end;  
              shell_notifyicon(NIM_ADD,@myicon);  
              form1.Visible   :=false;  
          end  
              else  
                  begin  
            //如果是其它的SystemCommand   消息则调用系统缺省处理函数处理之。  
                        DefWindowProc(Form1.Handle,msg.Msg,Msg.WParam,Msg.LParam);  
                  end;  
  end;  
  //最小化为图标的回调  
  procedure   tform1.wmtrayicon(var   msg:tmessage);  
  var  
      myicon:tnotifyicondata;  
  begin  
      if   msg.LParam=wm_lbuttondown   then  
          begin  
              with   myicon   do  
                  begin  
                      cbSize   :=sizeof(tnotifyicondata);  
                      Wnd:=form1.Handle;  
                      uID   :=0;  
                      uFlags   :=NIF_ICON   OR   NIF_MESSAGE   OR   NIF_TIP;  
                      uCallbackMessage   :=wm_trayicon;  
                      hIcon   :=form1.Icon.Handle;  
                      szTip   :='系统托盘图标编程示例';  
                  end;  
              shell_notifyicon(NIM_delete,@myicon);  
              form1.visible   :=true;  
              showmessage('鼠标左键单击返回');  
          end;  
  end;  
  Top

2 楼fcjg(★飘来飘去!★)回复于 2003-12-04 08:45:52 得分 0

upTop

3 楼outer2000(天外流星)回复于 2003-12-04 09:19:28 得分 0

找个现成的TTRAYICON吧,GOOGLE搜索;Top

4 楼linnet2000(缘目求鱼)回复于 2003-12-04 09:21:08 得分 0

upTop

5 楼TranceChow(国家养的猪)回复于 2003-12-04 10:47:28 得分 0

不行啊,按任务栏按钮或者显示桌面程序都还留在任务栏上,我是xp系统Top

6 楼fjyhs(辉辉)回复于 2003-12-04 10:55:26 得分 0

我这有一个控件包rxlib275d6   里面的RxTrayIcon控件非常好用  
  要的话留下email.  
  Top

7 楼TranceChow(国家养的猪)回复于 2003-12-04 19:04:37 得分 0

dragonchow718@hotmail.com,谢谢Top

8 楼jxc163(一寒)回复于 2003-12-05 08:23:48 得分 0

你到www.2ccc.com去,有个控件可以下载.Top

9 楼delphiseabird(沙鸥)回复于 2003-12-05 08:35:01 得分 0

ShowWindow(Application.Handle,SW_HIDE);   //在任务栏上隐藏图标  
          main.Hide;//隐藏窗体;Top

10 楼wlyx2003(网络游侠)回复于 2003-12-05 10:45:23 得分 0

只要在Form的OnCreate事件中加入如下代码即可使程序在工具栏中隐形  
  SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);Top

11 楼wlyx2003(网络游侠)回复于 2003-12-05 10:49:10 得分 0

在工程文件的dpr文件中加入如下代码可使程序在任务管理器中隐形  
  Application.title:='';  
  Application.Initialze;  
  Application.CreateForm(TForm1.Form1);  
  Application.Run;  
  或在Form1的OnCreate中加入如下代码:  
  RegisterServiceProcess(GetCurrentProcessID(),RSP_SIMPLE_SERVICE);Top

12 楼wlyx2003(网络游侠)回复于 2003-12-05 10:59:25 得分 0

上述第一种方法对于98适用,2000或XP无法实现,第二种方法可适用于2000,XP未验证Top

13 楼TranceChow(国家养的猪)回复于 2003-12-05 12:09:42 得分 0

我不是不会在任务栏上隐藏,我是不会在用户按下显示桌面的时候让程序在任务栏上隐藏,我的程序怎么知道用户按下了显示桌面的按钮,拜托各位了!Top

14 楼wlyx2003(网络游侠)回复于 2003-12-07 18:28:51 得分 0

在窗口最小化事件里进行处理。因为当你按显示桌面的时候,会发最小化消息给每个窗口,所以只要响应最小化事件即可。Top

15 楼TranceChow(国家养的猪)回复于 2003-12-10 08:32:20 得分 0

wlyx2003(网络游侠)你试过没有啊,按显示桌面的时候程序根本就没有处在最小化状态,怎么会收到最小化的消息呢Top

16 楼wlyx2003(网络游侠)回复于 2003-12-10 11:20:12 得分 0

以下是我的测试代码:  
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,Classes,   Controls,   Forms,ShellApi;  
   
  const  
      MY_TRAY_ICON=0;  
      WM_TRAYNOTIFY=WM_USER+1;  
   
  type  
      TForm1   =   class(TForm)  
          procedure   FormCreate(Sender:   TObject);  
   
    protected  
          procedure   OnMin(Sender:TObject);  
          procedure   WMTrayNotify(Var   Msg:TMessage);message   WM_TRAYNOTIFY;  
   
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
          NT:TNOTIFYICONDATA;  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  //窗体最小化事件  
  procedure   TForm1.OnMin(Sender:TObject);  
  begin  
      ShowWindow(Application.Handle,SW_HIDE);  
      Application.Minimize;  
  end;  
   
  //响应鼠标在托盘区图标上的活动事件  
  procedure   TForm1.WMTrayNotify(var   Msg:TMessage);  
  begin  
      if   (Msg.LParam=WM_LBUTTONUP)then  
      begin  
          ShowWindow(Application.Handle,SW_SHOW);  
          Application.Restore;  
      end;  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      with   NT   do  
      begin  
          cbsize:=sizeof(TNOTIFYICONDATA);  
          WND:=HANDLE;  
          UID:=MY_TRAY_ICON;  
          uFlags:=NIF_MESSAGE   or   NIF_ICON   or   NIF_TIP;  
          uCallBackMessage:=WM_TRAYNOTIFY;  
          hIcon:=Icon.Handle;  
          szTip:='测试程序'#0;  
      end;  
      Shell_NotifyIcon(NIM_ADD,@NT);  
   
      Application.OnMinimize:=OnMin;  
   
      Application.OnDeactivate:=OnMin;  
  end;  
   
  end.Top

17 楼delphiseabird(沙鸥)回复于 2003-12-15 17:06:22 得分 0

楼上要是不行的话   那就用Hook试试吧Top

18 楼ccyx(打死也不说)回复于 2003-12-15 20:07:13 得分 0

CoolTrayIcon   这个控件可以试一试       还包含BallonTip功能   很好用  
   
   
  我自己跟据C++Builder   6中的TrayIocn写了一个也可以显示BallonTip可觉得没CoolTrayIcon  
   
   
  好用于是就扔掉了         由时间找回来请各位大虾帮我改一下  
  Top

19 楼dqycxf(真爱你的云)回复于 2003-12-15 20:40:14 得分 0

//隐藏任务条  
      ShowWindow(Application.Handle,   SW_HIDE);  
   
  //显示任务条  
   ShowWindow(Application.Handle,   SW_RESTORE);  
  Top

20 楼xiaoqiang123(xiaoqiang)回复于 2003-12-16 14:36:39 得分 0

楼主,我上个星期做了一个,最小化状态栏没有,只有个托盘图标,和FLATGET一样的,你要我就发源码给你,你发消息给我就行了,注明是哪张贴的哦Top

相关问题

  • 如何最小化
  • 关于最小化
  • 最小化问题
  • 窗口最小化
  • 关于最小化。。
  • 自动最小化
  • 最小化问题。
  • delphi 最小化问题
  • 窗口最小化问题。
  • 如何最小化窗口?

关键词

  • 桌面
  • 代码
  • 控件
  • 系统
  • 最小化
  • 任务栏
  • myicon
  • tnotifyicondata
  • 图标
  • 托盘

得分解答快速导航

  • 帖主:TranceChow

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo