(20)uniGUI for C++ builder下如何使用UniTimer控件实现定时动作

       (中行雷威2018.8.12)

(同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943、860634510、299497712,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。如需下载开发工具及源代码请加入我的QQ群。)

【阅读倡议】

1、有问题请留言;

2、没问题请点赞;

3、看连载请加群;

4、下源码请加群;

【开发工具】

1、C++Builder10.2.3tokyo

2、FMSoft_uniGUI_Complete_Professional_1.10.0build1472(正版)

 

本人主笔的国内第一本uniGUI教学案例代码已诞生,分为cbuilder和delphi两个版本,买代码送手册,需要的朋友可以加入我的QQ技术交流群484979943、860634510、299497712给我(群主)留言。资料简介:https://blog.csdn.net/dlboy2018/article/details/88923832

本例子将详细讲解如何使用定时器、计时器timer控件。uniGUI的timer控件有两个一个是UniTimer,主要用于浏览器端计时动作,另一个是UniThreadTimer,主要用户后台服务端计时动作。本教程的源代码请到我的QQ群共享文件A02-源代码里下载。

一、UniTimer客户端案例

在客户端窗口MainForm上摆放一个UniMemo控件用于显示当前时间以表示计时器的自动操作,一个UniTimer用于自动控制,UniTimer还有一个RunOnce属性(只运行一次),再放一个UniCheckBox来演示只运行一次。放两个按钮,分别启动计时器和停止计时器。(第三个和第四个按钮是服务端案例使用)

1、Main.cpp

//---------------------------------------------------------------------------
#include <vcl.h>
#include <uniGUIVars.hpp>
#pragma hdrstop

#include "Main.h"
#include "MainModule.h"
#include "ServerModule.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "uniBitBtn"
#pragma link "uniButton"
#pragma link "uniGUIBaseClasses"
#pragma link "uniGUIClasses"
#pragma link "uniMemo"
#pragma link "uniTimer"
#pragma link "uniCheckBox"
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
TMainForm *MainForm(void)
{
   return( (TMainForm *)UniMainModule()->GetFormInstance(__classid(TMainForm)));
}
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TUniForm(Owner)
{
}
//---------------------------------------------------------------------------
void TF3D06BF53C86454A8B2F94A3BC87922B__RegisterFormClass() {
  Uniguivars::RegisterAppFormClass(__classid(TMainForm));
  Uniguiregclasses::CPPInit();
}

#pragma startup TF3D06BF53C86454A8B2F94A3BC87922B__RegisterFormClass
void __fastcall TMainForm::UniBitBtn1Click(TObject *Sender)
{
//设置间隔时间(毫秒)
UniTimer1->Interval=3000;
//只运行一次
if(UniCheckBox1->Checked)
    UniTimer1->RunOnce=true;
else
    UniTimer1->RunOnce=false;
//设置启动状态
UniTimer1->Enabled=true;

}
//---------------------------------------------------------------------------
void __fastcall TMainForm::UniTimer1Timer(TObject *Sender)
{
//添加当前系统时间
UniMemo1->Lines->Add(Now());

}
//---------------------------------------------------------------------------
void __fastcall TMainForm::UniBitBtn2Click(TObject *Sender)
{
//设置关闭状态
UniTimer1->Enabled=false;
}
//---------------------------------------------------------------------------
2、运行演示

运行后访问http://127.0.0.1:8077,点击开始按钮后,左侧每3秒会添加一行当前时间,如果勾选了“只运行一次”你会发现开始后只添加一次当前时间。

二、UniThreadTimer服务端案例

在ServerModule上昂一个UniThreadTimer控件,在MainForm上放两个按钮(第三、第四个)用于启动后台的服务,本案例让计时器自动删除服务端的一个文件,文件D:\testTimer\Win32\Debug\files\a.txt

1、ServerModule.h

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

