📄 tcomm.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 + -