CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  语言基础/算法/系统设计

简单问题,比较急!!

楼主yinweixian(blackyin)2005-04-04 12:53:58 在 Delphi / 语言基础/算法/系统设计 提问

怎样实现在按下最小化按钮的时候程序不是显示在任务拦上,而是象QQ那样显示在时钟那边的一拦上。  
  然后再点击的时候会出现菜单象退出、还原什么的。 问题点数:20、回复次数:6Top

1 楼ppact(天下有雪)回复于 2005-04-04 13:05:28 得分 0

建议你去搜索一下,系统托盘程序。  
  其中创建,修改,删除系统托盘图标只需要调用windows的api函数   Shell_NotifyIcon即可!Top

2 楼stgsd()回复于 2005-04-04 13:06:33 得分 0

shellTop

3 楼SeaWave(NoSound)回复于 2005-04-04 13:07:40 得分 0

用Shell_NotifyIcon()这个API  
  或者自己去找现成的控件Top

4 楼yinweixian(blackyin)回复于 2005-04-05 08:50:41 得分 0

能不能详细点?没怎么明白,最好给个例子看看呢!Top

5 楼venge()回复于 2005-04-05 09:02:31 得分 20

下面这个是我当年写的,我刚才运行了一下,还可以用,你看看吧  
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   ShellAPI,   StdCtrls,   Menus,   AppEvnts;  
   
  const  
          WM_TrayMessage=WM_User+100;  
  type  
      TForm1   =   class(TForm)  
          CheckBox1:   TCheckBox;  
          PopupMenu1:   TPopupMenu;  
          Hello1:   TMenuItem;  
          World1:   TMenuItem;  
          procedure   CheckBox1Click(Sender:   TObject);  
          procedure   Hello1Click(Sender:   TObject);  
          procedure   World1Click(Sender:   TObject);  
          procedure   FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
          procedure   FormCreate(Sender:   TObject);  
          procedure   FormDestroy(Sender:   TObject);  
      private  
              NID:   TNotifyIconData;  
          {   Private   declarations   }  
      public  
              procedure   WMTrayMessage(var   msg:TMessage);message   WM_TrayMessage;  
              //建立wm_traymessage的映射。  
              //声明是traymessage,只要tray有message,那么就会执行wmtraymessage  
              procedure   wmsyscommand(var   Msg:TWMSysCommand);   message   WM_SYSCOMMAND;  
              //托盘图标的返回消息  
   
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  {   TForm1   }  
   
  procedure   TForm1.WMTrayMessage(var   msg:   TMessage);  
  var  
          p:TPoint;  
  begin  
          if   (Msg.LParam=WM_LBUTTONDBLCLK)   then  
          begin  
                  MessageDlg('您在任务栏图标上按双击左键',   mtInformation,   [mbOK],   0);  
          end;  
          if   msg.LParam=WM_RButtonDown   then  
          begin  
                  GetCursorPos(p);   //取光标位置  
                  PopupMenu1.Popup(p.x,p.y);     //弹出菜单  
          end;  
      if   (msg.LParam=WM_LButtonDown)   and   Form1.Enabled   then  
          begin  
              Form1.Visible:=not   Form1.Visible;  
  //             Shell_NotifyIcon(NIM_DELETE,@NID);  
          end;  
  end;  
   
  procedure   TForm1.CheckBox1Click(Sender:   TObject);  
  begin  
      if   CheckBox1.Checked   then   Shell_NotifyIcon(NIM_ADD,@NID)   else   Shell_NotifyIcon(NIM_DELETE,@NID);  
          {Shell_NotifyIcon是tray区编程函数,它只有两个参数  
            第一个参数可为:nim_add   :向tray区增加一个图标  
                                            nim_delete:删除tray区一个图标  
                                            nim_modify:修改tray区一个图标  
            第二个参数包含的信息可以用于系统对任务tray区的处理  
            }  
  end;  
   
  procedure   TForm1.Hello1Click(Sender:   TObject);  
  begin  
          MessageDlg('Hello!',   mtInformation,   [mbOK],   0);  
  end;  
   
  procedure   TForm1.World1Click(Sender:   TObject);  
  begin  
          MessageDlg('World!',   mtInformation,   [mbOK],   0);  
  end;  
   
  procedure   TForm1.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
  begin  
      CheckBox1.Checked   :=   False;  
  end;  
   
  procedure   TForm1.wmsyscommand(var   Msg:   TWMSysCommand);  
  begin  
      if   (Msg.CmdType=SC_MINIMIZE)   or   (Form1.Enabled=false)   THEN  
          begin  
              Shell_NotifyIcon(NIM_ADD,@NID);  
              Form1.Hide;  
          end  
      else  
          INHERITED;  
          //如果消息是mimimize,就处理消息,否则,让它继续传下去。  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
          NID.cbSize:=SizeOf(TNotifyIconData);  
          NID.hIcon:=Application.Icon.Handle;  
          NID.szTip:=   '欢迎使用任务栏图标';  
          NID.uCallbackMessage:=WM_TrayMessage;  
          NID.uFlags:=NIF_ICON   or   NIF_MESSAGE   or   NIF_TIP;  
          {uflags描述那些项有效  
          nif_icon:hicon有效  
          nif_message:ucallbackmessage有效  
          nif_tip:tip有效}  
          NID.uID:=0;  
  //uID域是程序员定义的一个唯一标识符。如果一个应用程序有多个托盘图标,则每个图标需要有唯一的I   D  
          NID.Wnd:=Handle;{tray区返回消息的对象,这些消息将用户对tray区图标的操作通知给程序}  
  end;  
   
  procedure   TForm1.FormDestroy(Sender:   TObject);  
  begin  
      Shell_NotifyIcon(NIM_DELETE,@NID);  
  end;  
   
  end.Top

6 楼yinweixian(blackyin)回复于 2005-04-05 11:11:52 得分 0

谢谢楼上的帮忙,感激啊!Top

相关问题

  • 简单问题,比较急!!
  • 急,,问题比较简单。。。
  • treeview的一个比较简单的问题,急呀!!
  • 问一个简单的问题,但比较急!
  • 一个比较简单但是很急的问题………求救!!!
  • 简单两个表的数据比较,急救谢谢
  • jsp求解?!(比较简单)
  • 比较简单的问题!!!!
  • 比较简单的问题...
  • 简单的日期比较

关键词

  • shell
  • 消息
  • traymessage
  • nid
  • 图标
  • notifyicon
  • nif
  • wmtraymessage
  • nim
  • tobject

得分解答快速导航

  • 帖主:yinweixian
  • venge

相关链接

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

广告也精彩

反馈

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