タスクトレイにアイコン
常駐型のツールがよく使用するタスクトレイアイコンを Delphi でも実現することが出来ます。
使用するAPIは Shell_NotifyIconです。
■ Shell_NotifyIconの例 |
public { Public 宣言 } { ※uses に ShellApi を追加 } {タスクトレイアイコン} FIconData : TNotifyIconData; {アイコンクリック時のイベント} procedure ICONMessage(var Msg : TMsg); message WM_USER + 100; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin // // タスクトレイにアイコンを追加する // FIconData.cbSize := SizeOf(TNotifyIconData); FIconData.uID := 1; FIconData.Wnd := Handle; FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; FIconData.uCallbackMessage := WM_USER + 100; FIconData.hIcon := Application.Icon.Handle; {アイコン指定} FIconData.szTip := 'Delphi Acid Floor'; {ヒント文字列} Shell_NotifyIcon(NIM_ADD, @FIconData); end; procedure TForm1.Button2Click(Sender: TObject); var Icon : TIcon; begin // // タスクトレイのアイコンを変更する // if OpenPictureDialog1.Execute then begin Icon := TIcon.Create; Icon.LoadFromFile(OpenPictureDialog1.FileName); FIconData.hIcon := Icon.Handle; {アイコン変更} Shell_NotifyIcon(NIM_MODIFY, @FIconData); Icon.Free; end; end; procedure TForm1.Button3Click(Sender: TObject); begin // // タスクトレイのアイコンを削除する // Shell_NotifyIcon(NIM_DELETE, @FIconData); end; procedure TForm1.ICONMessage(var Msg: TMsg); var Point : TPoint; {マウス位置} begin // // アイコンのイベント処理 // GetCursorPos(Point); if (Msg.wParam = WM_LBUTTONDOWN) then begin //左クリック時 ListBox1.Items.Add('CLICK'); end else if (Msg.wParam = WM_RBUTTONDOWN) then begin //右クリック時 PopupMenu1.Popup(Point.x, Point.y); {ポップアップを表示} end; end; |