在使用Delphi对任务栏状态区进行编程时,状态栏中的图标怎样改变,比如一个登陆防火墙的程序,当登陆成功使用图标1,失败使用图标2,NotifyIconData中的hIcon: HICON;怎样使用咯?谢谢!

解决方案 »

  1.   

    我做的一个例子,能实现QQ有信息进来时图标一闪一闪的功能。
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ShellApi,
      StdCtrls, Menus, ExtCtrls;
    const mymsg=wm_user+1;iid=100;type
      TForm1 = class(TForm)
        PopupMenu1: TPopupMenu;
        exit1: TMenuItem;
        Btn_hide: TButton;
        Display1: TMenuItem;
        Timer1: TTimer;
        procedure Btn_hideClick(Sender: TObject);
        procedure exit1Click(Sender: TObject);
        procedure Display1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Timer1Timer(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
        procedure FormCreate(Sender: TObject);  private
        { Private declarations }
         procedure MyMessage(var Mouse_msg:tmessage);message MyMsg;
         procedure Min_Size(var Size_msg:TWMSYSCOMMAND);message WM_SYSCOMMAND;
      public
        { Public declarations }
        ShowOrHide:bool;
      end;var
      Form1: TForm1;
      popm:tnotifyicondataa;
    implementation{$R *.DFM}
    //最少化
    procedure TForm1.Min_Size(var Size_msg:TWMSYSCOMMAND);
    begin
         inherited;
         if size_msg.CmdType=SC_MINIMIZE then
             Btn_hide.click;
        Size_msg.Result:=0;
    end;procedure TForm1.MyMessage(var Mouse_msg:tmessage);
    var
      mypt:Tpoint;
    begin
       inherited;
       if Mouse_msg.LParam=WM_LBUTTONDBLCLK then //双击左键
           begin
             Form1.Show;
             Application.BringToFront;
           end
       else if Mouse_msg.LParam=wm_rbuttonup then //单击右键
          begin
            GetCursorPos(mypt);
            PopupMenu1.Popup(mypt.x,mypt.y);
          end;
       Mouse_msg.Result:=0;
    end;procedure TForm1.Btn_hideClick(Sender: TObject);
    begin
       popm.cbSize:=sizeof(tnotifyicondataa);
       popm.Wnd:=handle;
       popm.uID:=iid;
       popm.uFlags:=NIF_ICON+NIF_TIP+NIF_MESSAGE;
       popm.uCallbackMessage:=mymsg;
       popm.hIcon:=Application.Icon.Handle;
       popm.szTip:='邮件系统';
       Shell_NotifyIconA(NIM_ADD,@popm);
       Form1.Hide;
       ShowOrHide:=false;
       Timer1.Enabled:=true;end;procedure TForm1.exit1Click(Sender: TObject);
    begin
       Form1.Close;
    end;procedure TForm1.Display1Click(Sender: TObject);
    begin
      Form1.Show;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
         Shell_NotifyIconA(NIM_DELETE,@popm);
         Application.Terminate;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if ShowOrHide then
         begin
            popm.hIcon:=Application.Icon.Handle;
            Shell_NotifyIconA(NIM_MODIFY,@popm);
         end
      else
         begin
            popm.hIcon:=0;
            Shell_NotifyIconA(NIM_MODIFY,@popm);
         end;
     ShowOrHide:= not ShowOrHide;
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
        Timer1.Enabled:=false;
    end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      if MessageDlg('真的要退出邮件系统吗?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
         CanClose:=true
      else
         CanClose:=false;end;procedure TForm1.FormCreate(Sender: TObject);
    var
      errNO:integer;
      hMutex:HWND;
    begin
       hMutex:=CreateMutex(nil,False,Pchar(application.Title));
       ErrNo:=GetLastError;
       if errNO =error_already_exists then
          begin
            Application.MessageBox('邮件系统已经运行了。','错误',MB_ICONINFORMATION);
            Application.Terminate;
          end;
    end;end.
      

  2.   

    //  Shell_NotifyIconA(NIM_MODIFY,@popm);可以改变图标
    if ShowOrHide then
         begin
            popm.hIcon:=Application.Icon.Handle;
            Shell_NotifyIconA(NIM_MODIFY,@popm);
         end
      else
         begin
            popm.hIcon:=0;
            Shell_NotifyIconA(NIM_MODIFY,@popm);
         end;
     ShowOrHide:= not ShowOrHide;