怎样把把程序放到右边的工具栏里面。诚等高手指教
并怎样实现又键的菜单

解决方案 »

  1.   

    [zt]
    利用Delphi實現系統狀態欄圖標 --------------------------------------------------------------------------------
     
    http://www.sina.com.cn 賽迪网 
     
      文/小逗逗  下面以一個具体的例子,詳細介紹一下利用Delphi實現系統狀態欄圖標的步驟和方法。  1.創建一個應用程序,在主窗体上增加一個TpopupMenu組件。并為該彈出選單組件增加選單項Exit,標題為“退出”。  2.在Uses中添加ShellAPI,因為在系統狀態欄中增加圖標時需調用ShellAPI中的函數 
    Shell_NotifyIconA。該函數需要兩個參數,其中一個是TnotifyIconDataA結构,需在主窗体中增加TnotifyIconDataA類型的全局變量ntida。  3.定義消息mousemsg,并編寫主窗体的mousemessage消息處理函數,此函數說明在圖標上用鼠標左鍵單擊時,會打開應用程序窗口;用鼠標右鍵單擊時,會彈出一個選單。  下面給出步驟2和3的實現代碼:  unit Unit1;  interface  uses  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  StdCtrls, ExtCtrls, Menus, shellapi;  const  mousemsg = wm_user + 1; //自定義消息,用于處理用戶在圖標上點擊鼠標的事件  iid = 100; //用戶自定義數值,在TnotifyIconDataA類型全局變量ntida中使用  type  TForm1 = class(TForm)  ......  private  //自定義消息處理函數,處理鼠標點擊圖標事件  procedure mousemessage(var message: tmessage); message mousemsg;  public  { Public declarations }  end;  var  Form1: TForm1;  ntida: TNotifyIcondataA;  //用于增加和刪除系統狀態圖標  implementation  {.DFM}  procedure TForm1.mousemessage(var message: tmessage);  var  mousept: TPoint; //鼠標點擊位置  begin  inherited;  if message.LParam = wm_rbuttonup then begin //用鼠標右鍵點擊圖標  getcursorpos(mousept); //獲取光標位置  popupmenu1.popup(mousept.x, mousept.y);  //在光標位置彈出選單  end;  if message.LParam = wm_lbuttonup then begin //用鼠標左鍵點擊圖標  //顯示應用程序窗口  ShowWindow(Handle, SW_SHOW);  //在任務欄上顯示應用程序窗口  ShowWindow(Application.handle, SW_SHOW);  SetWindowLong(Application.Handle, GWL_EXSTYLE,  not (GetWindowLong(Application.handle, GWL_EXSTYLE)  or WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW));  end;  message.Result := 0;  end   4.編寫FormCreate的代碼如下:  procedure TForm1.FormCreate(Sender: TObject);  begin  ntida.cbSize := sizeof(tnotifyicondataa); //指定ntida的長度  ntida.Wnd := handle; //取應用程序主窗体的句柄  ntida.uID := iid; //用戶自定義的一個數值,在uCallbackMessage參數指定的消息中使  ntida.uFlags := nif_icon + nif_tip + nif_message;//指定在該結构中uCallbackMessage、hIcon和szTip參數都有效  ntida.uCallbackMessage := mousemsg;  //指定的窗口消息  ntida.hIcon := Application.Icon.handle;  //指定系統狀態欄顯示應用程序的圖標句柄  ntida.szTip := 'Icon';  //當鼠標停留在系統狀態欄該圖標上時,出現該提示信息  shell_notifyicona(NIM_ADD, @ntida);  //在系統狀態欄增加一個新圖標  end;   5.編寫Tform1.OnClose的代碼如下:  procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);  begin  Action := caNone; //不對窗体進行任何操作  ShowWindow(Handle, SW_HIDE); //隱藏主窗体  //隱藏應用程序窗口在任務欄上的顯示  ShowWindow(Application.Handle, SW_HIDE);  SetWindowLong(Application.Handle, GWL_EXSTYLE,  GetWindowLong(Application.handle, GWL_EXSTYLE)  or WS_EX_TOOLWINDOW AND NOT WS_EX _APPWINDOW);  end;   6.編寫Exit代碼如下:  當用戶點擊Exit時實現完全退出應用程序。具体代碼如下:  procedure TForm1.ExitClick(Sender: TObject);  begin  //為ntida賦值,指定各項參數  ntida.cbSize := sizeof(tnotifyicondataa);  ntida.wnd := handle;  ntida.uID := iid;  ntida.uFlags := nif_icon + nif_tip + nif_message;  ntida.uCallbackMessage := mousemsg;  ntida.hIcon := Application.Icon.handle;  ntida.szTip := 'Icon';  shell_notifyicona(NIM_DELETE, @ntida);  //刪除已有的應用程序圖標  Application.Terminate;  //中斷應用程序運行,退出應用程序  end   通過以上步驟,我們即可用Delphi輕松實現系統狀態欄圖標。
      

  2.   

    程序如下:在头文件的private处加入:
        Normallcon:TIcon;
        procedure InstallIcon; //安装图标
        procedure UninstallIcon;//卸载图标
        procedure IconOnclick(var Msg:TMessage);message MI_ICONEVENT; //单击图标事件procedure TForm1.IconButtonClick(Sender: TObject);
    begin
    //在任务栏上显示/隐藏图标
    if IconButton.Caption='显示图标' then
            begin
            InstallIcon;//显示图标
            IconButton.Caption:='隐藏图标';
             end
    else
            begin
            UnInstallIcon;//去掉图标
            IconButton.Caption:='显示图标';
            end;
    end;procedure TForm1.InstallIcon;
    var IconData:TNotifyIconData;
    result:array[0..255] of char;
    r:string;
    begin
    //显示图标//所要显示的图标目录及文件名
    GetCurrentDirectory(255,result);
    r:=result+'\face03.ico';Normallcon:=TIcon.Create;
    Normallcon.LoadFromFile(r);
    with IconData do
    begin
    cbSize:=Sizeof(IconData);
    Wnd:=Handle;
    uId:=ICON_ID;
    uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallBackMessage:=MI_ICONEVENT;
    hicon:=Normallcon.Handle;
    szTip:='这是一个关于Delphi 6.0的例子!';
    end;
    Shell_NotifyIcon(NIM_ADD,@IconData);
    end;procedure TForm1.UnInstallIcon;
    var IconData:TNotifyIconData;
    begin
    //去掉图标
    with IconData do
    begin
    cbSize:=Sizeof(IconData);
    wnd:=Handle;
    uId:=ICON_ID;
    end;
    Shell_NotifyIcon(NIM_DELETE,@IconData);
    end;procedure TForm1.IconOnClick(var Msg:TMessage);
    var p:TPoint;
    begin
    //单击图标事件//如果窗口为隐藏时,单击鼠标左键显示该窗口
    if(Msg.LParam=WM_LBUTTONDOWN) and (Form1.Visible=false)then
    Form1.Show;////如果窗口为隐藏时,单击鼠标右键显示该一菜单PopupMenu1
    if (Msg.LParam=WM_RBUTTONDOWN) and (Form1.Visible=false) THEN
    begin
    getCursorpos(p);
    PopupMenu1.Popup(p.X,p.Y);
    end;
    end;