自己寫的關於程序在狀態欄相關操作,只列出了主要部分,大家自己琢磨吧!
const
mymsg= wm_user + 1; //定義消息鍵值
type
TMainForm = class(TForm)
......
private
{ Private declarations }
procedure mymessage(var message:tmessage); message mymsg; //定義接收自定義消息後的功能
var
MainForm: TMainForm;
ntid: TnotifyIconDataA;
procedure TMainForm.FormCreate(Sender: TObject);
begin
//讓程序不在任務欄中顯示
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
ntid.cbsize := sizeof(TnotifyIconDataA);
ntid.Wnd := Handle;
ntid.uID := 100;
ntid.uFlags := NIF_ICON + NIF_TIP + NIF_MESSAGE;
ntid.uCallbackMessage := mymsg;
ntid.hIcon := image1.Picture.Icon.Handle; //Application.Icon.handle 系統圖標
ntid.szTip := 'SMS系統服務平台';
shell_notifyicona(NIM_ADD,@ntid);
self.Visible := false;
end;
狀態圖表操作:
ntid.hIcon := image2.Picture.Icon.Handle; //顯示工作圖標
shell_notifyicona(NIM_MODIFY,@ntid);
ntid.hIcon := image1.Picture.Icon.Handle; //顯示工作停止圖標
shell_notifyicona(NIM_MODIFY,@ntid);
shell_notifyicona(NIM_DELETE,@ntid); //刪除圖標,退出程序時用
窗口操作:
ShowWindow(MainForm.Handle,SW_HIDE); //隱藏主窗口
ShowWindow(MainForm.Handle,SW_SHOW); //顯示主窗口
//自定義消息操作功能:
procedure TMainForm.mymessage(var message: tmessage); //接收自定義消息,右鍵顯示PopupMenu
var
mypt:Tpoint;
begin
Inherited;
if message.LParam = WM_RBUTTONUP then begin
getCursorPos(mypt);
PM1.Popup(mypt.X, mypt.Y);
end;
message.Result := 0;
end;