?? unit1.pas
字號(hào):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
rdCOM: TRadioGroup;
Label1: TLabel;
mSend: TMemo;
Label2: TLabel;
mReceive: TMemo;
btnOpenPort: TButton;
btnSend: TButton;
btnEnd: TButton;
btnReceive: TButton;
procedure btnSendClick(Sender: TObject);
procedure btnOpenPortClick(Sender: TObject);
procedure btnEndClick(Sender: TObject);
procedure btnReceiveClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure OpenComm; //打開通信端口
end;
var
Form1: TForm1;
hComm: THandle;
implementation
{$R *.DFM}
procedure TForm1.btnSendClick(Sender: TObject);
var
Temp:string;
lrc:LongWord;
begin
if (hComm=0) then exit; //檢查Handle值
Temp:=msend.Text ;//取得傳送的字符串
lrc:=strlen(Pchar(Temp));
//實(shí)際的傳送動(dòng)作
WriteFile(hComm,Pchar(Temp)^,Length(Temp), lrc, nil); // 送出數(shù)據(jù) //
end;
procedure TForm1.btnOpenPortClick(Sender: TObject);
begin
OpenComm;
end;
//以下是打開通信端口的程序
procedure TForm1.OpenComm;
var
cc:TCOMMCONFIG;
Temp:string;
begin
Temp:='COM'+inttostr(rdcom.ItemIndex+3); // 選擇所要打開的COM
hComm:=CreateFile(PChar(Temp), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, 0, 0); // 打開COM
if (hComm = INVALID_HANDLE_VALUE) then begin // 如果COM 未打開
MessageBox (0, 'error in opening the port!!','',MB_OK);
exit;
end;
GetCommState(hComm,cc.dcb); // 得知目前COM 的狀態(tài)
cc.dcb.BaudRate:=CBR_9600; // 設(shè)置波特率為9600
cc.dcb.ByteSize:=7; // 字節(jié)為 8 bit
cc.dcb.Parity:=EVENPARITY; // Parity 為 None
cc.dcb.StopBits:= TWOSTOPBITS; // 2 個(gè)Stop bit
if not SetCommState(hComm, cc.dcb) then begin// 設(shè)置COM 的狀態(tài)
MessageBox (0, 'error in port setting!!!','',MB_OK);
CloseHandle(hComm);
exit;
end;
end;
procedure TForm1.btnEndClick(Sender: TObject);
begin
SetCommMask(hcomm,$0);
CloseHandle(hComm);
close;
end;
procedure TForm1.btnReceiveClick(Sender: TObject);
var
Temp : string;
inbuff: array[0..2047] of Char;
nBytesRead, dwEvent, dwError:LongWORD ;
cs:TCOMSTAT;
begin
ClearCommError(hComm,dwError,@CS); //取得狀態(tài)
// 數(shù)據(jù)是否大于我們所準(zhǔn)備的Buffer
if cs.cbInQue > sizeof(inbuff) then begin
PurgeComm(hComm, PURGE_RXCLEAR); // 清除COM 數(shù)據(jù)
exit;
end;
ReadFile(hComm, inbuff,cs.cbInQue,nBytesRead,nil); // 接收COM 的數(shù)據(jù)
//轉(zhuǎn)移數(shù)據(jù)到變量中
Temp:=Copy(inbuff,1,cs.cbInQue);
mReceive.Text :=Temp; // 將數(shù)據(jù)顯示于Memo1 上
end;
end.
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -