用户按下窗口最小化按钮,或者任务栏按钮或者系统的显示桌面按钮时,程序能从任务栏上隐藏,像flashget一样,怎么做

解决方案 »

  1.   

    转贴 你可以参考下:
    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;
      

  2.   

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

  3.   

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

  4.   

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

  5.   

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

  6.   

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

  7.   

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

  8.   

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

  9.   

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

  10.   

    以下是我的测试代码:
    unit Unit1;interfaceuses
      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.
      

  11.   

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

  12.   

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

  13.   

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

  14.   

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