调用API处理相关消息
——这个问题曾有过很多论述的

解决方案 »

  1.   

    SetWindowLong(Application.Handle, GWL_EXSTYLE,WS_EX_TOOLWINDOW);
      

  2.   

    最小化时,让窗口Hide,或者Visible:=False;
    最大化时,设置WindowStyle属性为wsMaxmaized,然后让窗口Show,或者Visible:=True;有空多多交流:OICQ:43579041
      

  3.   

    那是系统托盘程序,我给你一个。
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Menus,ShellAPI{加入API},Mmsystem;Const
      ICON_id = 1; //ICON的ID标志
      MI_ICONEVENT = WM_USER + 1;//自定义ICON事件消息
    type
      TForm1 = class(TForm)
        PopupMenu1: TPopupMenu;
        aaa1: TMenuItem;
        bbb1: TMenuItem;
        ccc1: TMenuItem;
        CDROM1: TMenuItem;
        N1: TMenuItem;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormActivate(Sender: TObject);
        procedure ccc1Click(Sender: TObject);
        procedure aaa1Click(Sender: TObject);
        procedure bbb1Click(Sender: TObject);
        procedure CDROM1Click(Sender: TObject);
        procedure N1Click(Sender: TObject);
      private
        { Private declarations }
        //正常和失效两种情况下图标
        NormalIcon,DisabledIcon:TIcon;
        Status:Boolean;//定义标志是“允许使用”还是“禁止使用”
        Procedure InstallIcon;//声明过程InstallIcon用来在托盘中安装图标
        Procedure ChangeIcon(s:Boolean);//声明过程ChangeIcon用于改变本程序以托盘中的图标
        Procedure UnInstallIcon;//声明过程UnInstallIcon用于卸载托盘中的图标
        //捕捉自定义消息MI_ICONEVENT的过程IconOnClick的声明
        Procedure IconOnClick(var Msg:Tmessage);message MI_ICONEVENT;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.DFM}Procedure TForm1.ChangeIcon(s:Boolean);//过程ChangeIcon用于改变本程序以托盘中的图标
    var
      IconData:TNotifyIconData;
    begin
      IconData.cbSize := SizeOf(IconData);
      IconData.Wnd := Handle;
      IconData.uID := ICON_ID;
      if s=False then //禁止使用
      begin
        IconData.hIcon := DisabledIcon.Handle;
        Status := False;
      end
      else
      begin
        IconData.hIcon := Normalicon.Handle;
        Status := True;
      end;
      IconData.uFlags := NIF_ICON;
      Shell_NotifyIcon(NIM_MODIFY,@IconData);
    end;
    //处理鼠标在托盘中对应的图标上的单击事件
    Procedure TForm1.IconOnClick(var Msg:Tmessage);
    var
      p:TPoint;
    begin
      if ((Msg.lParam=WM_LBUTTONDOWN) and (Status=True)) then
      //如果按下的是鼠标左键,并且允许显示,则显示窗体Form2
        Form2.Show;
      if (Msg.lParam=WM_RBUTTONDOWN) then
      //如果按下的是鼠标右键,则显示弹出菜单
        begin
          GetCursorPos(p);
          PopupMenu1.Popup(p.x,p.y);
        end;
    end;
    //过程InstallIcon用来在托盘中安装图标
    Procedure TForm1.InstallIcon;
    var
      IconData:TNotifyIconData;
    begin
      NormalIcon := TIcon.Create;
      DisabledIcon := TIcon.Create;
      //允许状态下的图标
      NormalIcon.LoadFromFile('Normal.ico');
      //禁止状态下的图标
      DisabledIcon.LoadFromFile('Normal.ico');
      IconData.cbSize := SizeOf(IconData);
      IconData.Wnd := Handle;
      IconData.UID := ICON_ID;
      IconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
      IconData.uCallBackMessage := MI_ICONEVENT;
      IconData.hIcon := NormalIcon.Handle;
      //鼠标悬在托盘中对应的图标上时的提示信息
      IConData.szTip := 'asdfghjkl';
      Shell_NotifyIcon(NIM_ADD,@IconData);
    end;
    //过程UnInstallIcon用于卸载托盘中的图标
    Procedure TForm1.UnInstallIcon;
    var
      Icondata : TNotifyIconData;
    begin
      IconData.cbSize := SizeOf(IconData);
      IconData.Wnd := Handle;
      IconData.uID := ICON_ID;
      Shell_NotifyIcon(NIM_DELETE,@IconData);
    end;
    //在窗体Form1的OnCreate事件处理过程中作初始化工作,安装图标并隐藏主窗体
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Status := True;
      //安装图标
      InstallIcon;
      //改变图标为Normal状态
      ChangeIcon(true);
      //隐藏主窗体
      ShowWindow(Application.Handle,SW_HIDE);
      //在托盘中不显示程序图标
      SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
    end;
    //在窗体Form1的OnClose事件处理过程中作清除工作,卸载图标并释放图标资源
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      UnInstallIcon;
      NormalIcon.Free;
      DisabledIcon.Free;
    end;//在窗体Form1的Onactivate事件处理过程中隐藏窗体
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      Form1.width := 0;
      Form1.Height := 0;
      ShowWindow(Application.Handle,SW_HIDE);
    end;procedure TForm1.ccc1Click(Sender: TObject);
    begin
      mciSendString('set cdaudio door open wait',nil,0,Handle);
    end;procedure TForm1.aaa1Click(Sender: TObject);
    begin
      ExitWindowsEx(EWX_REBOOT or EWX_POWEROFF,0);
    end;procedure TForm1.bbb1Click(Sender: TObject);
    begin
      ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF,0);
    end;procedure TForm1.CDROM1Click(Sender: TObject);
    begin
      mciSendString('set cdaudio door closed wait',nil,0,Handle);
    end;procedure TForm1.N1Click(Sender: TObject);
    begin
      Close;
    end;end.
      

  4.   

    你是做托盘程序呀!
    给多一点分,我告诉你一个地方你去DOWNLOAD一个例子和一个控件,保证好用,因为我们自己写出来的托盘好像占用系统资源比较多,这个好用!!!
    http://www.ms2008.com/delphi/21.htm
    用了之后,如果好的话,记得给我加分呀!!!!!!!!!
      

  5.   

    我给你一段例子
    ”unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Menus,ShellAPI{加入API},Mmsystem;Const
      ICON_id = 1; //ICON的ID标志
      MI_ICONEVENT = WM_USER + 1;//自定义ICON事件消息
    type
      TForm1 = class(TForm)
        PopupMenu1: TPopupMenu;
        aaa1: TMenuItem;
        bbb1: TMenuItem;
        ccc1: TMenuItem;
        CDROM1: TMenuItem;
        N1: TMenuItem;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormActivate(Sender: TObject);
        procedure ccc1Click(Sender: TObject);
        procedure aaa1Click(Sender: TObject);
        procedure bbb1Click(Sender: TObject);
        procedure CDROM1Click(Sender: TObject);
        procedure N1Click(Sender: TObject);
      private
        { Private declarations }
        //正常和失效两种情况下图标
        NormalIcon,DisabledIcon:TIcon;
        Status:Boolean;//定义标志是“允许使用”还是“禁止使用”
        Procedure InstallIcon;//声明过程InstallIcon用来在托盘中安装图标
        Procedure ChangeIcon(s:Boolean);//声明过程ChangeIcon用于改变本程序以托盘中的图标
        Procedure UnInstallIcon;//声明过程UnInstallIcon用于卸载托盘中的图标
        //捕捉自定义消息MI_ICONEVENT的过程IconOnClick的声明
        Procedure IconOnClick(var Msg:Tmessage);message MI_ICONEVENT;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.DFM}Procedure TForm1.ChangeIcon(s:Boolean);//过程ChangeIcon用于改变本程序以托盘中的图标
    var
      IconData:TNotifyIconData;
    begin
      IconData.cbSize := SizeOf(IconData);
      IconData.Wnd := Handle;
      IconData.uID := ICON_ID;
      if s=False then //禁止使用
      begin
        IconData.hIcon := DisabledIcon.Handle;
        Status := False;
      end
      else
      begin
        IconData.hIcon := Normalicon.Handle;
        Status := True;
      end;
      IconData.uFlags := NIF_ICON;
      Shell_NotifyIcon(NIM_MODIFY,@IconData);
    end;
    //处理鼠标在托盘中对应的图标上的单击事件
    Procedure TForm1.IconOnClick(var Msg:Tmessage);
    var
      p:TPoint;
    begin
      if ((Msg.lParam=WM_LBUTTONDOWN) and (Status=True)) then
      //如果按下的是鼠标左键,并且允许显示,则显示窗体Form2
        Form2.Show;
      if (Msg.lParam=WM_RBUTTONDOWN) then
      //如果按下的是鼠标右键,则显示弹出菜单
        begin
          GetCursorPos(p);
          PopupMenu1.Popup(p.x,p.y);
        end;
    end;
    //过程InstallIcon用来在托盘中安装图标
    Procedure TForm1.InstallIcon;
    var
      IconData:TNotifyIconData;
    begin
      NormalIcon := TIcon.Create;
      DisabledIcon := TIcon.Create;
      //允许状态下的图标
      NormalIcon.LoadFromFile('Normal.ico');
      //禁止状态下的图标
      DisabledIcon.LoadFromFile('Normal.ico');
      IconData.cbSize := SizeOf(IconData);
      IconData.Wnd := Handle;
      IconData.UID := ICON_ID;
      IconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
      IconData.uCallBackMessage := MI_ICONEVENT;
      IconData.hIcon := NormalIcon.Handle;
      //鼠标悬在托盘中对应的图标上时的提示信息
      IConData.szTip := 'asdfghjkl';
      Shell_NotifyIcon(NIM_ADD,@IconData);
    end;
    //过程UnInstallIcon用于卸载托盘中的图标
    Procedure TForm1.UnInstallIcon;
    var
      Icondata : TNotifyIconData;
    begin
      IconData.cbSize := SizeOf(IconData);
      IconData.Wnd := Handle;
      IconData.uID := ICON_ID;
      Shell_NotifyIcon(NIM_DELETE,@IconData);
    end;
    //在窗体Form1的OnCreate事件处理过程中作初始化工作,安装图标并隐藏主窗体
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Status := True;
      //安装图标
      InstallIcon;
      //改变图标为Normal状态
      ChangeIcon(true);
      //隐藏主窗体
      ShowWindow(Application.Handle,SW_HIDE);
      //在托盘中不显示程序图标
      SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
    end;
    //在窗体Form1的OnClose事件处理过程中作清除工作,卸载图标并释放图标资源
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      UnInstallIcon;
      NormalIcon.Free;
      DisabledIcon.Free;
    end;//在窗体Form1的Onactivate事件处理过程中隐藏窗体
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      Form1.width := 0;
      Form1.Height := 0;
      ShowWindow(Application.Handle,SW_HIDE);
    end;“