就是TrayIcon 的应用程序
//转载 某高人的
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus,shellapi;
const
    WM_TrayMessage=WM_User+100;
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N11: TMenuItem;
    N21: TMenuItem;
    N22: TMenuItem;
    N23: TMenuItem;
    N24: TMenuItem;
    N31: TMenuItem;
    N32: TMenuItem;
    PopupMenu1: TPopupMenu;
    er1: TMenuItem;
    rer1: TMenuItem;
    rer2: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure N21Click(Sender: TObject);
    procedure rer1Click(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  protected
      procedure AppMinimized(Sender: TObject);
      procedure WMTrayMessage(var msg:TMessage);message WM_TrayMessage;  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
    NID:TNotifyIconData;implementation{$R *.DFM}{ TForm1 }procedure TForm1.AppMinimized(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;
  NID.uID:=0;
  NID.Wnd:=Handle;
  Shell_NotifyIcon(NIM_ADD,@NID);
  ShowWindow(Application.Handle,SW_Hide);end;procedure TForm1.WMTrayMessage(var msg: TMessage);
var
  p:TPoint;
begin
  if msg.LParam=WM_LButtonDown then
    begin
      ShowWindow(Application.Handle,SW_Show);
      Application.Restore;
    end
  else if msg.LParam=WM_RButtonDown then
    begin
      GetCursorPos(p);
      PopupMenu1.Popup(p.x,p.y);
    end;
end;procedure TForm1.FormCreate(Sender: TObject);
//var Owner : HWnd;
begin
//Owner:=GetWindow(Handle,GW_OWNER);
// ShowWindow(Owner,SW_HIDE);Application.OnMinimize:=AppMinimized;
  AppMinimized(nil);end;procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@NID);
end;procedure TForm1.N21Click(Sender: TObject);
begin
ShowWindow(Application.Handle,SW_Show);
  Application.Restore;end;procedure TForm1.rer1Click(Sender: TObject);
begin
close;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
// showmessage('工程一')
end;end. 

解决方案 »

  1.   

    to langhaixin(问题少年) :我的问题不是托盘,而是实现 : 每个子窗体最小化都到任务栏而不是到窗口的左下角????
       
      

  2.   

    记得机械工业出版社的DELPHI开发人员指南上有。
      

  3.   

    //程序最小化,在任务栏显示图标
    procedure TControlE.MinImageClick(Sender: TObject);
    var
    Icon:TIcon;
    iconpath:string; //图标文件路径
    begin
    iconPath:=File_path+'\Cool.ico';
    listfrm.Hide;
    Icon:=TIcon.Create; //Icon变量用来装入任务栏图标
    Icon.LoadFromFile(iconpath);
    new(pTaskBarIcon);
    with pTaskBarIcon^ do //给pTaskBarIcon赋值
    begin
    cbSize:=sizeof(TNotifyIconData);
    Wnd:=ControlE.WindowHandle;
    uID:=0;
    uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage:=WM_USER; //当在任务栏图标上发生鼠标事件时,// 向Windows发送标准消息WM_USERhIcon:=Icon.Handle;StrCopy(szTip,'酷音酷放');end;Shell_NotifyIcon(NIM_ADD,pTaskBarIcon); //给通知域添加图标ControlE.Visible:=false; //使音乐播放器窗口不可见
    // inherited; //将继承Windows处理WM_SYSCOMMAND时的方法end;
    这是我自己做一个多功能的媒体播放器时说使用的方法
    不知道你还需不需要自定义弹出菜单的源代码!