delphi可以实现, 用Shell_notify函数。

解决方案 »

  1.   

    这对delphi 来说太简单了,我都作了好几个了,仔细看看帮助,有关Shell_NotifyIcon
    在msdn里有
      

  2.   

    网上这样的空间多的是,随便给你一个URL你去当吧
    这里好像就有
    http://www.nease.net/~vbsoft/files/miy.htm
      

  3.   

    unit un_Notifyicon;interfaceuses  shellapi, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls;const IDC_STATIC       = -1;
          IDC_LOAD         =101;
          IDC_UNLOAD       =102;
          IDC_DEMO         =103;
          IDC_NOTIFY       =104;
          IDC_TIP          =201;
          IDC_ICONFILENAME =202;
          MYWM_NOTIFYICON  =WM_APP +125;
    procedure SetIconStatus(WinHandle,IcnoStatus:Integer;Const DispStr:String;ilStatus:TImageList);      
    procedure Icon_ADD      (hdlg:integer;strin:String;iconname:Ticon);
    procedure Icon_CHANGE   (hdlg:integer;strin:String;iconname:TIcon);
    procedure Icon_DELETE      (hdlg:integer);
    var
          ptnd:pnotifyicondataa;
          Isexisted :boolean;implementationprocedure Icon_ADD (hdlg:integer;strin:String;iconname:TIcon);
    begin
     if not Isexisted then
     try
      new (ptnd);
      ptnd.cbsize:=sizeof(TNOTIFYICONDATAA);
      strPcopy(ptnd.szTip,strin);
      ptnd.uCallbackMessage:=MYWM_NOTIFYICON;
      ptnd.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
      Ptnd.uID:=IDC_NOTIFY;
      Ptnd.hIcon:=iconname.Handle;
      Ptnd.Wnd:=hdlg;
      Shell_notifyIcona(NIM_ADD,ptnd);
      dispose(ptnd);
      isexisted:=true;
      finally
      end;
    end;procedure Icon_CHANGE  (hdlg:integer;strin:String;iconname:TIcon);
    begin
    if Isexisted then
      try
      new (ptnd);
      ptnd.cbsize:=sizeof(TNOTIFYICONDATAA);
      strPcopy(ptnd.szTip,strin);
      ptnd.uCallbackMessage:=MYWM_NOTIFYICON;
      ptnd.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
      Ptnd.uID:=IDC_NOTIFY;
      Ptnd.hIcon:=Iconname.Handle;
      Ptnd.Wnd:=hdlg;
      Shell_notifyIcona(NIM_MODIFY,ptnd);
      dispose(ptnd);
      isexisted:=true;
      finally
      end;
    end;
    procedure Icon_DELETE      (hdlg:integer);
    begin
    if Isexisted then
     try
      new (ptnd);
      ptnd.cbsize:=sizeof(TNOTIFYICONDATAA);
      ptnd.uCallbackMessage:=MYWM_NOTIFYICON;
      ptnd.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
      Ptnd.uID:=IDC_NOTIFY;
      Ptnd.Wnd:=hdlg;
      Shell_notifyIcona(NIM_DELETE,ptnd);
      dispose(ptnd);
      isexisted:=false;
      finally
      end;
    end;procedure SetIconStatus(WinHandle,IcnoStatus:Integer;Const DispStr:String;ilStatus:TImageList);
    Var
      NewIcon:TIcon;
    Begin
      NewIcon:=TIcon.Create;
      ilStatus.GetIcon(IcnoStatus,NewIcon);
      Icon_Change (WinHandle,DispStr,NewIcon);
      NewIcon.Free;
    End;end.
      

  4.   

    WINAPI 的 Shell_NotifyIcon函数
    不过建议你找本有具体例子的书看,否则容易出错,而且不容易明白
      

  5.   

    procedure TrayIcon_Do(Act:Cardinal;IconData:TNotifyIconData);overload;
    function TrayIcon_Do(Act:Cardinal;Handle,ID:integer;Flags:Cardinal;Msg:Cardinal;Icon:HICON;Tip:PChar):TNotifyIconData;overload;
    function TrayIcon_Add(Handle,ID:integer;Flags:Cardinal;Msg:Cardinal;Icon:HICON;Tip:PChar):TNotifyIconData;
    procedure TrayIcon_Modify(IconData:TNotifyIconData);
    procedure TrayIcon_Delete(IconData:TNotifyIconData);///////////////////////////////////////////////////////////
    procedure TrayIcon_Do(Act:Cardinal;IconData:TNotifyIconData);overload;
    begin
      Shell_NotifyIcon(Act,@IconData);
    end;function TrayIcon_Do(Act:Cardinal;Handle,ID:integer;Flags:Cardinal;Msg:Cardinal;Icon:HICON;Tip:PChar):TNotifyIconData;overload;
    var IconData : TNotifyIconData;
    begin
      with IconData do
      begin                  IconData.
        cbSize := SizeOf(IconData);
        Wnd := Handle;
        uID := ID;
        uFlags := Flags;
        uCallBackMessage := Msg;
        hIcon := Icon;
        StrCopy(szTip,Tip);
      end;
      Shell_NotifyIcon(Act,@IconData);
      Result := IconData;
    end;function TrayIcon_Add(Handle,ID:integer;Flags:Cardinal;Msg:Cardinal;Icon:HICON;Tip:PChar):TNotifyIconData;
    begin
      Result := TrayIcon_Do(NIM_ADD,Handle,ID,Flags,Msg,Icon,Tip);
    end;procedure TrayIcon_Modify(IconData:TNotifyIconData);
    begin
      Shell_NotifyIcon(NIM_MODIFY,@IconData);
    end;procedure TrayIcon_Delete(IconData:TNotifyIconData);
    begin
      Shell_NotifyIcon(NIM_DELETE,@IconData);
    end;