程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 利用Delphi實現系統狀態欄圖標

利用Delphi實現系統狀態欄圖標

編輯:Delphi

  下面以一個具體的例子,詳細介紹一下利用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
  {$R .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 

  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;
  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輕松實現系統狀態欄圖標。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved