タスクトレイにアイコン
常駐型のツールがよく使用するタスクトレイアイコンを 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;
|