⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcomm.h

📁 个人早期编写的支持wavecom modem的串口短信控件
💻 H
字号:
//---------------------------------------------------------------------------

#ifndef TCommH
#define TCommH
//自定义消息
#define WM_GETCOMMDATA (WM_USER+100)
#define WM_SENDCOMMSTATE (WM_USER+101)
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
//---------------------------------------------------------------------------
//
//---------------------------------------------------------------------------
//收发线程交互信息量
HANDLE hComm;
HANDLE FHWnd;
HANDLE sendEvent;
HANDLE okEvent;
Byte sendControl;

//端口相关属性
enum TParity{None,Odd,Even,Mark,Space};
enum TStopBits{Bit1,Bit1_5,Bit2};
enum TByteSize{Bit5,Bit6,Bit7,Bit8};
enum THandShaking{comNone,comXonXoff,comRTS,comRTSXonXoff};
enum TDtrControl{DtrDisable,DtrEnable,DtrHandshake};
enum TRtsControl{RtsDisable,RtsEnable,RtsHandshake,RtsToggle};
enum TSetting {ParityCheck, OutxCtsFlow,OutxDsrFlow,DsrSensitivity,TxContinueOnXoff,OutxXonXoffFlow,InxXonXoffFlow,IsParityReplace,IgnoreNullChar,AbortOnError};
typedef Set <TSetting, ParityCheck, AbortOnError> TSettings;
//---------------------------------------------------------------------------
//Class TCommBuff
//---------------------------------------------------------------------------
class PACKAGE TCommBuff
{
private:
        String FPhone;
        char far FMsg[1024];
        long FSize;
        void FSetPhone(String NewPhone);
        String FGetPhone(void);
        long FGetSize(void);
public:
        TCommBuff();
        virtual ~TCommBuff();
        __property String Phone = {read = FGetPhone,write = FSetPhone };
        __property long Size  = { read = FGetSize  };
        void FSetMsg(char far *NewMsg,long Size);
        void FGetMsg(char far *AimMsg,long Size);
};
//---------------------------------------------------------------------------
//Class TReadThread
//---------------------------------------------------------------------------
class PACKAGE TReadThread : public TThread
{
private:
        //接收队列
        TQueue* ReadQueue;
        String PhoneNum;
        String SMSBuff;
        bool HaveMsg;
        Byte __fastcall FWaveCom(void);
protected:
        void __fastcall Execute();
public:
        bool FIsLocal;
        int FTimeOut;
        void __fastcall FClearQueue(void);
        bool __fastcall QueueIsNULL(void);
        __fastcall virtual TReadThread(bool CreateSuspended);
        __fastcall virtual ~TReadThread(void);
__published:

};
//---------------------------------------------------------------------------
//Class TWriteThread
//---------------------------------------------------------------------------
class PACKAGE TWriteThread : public TThread
{
private:
        //发送队列
        TQueue* WriteQueue;
protected:
        void __fastcall Execute();
public:
        void __fastcall FClearQueue(void);
        bool __fastcall QueueIsNULL(void);
        __fastcall virtual TWriteThread(bool CreateSuspended);
        __fastcall virtual ~TWriteThread(void);
        void __fastcall SendMsg(TCommBuff *NewSendBuff);
__published:

};
//---------------------------------------------------------------------------
//Class TTComm
//---------------------------------------------------------------------------
class PACKAGE TTComm : public TComponent
{
private:
        //接收及发送线程
        TReadThread* ReadThread;
		TWriteThread* WriteThread;
        
        AnsiString FCommPort;
        bool FPortOpen;
        unsigned FBaudRate;
        TParity FParity;
        TStopBits FStopBits;
        TByteSize FByteSize;
        THandShaking FHandShaking;
        TDtrControl FDtrControl;
        TRtsControl FRtsControl;
        TSettings FSettings;
        bool FDTREnable;
        bool FRTSEnable;
        unsigned FXonLim;
        unsigned FXoffLim;
        char FParityReplace;
        char FXonChar;
        char FXoffChar;
        //异常处理
        //HANDLE ECommError;

