BCB如何将应用程序图标写到系统托盘中

 

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、现在运行程序,系统图标就写到托盘中去了。
正文 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在BCB6(即Borland C++ Builder 6),可以使用TDateTime类型的Now函数来修改系统时间。TDateTime是一个表示日期和时间的类,它可以用于获取当前日期和时间以及进行日期和时间的计算和比较。 要修改系统时间,可以按照以下步骤进行操作: 1. 首先,在代码包含日期和时间的头文件 #include <DateUtils.h>。 2. 使用Now函数获取当前的日期和时间,将其赋值给TDateTime类型的变量。 例如,可以这样声明一个TDateTime类型的变量,并使用Now函数将当前日期和时间赋值给它: TDateTime currentTime = Now(); 3. 接下来,可以使用TDateTime提供的各种函数和操作来修改系统时间。 例如,可以使用TDateTime的AddSeconds函数向当前时间添加指定的秒数。具体代码如下: currentTime = currentTime.AddSeconds(10); 这将把系统时间向后推迟10秒。 4. 最后,可以使用系统API函数来将修改后的时间应用到系统。调用Windows API函数SetSystemTime来设置新的系统时间。 具体代码如下: SYSTEMTIME newTime; DateTimeToSystemTime(currentTime, &newTime); SetSystemTime(&newTime); DateTimeToSystemTime是一个用于将TDateTime对象转换为SYSTEMTIME结构的函数,它将当前时间转换为系统时间的格式。 SetSystemTime函数则使用新的系统时间来设置系统时间。 需要注意的是,修改系统时间可能需要管理员权限,因此在使用这些函数之前,请确保以管理员身份运行程序。此外,在修改系统时间之前,也需要谨慎地检查和验证所进行的操作,以确保安全性和正确性。 ### 回答2: 在BCB6,要修改系统时间可以使用SetSystemTime函数。 SetSystemTime函数是Windows API的一个函数,用于设置系统的日期和时间。它接受一个SYSTEMTIME结构体参数,该结构体包含了要设置的日期和时间信息。 具体的函数声明如下: BOOL SetSystemTime(const SYSTEMTIME *lpSystemTime); 在调用这个函数时,需要传入一个SYSTEMTIME结构体的指针作为参数。这个结构体包含了年、月、日、时、分、秒等时间信息。 下面是一个示例代码,演示了如何使用SetSystemTime函数来修改系统时间: ```c++ #include <windows.h> int main() { SYSTEMTIME st; // 获取当前系统时间 GetSystemTime(&st); // 修改时间 st.wYear = 2022; st.wMonth = 12; st.wDay = 31; st.wHour = 23; st.wMinute = 59; st.wSecond = 59; // 调用函数设置系统时间 SetSystemTime(&st); return 0; } ``` 以上代码将系统的日期和时间修改为2022年12月31日23时59分59秒。 需要注意的是,修改系统时间可能需要管理员权限。因此,在使用SetSystemTime函数时,需要确保以管理员身份运行程序,或者在程序调用时获取管理员权限。 ### 回答3: 在BCB6,可以使用ctime函数来修改系统时间。 ctime函数的功能是将time_t结构体的时间值转换为字符串表示的时间值。它的原型定义如下: ```c char *ctime(const time_t *timer); ``` 在使用ctime函数修改系统时间时,需要先通过time函数获取当前的系统时间,然后将time_t类型的时间值转换为字符串时间值,然后对该字符串进行修改,最后通过其他函数将修改后的字符串时间值再转换为time_t类型的时间值,从而实现对系统时间的修改。 具体操作步骤如下: ```c #include <time.h> int main() { // 获取当前的系统时间 time_t currentTime = time(NULL); // 将time_t类型的时间值转换为字符串时间值 char *strTime = ctime(&currentTime); // 对字符串时间值进行修改 // ... // 将修改后的字符串时间值转换为time_t类型的时间值 time_t modifiedTime = mktime(strTime); // 修改系统时间 // ... return 0; } ``` 需要注意的是,在对字符串时间值进行修改时,可以通过字符串处理函数来实现,如strcpy、strcat等。修改系统时间的具体步骤可以使用系统相关的函数来完成,如在Windows系统可以使用SetSystemTime函数来实现。 综上所述,在BCB6修改系统时间可以使用ctime函数来进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值