淺析系統托盤的程式設計計算機論文

  系統托盤是個特殊區域,通常在桌面的底部,在那裡,使用者可以隨時訪問正在執行中的那些程式。在微軟的Windows裡,系統托盤常指工作列的狀態區域;在Gnome的桌面時,常指布告欄區域;在KDE桌面時,指系統托盤。在每個系統裡,托盤是所有正執行在桌面環境裡的應用程式共享的區域。以下是小編今天為大家精心準備的:淺析系統托盤的程式設計計算機相關論文,內容僅供參考,歡迎閱讀!

  淺析系統托盤的程式設計計算機全文如下:

  托盤訊息處理:

  在Shell32.DLL動態連結庫中包括一個函式Shell_NotifyIconA******可通知Windows在任務條右下角加入一個小圖示,可惜該函式的詳細說明未收入Delphi的幫助文件中。現將實現例程示範如下:

  unit pro2;

  interface

  uses

  。。。, Menus,shellAPI; //TNotifyIconData是定義在shellAPI單元的

  {自定義訊息,當小圖示捕捉到滑鼠事件時Windows向回撥函式傳送此訊息}

  const WM_MYTRAYICONCALLBACK = WM_USER + 1000 ;

  。。。。

  private

  MyTrayIcon : TNotifyIconData ;

  procedure WMMyTrayIconCallBack***Var Msg : TMessage***; message WM_MYTRAYICONCALLBACK ;

  //托盤訊息處理過程

  procedure WMCommand***Var msg : TWMCommand***; message WM_Command;

  //處理托盤圖示的右鍵選單事件

  procedure Minimize***var ; message WM_NCLBUTTONDOWN;

  //窗體最小化時的訊息處理

  。。。。。。。。

  procedure TForm1.FormCreate***Sender: TObject***;

  begin

  //將程式視窗樣式設為TOOL視窗,避免在工作列上出現

  SetWindowLong***Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW***;

  end;

  procedure TForm1.FormShow***Sender: TObject***;

  begin

  //設定托盤

  Icon.Handle := LoadIcon***Hinstance,'MAINICON'***;

  MyTrayIcon.cbSize := SizeOf***TNotifyIconData***;// nid變數的位元組數

  MyTrayIcon.Wnd := Handle ;// 主視窗控制代碼

  MyTrayIcon.uID := 1 ;// 內部標識,可設為任意數

  MyTrayIcon.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE ;// 指明哪些欄位有效

  MyTrayIcon.uCallBackMessage := WM_MYTRAYICONCALLBACK ;//回撥函式訊息,將自定義托盤訊息傳遞進去

  MyTrayIcon.hIcon := Application.Icon.Handle; // 要加入的圖示控制代碼,可任意指定

  StrCopy***MyTrayIcon.szTip, PChar***Caption******;

  Shell_NotifyIcon***NIM_ADD,@MyTrayIcon***;

  ShowWindow***Handle,sw_Hide***;

  // Visible := False ;//當程式啟動時就最小化在托盤區即Form.Create時啟用此語句

  Application.ShowMainForm := False ;

  SetForegroundWindow***Application.Handle***;

  end;

  ////訊息過程實現

  procedure TForm1.WMMyTrayIconCallBack***var Msg: TMessage***;

  var CursorPos : TPoint;

  begin

  case Msg.LParam of

  WM_LBUTTONDBLCLK : //雙擊訊息:彈出主視窗

  begin

  Visible := not Visible ;

  Application.ShowMainForm := Visible ;

  SetForegroundWindow***Application.Handle***;

  end ;

  WM_RBUTTONDOWN : //滑鼠右鍵:彈出選單

  begin

  GetCursorPos***CursorPos***;

  { Popupmenu1.Popup***CursorPos.X,CursorPos.Y***;

  popupmen1裡面就可以加入顯示主視窗、退出等功能。這個右鍵選單可以是靜態的,如上面一句來彈出;也可以動態建立,如下面所示的方法:}

  pm := createpopupmenu;//建立一個Hmenu,;

  AppendMenu***pm,0,ord***'A'***,'關於....'***;//在指定的選單裡新增一個選單項

  AppendMenu***pm,0,Ord***'B'***,'&Exit'***;

  //加入選單事件---》處理WMCOMMAND訊息即可

  TrackPopupMenu***pm,Tpm_BottomAlign or Tpm_RightAlign, CursorPos.x, CursorPos.y, 0,handle,nil***;

  //在圖示上方顯示該彈出式選單

  end ;

  end ;

  end;

  procedure TForm1.WMCommand***var msg : TWMCommand***;

  begin

  Case msg.ItemID of

  Ord***'A'*** : showmessage***'我的右鍵選單!'***;

  Ord***'B'*** : Self.close;//關閉程式主窗體

  else inherited;

  end;

  end;

  procedure Tform1.Minimize***var

  begin

  if Mess.Hittest = htReduce then

  Self.Hide

  else inherited;

  end;

  procedure TForm1.FormClose***Sender: TObject; var Action: TCloseAction***;

  var {程式被關閉時通知Windows去掉小圖示}

  nid: TNotifyIconData;

  begin

  nid.cbSize := sizeof***nid***; // nid變數的位元組數

  nid.uID := 1; //內部標識,與加入小圖示時的數一致

  nid.Wnd := Handle; //主視窗控制代碼

  Shell_NotifyIcon***NIM_DELETE, @nid***; //去掉小圖示

  end;