        //方法
        void __fastcall FSetPortOpen(bool IsPortOpen);
        void __fastcall SetProperty(void);
        void __fastcall FSetBaudRate(unsigned NewBaudRate);
        void __fastcall FSetParity(TParity NewParity);
        void __fastcall FSetStopBits(TStopBits NewStopBits);
        void __fastcall FSetByteSize(TByteSize NewByteSize);
        void __fastcall FSetSettings(TSettings NewSettings);
        void __fastcall FSetHandShaking(THandShaking NewHandShaking);
        void __fastcall FSetDTREnable(bool NewDTREnable);
        void __fastcall FSetRTSEnable(bool NewRTSEnable);
        void __fastcall FSetXonLim(unsigned NewXonLim);
        void __fastcall FSetXoffLim(unsigned NewXoffLim);
        void __fastcall FSetParityReplace(char NewParityReplace);
        void __fastcall FSetXonChar(char NewXonChar);
        void __fastcall FSetXoffChar(char NewXoffChar);
        void __fastcall FSetTimeOut(int NewTimeOut);
        int __fastcall FGetTimeOut(void);
        void __fastcall FSetIsLocal(bool NewIsLocal);
        bool __fastcall FGetIsLocal(void);
        void __fastcall (__closure *lpCommData) (TObject *Sender, String Phone,char far *Msg,long Size);
        void __fastcall (__closure *lpSendState) (TObject *Sender, int State);

protected:
        MESSAGE void __fastcall CommWndProc(TMessage &msg);
        virtual void __fastcall CommData(String Phone,char far *Msg,long Size);
        virtual void __fastcall SendState(int State);
public:
        __fastcall virtual TTComm(TComponent* Owner);
        __fastcall virtual ~TTComm(void);
        __property bool PortOpen = {read = FPortOpen, write = FSetPortOpen, nodefault};
        __property bool IsLocal = {read = FGetIsLocal,write = FSetIsLocal,nodefault};
        void __fastcall SendMsg(String Phone,char far *Msg,long Size);
        void __fastcall SendMsg(char far *Msg,long Size);
__published:
        __property AnsiString CommPort = {read = FCommPort, write = FCommPort, nodefault};
        __property unsigned BaudRate = {read = FBaudRate, write = FSetBaudRate, nodefault};
        __property TParity Parity = {read = FParity,write =FSetParity,nodefault};
        __property TStopBits StopBits = {read = FStopBits,write =FSetStopBits,nodefault};
        __property TByteSize ByteSize = {read = FByteSize,write =FSetByteSize,nodefault};
        __property TSettings Settings = {read = FSettings,write = FSetSettings,nodefault};
        __property THandShaking HandShaking = {read = FHandShaking,write =FSetHandShaking,nodefault};
        __property bool DTREnable = {read = FDTREnable,write = FSetDTREnable,nodefault};
        __property bool RTSEnable = {read = FRTSEnable,write = FSetRTSEnable,nodefault};\
        __property unsigned XonLim = {read = FXonLim,write = FSetXonLim,nodefault};
        __property unsigned XoffLim = {read = FXoffLim,write = FSetXoffLim,nodefault};
        __property char ParityReplace = {read = FParityReplace,write = FSetParityReplace,nodefault};
        __property char XonChar = {read = FXonChar,write = FSetXonChar,nodefault};
        __property char XoffChar = {read = FXoffChar,write = FSetXoffChar,nodefault};
        __property int TimeOut = {read = FGetTimeOut,write = FSetTimeOut,nodefault};
        __property void __fastcall (__closure *OnCommData) (TObject *Sender,String Phone,char far *Msg,long Size) = { read = lpCommData, write=lpCommData };
        __property void __fastcall (__closure *OnSendState) (TObject *Sender,int State) = { read = lpSendState, write=lpSendState };

BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_GETCOMMDATA,TMessage,CommWndProc)
        MESSAGE_HANDLER(WM_SENDCOMMSTATE,TMessage,CommWndProc)
END_MESSAGE_MAP(TComponent)
};
//---------------------------------------------------------------------------
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -