有没有比较好用的Tray(托盘)控件?

时间:2022-07-10 19:55:22
目前所用的一个Tray控件很不爽,在该Tray的图标上按右键弹出一个菜单后,如果不选择它的任何一个菜单项就把鼠标移到屏幕上的其它地方点击,则弹出的这个菜单始终不消失。非得选择某个菜单项才能使菜单消失。oicq的好象也有这个问题。

有没有满足下面的条件的tray控件?

当鼠标在弹出的菜单之外的地方点击时,弹出菜单自动消失。

18 个解决方案

#1


我有一个告诉我你的邮箱我发给你。

#2


我用BCB自己编的也这样,不知到如何处理!好像不行!

#3


CB本身就有
在Sample页面,叫TrayIcon。(注:C++Builder5.0才有)

#4


to    chenwanchun() 

lluunn_cn@sina.com.cn

#5


BCB5自己好像有一个呀,很好用的

#6


BCB5自带的很好用,没什么问题啊

#7


void __fastcall TfrmLogHook::SelectTrayTcon(DWORD Add)
{
 if(Add==NIM_ADD)
 {
  NOTIFYICONDATA icondata;
  memset(&icondata,0,sizeof(icondata));
  icondata.cbSize=sizeof(icondata);
  icondata.hWnd=Handle;
  strncpy(icondata.szTip,"和尚纪录间谍",sizeof(icondata.szTip));
  icondata.hIcon=Application->Icon->Handle;
  icondata.uCallbackMessage=iconmessage;
  icondata.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
  Shell_NotifyIcon(Add,&icondata);
  }
 else if(Add==NIM_DELETE)
  {
   NOTIFYICONDATA icondata;
   memset(&icondata,0,sizeof(icondata)); //将结构icondata的各域初始化为0
   icondata.cbSize=sizeof(icondata);
   icondata.hWnd=Handle;
   Shell_NotifyIcon(NIM_DELETE,&icondata);
   }
}

#8


void __fastcall TfrmLogHook::FormCreate(TObject *Sender)
{
  iconmessage=RegisterWindowMessage("IconNotify");
  SelectTrayTcon(NIM_ADD);

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

void __fastcall TfrmLogHook::FormDestroy(TObject *Sender)
{
  SelectTrayTcon(NIM_DELETE);
}

#9


想楼上xycleo()虚竹和尚() 大哥说的那样,我做过,效果可以,你试试!

#10


看看例程

#11


怎样响应tray icon上的鼠标消息?

#12


void __fastcall TfrmLogHook::WndProc(Messages::TMessage&Message)
    {  //重载wndproc,处理个各种系统消息
       POINT MousePos;
        if(Message.Msg==iconmessage)
       {
            if(Message.LParam==WM_LBUTTONDBLCLK)
            {
              Application->Terminate();//如果双击图标,则关闭应用程序
             }
            else if(Message.LParam==WM_LBUTTONDOWN)
                  {
                    Show();

                   }
                       else if(Message.LParam==WM_RBUTTONUP)
                          {
                            if (GetCursorPos(&MousePos))
                               {
                                   PopupMenu1->PopupComponent=frmLogHook;
                                   SetForegroundWindow(Handle);
                                   PopupMenu1->Popup(MousePos.x, MousePos.y);
                                 }
                           }
           return;
        }
       TForm::WndProc(Message);//对于其他的消息,调用基础类的WndProc函数让Windows进行缺省处理。
     }

#13


BCB5自带的那个Tray在哪个栏目下?没找到。
注:用Shell API写Tray程序我会,只是想省点事情。谢谢!
netguy2000@163.com

#14


学习学习了!

#15


学习学习了!

#16


学习学习了!

#17


BCB5自带的那个Tray在 sample选项卡.

#18


奇怪,我的BCB5中Samples栏目下面是空的,所以这个栏目没显示出来。

#1


我有一个告诉我你的邮箱我发给你。

#2


我用BCB自己编的也这样,不知到如何处理!好像不行!

#3


CB本身就有
在Sample页面,叫TrayIcon。(注:C++Builder5.0才有)

#4


to    chenwanchun() 

lluunn_cn@sina.com.cn

#5


BCB5自己好像有一个呀,很好用的

#6


BCB5自带的很好用,没什么问题啊

#7


void __fastcall TfrmLogHook::SelectTrayTcon(DWORD Add)
{
 if(Add==NIM_ADD)
 {
  NOTIFYICONDATA icondata;
  memset(&icondata,0,sizeof(icondata));
  icondata.cbSize=sizeof(icondata);
  icondata.hWnd=Handle;
  strncpy(icondata.szTip,"和尚纪录间谍",sizeof(icondata.szTip));
  icondata.hIcon=Application->Icon->Handle;
  icondata.uCallbackMessage=iconmessage;
  icondata.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
  Shell_NotifyIcon(Add,&icondata);
  }
 else if(Add==NIM_DELETE)
  {
   NOTIFYICONDATA icondata;
   memset(&icondata,0,sizeof(icondata)); //将结构icondata的各域初始化为0
   icondata.cbSize=sizeof(icondata);
   icondata.hWnd=Handle;
   Shell_NotifyIcon(NIM_DELETE,&icondata);
   }
}

#8


void __fastcall TfrmLogHook::FormCreate(TObject *Sender)
{
  iconmessage=RegisterWindowMessage("IconNotify");
  SelectTrayTcon(NIM_ADD);

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

void __fastcall TfrmLogHook::FormDestroy(TObject *Sender)
{
  SelectTrayTcon(NIM_DELETE);
}

#9


想楼上xycleo()虚竹和尚() 大哥说的那样,我做过,效果可以,你试试!

#10


看看例程

#11


怎样响应tray icon上的鼠标消息?

#12


void __fastcall TfrmLogHook::WndProc(Messages::TMessage&Message)
    {  //重载wndproc,处理个各种系统消息
       POINT MousePos;
        if(Message.Msg==iconmessage)
       {
            if(Message.LParam==WM_LBUTTONDBLCLK)
            {
              Application->Terminate();//如果双击图标,则关闭应用程序
             }
            else if(Message.LParam==WM_LBUTTONDOWN)
                  {
                    Show();

                   }
                       else if(Message.LParam==WM_RBUTTONUP)
                          {
                            if (GetCursorPos(&MousePos))
                               {
                                   PopupMenu1->PopupComponent=frmLogHook;
                                   SetForegroundWindow(Handle);
                                   PopupMenu1->Popup(MousePos.x, MousePos.y);
                                 }
                           }
           return;
        }
       TForm::WndProc(Message);//对于其他的消息,调用基础类的WndProc函数让Windows进行缺省处理。
     }

#13


BCB5自带的那个Tray在哪个栏目下?没找到。
注:用Shell API写Tray程序我会,只是想省点事情。谢谢!
netguy2000@163.com

#14


学习学习了!

#15


学习学习了!

#16


学习学习了!

#17


BCB5自带的那个Tray在 sample选项卡.

#18


奇怪,我的BCB5中Samples栏目下面是空的,所以这个栏目没显示出来。