BCB如何将应用程序图标写到系统托盘中_bcb 系统托盘-程序员宅基地

技术标签: BCB  components  n2  shell  user  delete  class  

 

1、新建一个工程,将工程存到目录D:/BCBTray下,并在这个目录下拷入一个icon图标文件,文件名为Icon1.ico,作为本程序的系统托盘处的图标。
2、在这个工程中再增加一个窗体Form2,要注意的是这个工程中,Form1是启动窗体,它负责系统托盘图标的总控工作,并不负有其它责任。应用程序的主窗口是由Form2 来负责的。在Form1的代码窗Unit1.cpp增加如下代码:
#include "Unit2.h"
3、将Form1的BorderStyle属性设置为bsNone
4、在Form1的OnShow事件写如下代码:
void __fastcall TForm1::FormShow(TObject *Sender)
{
  Form1->Width=0;       
}
5、在Form1中增加一个PopupMenu1,并为它增加一个子菜单:它的两个菜单条为:显示网址管理专家、退出程序。
为“显示网址管理专家”写如下单击事件:
void __fastcall TForm1::N1Click(TObject *Sender)
{
  Form2->Show();
}
为“退出程序”写如下单击事件:
void __fastcall TForm1::N2Click(TObject *Sender)
{
  Form1->Close();
}
6、在Form1的代码头文件Unit1.h中的TForm1的类定义的public成员函数中写下如下代码:
__fastcall ~TForm1();
        TIcon *MyIcon;
        void virtual __fastcall IconClick(TMessage& Msg);
BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(WM_USER+100,TMessage,IconClick)
END_MESSAGE_MAP(TForm)
这样,TForm1的类定义全貌为:
class TForm1 : public TForm
{
__published: // IDE-managed Components
        TPopupMenu *PopupMenu1;
        TMenuItem *N1;
        TMenuItem *N2;
        void __fastcall N1Click(TObject *Sender);
        void __fastcall N2Click(TObject *Sender);
        void __fastcall FormShow(TObject *Sender);
private: // User declarations
public:  // User declarations
        __fastcall TForm1(TComponent* Owner);

        __fastcall ~TForm1();
        TIcon *MyIcon;
        void virtual __fastcall IconClick(TMessage& Msg);
BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(WM_USER+100,TMessage,IconClick)
END_MESSAGE_MAP(TForm)
};
7、在Unit1.cpp中的窗体的构造函数中写如下代码:
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  MyIcon=new TIcon();
  TNotifyIconData IconData;
  MyIcon->LoadFromFile("Icon1.ico");
  IconData.cbSize=sizeof(IconData);
  IconData.hWnd=Handle;
  IconData.uID=100;
  IconData.hIcon=MyIcon->Handle;
  IconData.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
  IconData.uCallbackMessage=WM_USER+100;
  strcpy(IconData.szTip,"网址管理专家 单击左键显示窗体");
  Shell_NotifyIcon(NIM_ADD,&IconData);
  SetWindowLong(Application->Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
}
8、在Unit1.cpp中的窗体的析构函数中写如下代码:
__fastcall TForm1::~TForm1()
{
  TNotifyIconData IconData;
  IconData.cbSize=sizeof(IconData);
  IconData.hWnd=Handle;
  IconData.uID=100;
  Shell_NotifyIcon(NIM_DELETE,&IconData);
  delete MyIcon;
}
9、在Unit1.cpp中写窗体的公用成员函数IconClick代码:
void __fastcall TForm1::IconClick(TMessage& Msg)
{
  TPoint po;
  if(Msg.LParam==WM_LBUTTONDOWN)
  {
    Form2->Show();
  }
  if(Msg.LParam==WM_RBUTTONUP)
  {
    GetCursorPos(&po);
    PopupMenu1->Popup(po.x,po.y);
  }
}
10、由于Shell_NotifyIcon函数定义在ShellAPI.hpp文件中所以请将下面一句写到Unit1.h中:
#include <shellapi.hpp>
11、现在运行程序,系统图标就写到托盘中去了。
正文 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/moonsbird/article/details/4464953

智能推荐

WebSocket 教程_websocket readystate 3-程序员宅基地

文章浏览阅读894次。一、为什么需要 WebSocket?初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续..._websocket readystate 3

V免签Php二维码不显示_V免签支付源码,支付宝微信在线免签约收款回调系统带监控...-程序员宅基地

文章浏览阅读1.8k次。V免签系统是一款完全开源的个人免签约收款解决方案,本套系统有两种版本,分别是Java版本和PHP版本程序,此两种程序所实现的功能无任何差别,仅仅是所使用的代码语言不同而已,如果你对Java程序比较熟悉,那么你可以下载Java版本的,如果你对PHP比较熟悉,那么你就可以下载php版本的,在文章结尾处的下载区域内,我已把这两种版本的源码下载链接全放了进去!Java版本介绍1,V免签 是基于Spring..._v免签易支付二开源码 免签约支付平台系统源码 支持微信/支付宝/qq/免挂回调+pc监

