C++Builder Tips


タスクトレイに常駐


タスクトレイに常駐するサンプルです。

一番右のタスクトレイアイコンが本サンプルのアイコン
アイコンにマウスを当てたところ アイコンで右クリックしたところ
アイコンで左クリックして出力されるフォーム
//---------------------------------------------------------------------------
// Project1.cpp
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  try
  {
    Application->Initialize();
    Application->CreateForm(__classid(TForm1), &Form1);
    Application->ShowMainForm = false; //この行を追加
    Application->Run();
  }catch (Exception &exception){
    Application->ShowException(&exception);
  }
  return 0;
}

//---------------------------------------------------------------------------
// Unit1.h
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
#define WM_USERTASKICON WM_USER + 1
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
  __published: // IDE 管理のコンポーネント
  TButton *Button1;
  TPopupMenu *PopupMenu;
  TMenuItem *pmnuExit;
  void __fastcall FormCreate(TObject *Sender);
  void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
  void __fastcall Button1Click(TObject *Sender);
  void __fastcall pmnuExitClick(TObject *Sender);
private: // ユーザー宣言
  NOTIFYICONDATA sdtNotifyIcondata;
  void __fastcall onTaskIcon(TMessage & msg); // ユーザー宣言
public: // ユーザー宣言
  __fastcall TForm1(TComponent* Owner);
protected: // ユーザー宣言
  BEGIN_MESSAGE_MAP
     VCL_MESSAGE_HANDLER(WM_USERTASKICON, TMessage, onTaskIcon)
  END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------------
// Unit1.cpp
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  sdtNotifyIcondata.cbSize = sizeof(NOTIFYICONDATA);
  sdtNotifyIcondata.hWnd = Handle;
  sdtNotifyIcondata.uID = 1;
  sdtNotifyIcondata.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
  sdtNotifyIcondata.uCallbackMessage =
WM_USERTASKICON;
  sdtNotifyIcondata.hIcon = Application->Icon->Handle;
  lstrcpy(sdtNotifyIcondata.szTip, "タスクトレイメッセージ");
  Shell_NotifyIcon( NIM_ADD, &sdtNotifyIcondata );

}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  sdtNotifyIcondata.cbSize = sizeof(NOTIFYICONDATA);
  sdtNotifyIcondata.hWnd = Handle;
  sdtNotifyIcondata.uID = 1;
  sdtNotifyIcondata.uFlags = 0;
  Shell_NotifyIcon( NIM_DELETE, &sdtNotifyIcondata );

}
//---------------------------------------------------------------------------

void __fastcall TForm1::onTaskIcon(TMessage & msg)
{
  switch (msg.LParam){
  /* 左ボタンのクリック */
    case WM_LBUTTONDOWN:
       Form1->Visible = true;
       break;
  /* 右ボタンのクリック */
    case WM_RBUTTONDOWN:
       POINT sdtPOINT;
       GetCursorPos(&sdtPOINT);
       SetForegroundWindow(Application->Handle);
       Application->ProcessMessages();
       PopupMenu->Popup(sdtPOINT.x, sdtPOINT.y);
       break;
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Form1->Visible = false;
}

//---------------------------------------------------------------------------

void __fastcall TForm1::pmnuExitClick(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------


DownLoad bcbtips026.lzh 4KB(BCB5)