#ifndef ServerModuleH
#define ServerModuleH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <uniGUIServer.hpp>
#include "uniThreadTimer.hpp"
//---------------------------------------------------------------------------
class TUniServerModule : public TUniGUIServerModule
{
__published:    // IDE-managed Components
    TUniThreadTimer *UniThreadTimer1;
    void __fastcall UniThreadTimer1Timer(TObject *Sender);
private:    // User declarations
public:        // User declarations
    String startFlag;//定义启动停止标志

    __fastcall TUniServerModule(TComponent* Owner);
    virtual void __fastcall FirstInit(void);

};
//---------------------------------------------------------------------------
TUniServerModule *UniServerModule(void);
//---------------------------------------------------------------------------
#endif

2、ServerModule.cpp

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

#include <vcl.h>
#include <UniGUIVars.hpp>

#pragma hdrstop

#include "ServerModule.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "uniThreadTimer"
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
TUniServerModule *UniServerModule(void)
{
   return( (TUniServerModule *)UniGUIServerInstance() );
}
//---------------------------------------------------------------------------

__fastcall TUniServerModule::TUniServerModule(TComponent* Owner)
        : TUniGUIServerModule(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TUniServerModule::FirstInit()
{
  Uniguivars::InitServerModule(this);
}
//---------------------------------------------------------------------------

void __RegisterServerModuleClass() {
  Uniguivars::RegisterServerModuleClass(__classid(TUniServerModule));
}

#pragma startup __RegisterServerModuleClass
void __fastcall TUniServerModule::UniThreadTimer1Timer(TObject *Sender)
{
char fileA[100];
String file1=UniServerModule()->FilesFolderPath+"a.txt";
sprintf(fileA,"%s",file1);

if(startFlag=="1")
    DeleteFile(file1);

}
//-----

3、Main.cpp

//---------------------------------------------------------------------------
#include <vcl.h>
#include <uniGUIVars.hpp>
#pragma hdrstop

#include "Main.h"
#include "MainModule.h"
#include "ServerModule.h"   //引用ServerModule的startFlag变量
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "uniBitBtn"
#pragma link "uniButton"
#pragma link "uniGUIBaseClasses"
#pragma link "uniGUIClasses"
#pragma link "uniMemo"
#pragma link "uniTimer"
#pragma link "uniCheckBox"
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
TMainForm *MainForm(void)
{
   return( (TMainForm *)UniMainModule()->GetFormInstance(__classid(TMainForm)));
}
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TUniForm(Owner)
{
}
//---------------------------------------------------------------------------
void TF3D06BF53C86454A8B2F94A3BC87922B__RegisterFormClass() {
  Uniguivars::RegisterAppFormClass(__classid(TMainForm));
  Uniguiregclasses::CPPInit();
}

#pragma startup TF3D06BF53C86454A8B2F94A3BC87922B__RegisterFormClass

//---------------------------------------------------------------------------
void __fastcall TMainForm::UniBitBtn3Click(TObject *Sender)
{
//开启后台服务删除开关
UniServerModule()->startFlag="1";

}
//---------------------------------------------------------------------------
void __fastcall TMainForm::UniBitBtn4Click(TObject *Sender)
{
//关闭后台服务删除开关
UniServerModule()->startFlag="0";

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

运行后访问http://127.0.0.1:8077,点击“开始后台删除”后系统会每隔一秒就去D:\testTimer\Win32\Debug\files目录下删除一次a.txt文件。你随意编辑一个a.txt文件放上去,一会儿就不见了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用C++ Builder 2010中使用MSComm32控件时,需要按照以下步骤操作: 1. 在工具箱中找到MSComm32控件并将其拖放到窗体上。这将在代码中生成相应的组件对象。 2. 可以通过双击MSComm32控件以打开其属性页面,并进行一些基本设置,如波特率、数据位数、停止位、奇偶校验等。 3. 在代码中,可以对MSComm32控件进行进一步的操作。首先,需要引入MSComm32的头文件,通常是#include <MSComm.h>。 4. 接下来,可以使用MSComm32控件的相关方法和事件来实现串口通信。例如,可以通过调用Open()方法打开串口连接,在发送数据时使用Output()方法,接收数据时使用Input()方法。 5. 此外,还可以使用MSComm32控件的事件来处理接收到的数据。例如,可以使用OnComm事件来响应串口接收到数据时的操作。通过判断事件参数的属性值,可以判断数据是何种类型(比如接收到的是何种信号),从而进行相应的处理。 总之,在C++ Builder 2010中使用MSComm32控件,通过配置控件属性和使用相关的方法和事件,可以实现串口通信的功能。这对于需要与外部设备进行数据交互的应用程序来说非常重要。 ### 回答2: 在C Builder 2010中使用mscomm32控件可以实现串口通信功能。 首先,在C Builder的工程中引入mscomm32.ocx控件。在IComponent库中,将"Microsoft Comm Control 6.0 (SP6)"添加到工具栏中。 然后,在窗体设计器中,将mscomm32控件拖放到窗体上。在属性编辑器中,可以设置串口的通信属性,如波特率、数据位、校验位、停止位等。 在代码中,可以使用mscomm32控件提供的方法和事件来实现串口通信操作。例如,使用Open方法打开串口连接,使用Write方法发送数据,使用Read方法接收数据等。另外,可以通过设置OnComm事件来处理收到的数据。 下面是一个简单的例子,演示了如何使用mscomm32控件进行简单的串口通信: ```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::Button1Click(TObject *Sender) { // 打开串口连接 Mscomm1->PortOpen = true; } void __fastcall TForm1::Button2Click(TObject *Sender) { // 发送数据 Mscomm1->Output = "Hello, mscomm32!"; Mscomm1->OutputLen = Mscomm1->Output.length(); Mscomm1->Output = ""; } void __fastcall TForm1::Mscomm1Comm(TObject *Sender) { // 接收数据 String data = Mscomm1->Input; Memo1->Lines->Add(data); } void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { // 关闭串口连接 Mscomm1->PortOpen = false; } ``` 在这个例子中,Button1的OnClick事件处理程序中打开串口连接,Button2的OnClick事件处理程序中发送数据。在Mscomm1的OnComm事件处理程序中,接收到数据后将其添加到Memo1中显示。在窗体的OnClose事件中关闭串口连接。 以上是在C Builder 2010中使用mscomm32控件的基本操作。根据具体需求,可以进一步扩展串口通信功能。 ### 回答3: 在使用C Builder 2010中的MSComm32控件时,可以通过以下步骤来使用控件: 首先,将MSComm32控件添加到C Builder 2010的工具箱中。在工具箱中右键单击空白区域,选择"Components",然后在弹出的对话框中找到并勾选"Microsoft Comm Control 6.0",点击"OK"按钮,将该控件添加到工具箱中。 接下来,在设计视图中将MSComm32控件添加到窗体上。在工具箱中找到MSComm32控件,并将其拖放到窗体上。 然后,可以通过设置MSComm32控件的属性来配置串口通信。在属性窗口中,可以设置串口号、波特率、数据位、校验位等参数,以满足具体的通信需求。 在代码中,可以使用MSComm32控件的方法和事件来实现串口通信的逻辑。比如,可以使用Open方法打开串口,使用Output方法发送数据,使用Input方法接收数据,使用事件如OnComm接收串口数据等。 在使用过程中,需要注意保证MSComm32控件的状态和串口设备的状态一致。比如,在打开串口之前,需要确保串口设备是打开的;在发送和接收数据时,需要注意处理可能出现的异常情况,比如超时、数据校验错误等。 总的来说,通过在C Builder 2010中使用MSComm32控件,我们可以方便地实现串口通信的功能,从而实现与外部设备的数据交互。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值