利用蜘蛛池出租提升百度收录排名:数字化时代企业关键策略-程序员宅基地

文章浏览阅读398次,点赞5次,收藏9次。数字化时代,网站在百度收录排名的优劣,已成为企业竞争中的关键环节。为实现这一目标,出租蜘蛛池已然成为一项广泛应用并被证明高效的手段。

conda 环境下安装软件httptools error: Microsoft Visual C++ 14.0 or greater is required 解决方法_running build_ext building 'httptools.parser.parse-程序员宅基地

文章浏览阅读1.6k次。windos 平台下 conda 环境安装Sanic 库出现以下问题building 'httptools.parser.parser' extensionerror: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/先不要去安装 vc++ 编译工具_running build_ext building 'httptools.parser.parser' extension error: micros

车载电子电器架构 —— 局部网络管理概述_pnc 部分网络管理-程序员宅基地

文章浏览阅读1.1k次。### 文章大体有如下内容:### 1、局部网络管理概述### 2、VFC/PNC通信策略### 3、PNC与PDU Group的关系### 4、局部网络管理小结_pnc 部分网络管理

推免生985占比100%!揭秘这所院校的真正实力!_密院在交大的地位-程序员宅基地

文章浏览阅读1k次。1、院校介绍上海交通大学密西根学院是上海交通大学为加快建设世界一流大学进程,与美国密西根大学开展全面战略性国际合作办学共建而成的工学院。目前学院拥有4个研究中心和34个科研实验室,主要研究领域包括设计制造与系统、固体力学、能源动力工程和流体力学、材料学科与工程、电路与半导体器件、计算机科学与工程等。多学科及支持交叉学科招生和培养是密西根学院的重要特点之一,感兴趣的保研er可以多加关注哦~2、培养特色※以上信息综合搜集整理自院系官网。如有信息偏误,欢迎留言评论指出交大密西根学院设有_密院在交大的地位

随便推点

【故障诊断】多种方法滚珠轴承内圈和外圈故障诊断(分析故障频率)系统【含Matlab源码 4005期】-程序员宅基地

文章浏览阅读869次,点赞26次,收藏22次。多种方法滚珠轴承内圈和外圈故障诊断(分析故障频率)系统完整的代码,包运行;运行操作视频见CSDN资源!适合小白!

SQL动态SQL之多条件动态查询中where标签和if test的使用_<where> <if test-程序员宅基地

文章浏览阅读1.9k次。SQL多条件动态查询 <where> <if test=" status != null"> status = #{status} </if> <if test="brandName != null and brandName != ''"> and brand_name like #{brandName} _

pandas groupby加速数据处理_groupby apply速度-程序员宅基地

文章浏览阅读3.2k次,点赞5次,收藏11次。pandas groupby加速数据处理任务统计相同Id的多行数据在某一个类别下多个列的均值,举例如下:uId appId duration times use_date category1000951 a0048332 6.0 2.0 2019-03-20 便捷生活1000951 a0048332 6.0 2.0 2019-03-20 出行导航1000951 a00289826 77..._groupby apply速度

解决 ubuntu16.04 ROS安装过程中sudo ros-dep init 出错_dep init 错误-程序员宅基地

文章浏览阅读4k次,点赞11次,收藏22次。花了大半天时间终于弄出来了,下面是问题报错:(如转载,请标明原作品链接)ERROR: cannot download default sources list from:https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.listWebsite may be down..._dep init 错误

带你领略AutoHotkey无限魅力_autohotkey v2 拾色器-程序员宅基地

文章浏览阅读1.5w次,点赞5次,收藏20次。记得以前曾经用过一个定时软件,可以通过写程序定制要完成的任务,于是在网上搜索这个软件,但是没有搜索到,却不小心闯入了“善用佳软”的家里,发现了AutoHotkey。发现它越来越强大,远远不至善用佳软里介绍的功能,此后一发不可收拾,几年来不断地完善自己的代码,到目前为止到了依恋它的程序!找到了这样的好东西,自然想拿出来与大家分享一下。我的同事对这个脚本很感兴趣,也想学习一下,但由于我没有对它_autohotkey v2 拾色器

通过http协议中的etag进行用户追踪_http etag判断新用户-程序员宅基地

文章浏览阅读804次。1 什么是用户追踪用户追踪是同过一个唯一标识能定位到一个用户。例如A用户访问网站,网站生成一个唯一cookie,随后用户请求都带上这个cookie,那么通过这个cookie就可以分析用户的访问或操作行为。通过浏览器通常进行用户追踪使用的常用手段如几种,但不仅限于这几种。cookielocalStoragesessionStorageipuserAgentcanvas指纹除此之..._http etag判断新用户