Delphi에는 직렬 포트 컨트롤이 없으므로 먼저 ActiveX 컨트롤 MSCOMM을 컴포넌트 팔레트에 추가해야 합니다. 이것은 직렬 포트를 작동할 수 있을 뿐만 아니라 모뎀을 제어할 수도 있는 매우 좋은 제어입니다. 다음은 MSCOMM 컨트롤을 사용하여 직렬 통신 프로그램을 개발하는 방법을 보여 주는 구체적인 예입니다.
Communication.dPR 프로젝트를 만들고, 양식의 이름 속성을 CommForm으로 변경하고, 제목을 The Communication Test로 변경하고, 파일/다른 이름으로 저장을 선택하여 새 양식을 CommFrm.pas로 저장합니다.
해당 코드는 다음과 같습니다.
변수 설명
var
통신양식: TCommForm;
ss :문자열;
savef,readf:문자 파일;
i,j :longint;
초기화
절차 TCommForm.FormCreate(Sender: TObject);
시작하다
mscomm.commport:=1;
mscomm.settings:='9600,n,8,1';
mscomm.inputlen:=1;
mscomm.inbuffercount:=0;
mscomm.portopen:=true;
ss:='';
나는:=0;
j:=0;
할당파일(savef,'save1');
다시 쓰기(저장);
할당파일(readf,'read1');
재설정(readf);
끝;
설정 확인
절차 TCommForm.btnConfirmClick(Sender: TObject);
시작하다
mscomm.portopen이면
mscomm.portopen:=false;
mscomm.commport:=strtoint(edtCommport.text);
mscomm.settings:=edtCommsetting.Text;
끝;
전송 이벤트
프로시저 TCommForm.MSCommComm(Sender: TObject);
var
파일nrc:문자;
버퍼:변형;
s1: 문자열;
c:문자;
시작하다
mscomm.comm이벤트의 경우
comEv보내기:
시작하다
동안 not(eof(readf)) do
시작하다
읽기(readf,filenrc);
mscomm.output:=filenrc;
j:=j+1;
lblDisplay.caption:=inttostr(j);
mscomm.outbuffercount>=2이면
부서지다;
끝;
끝;
comEv수신:
시작하다
버퍼:=mscomm.Input;
s1:=버퍼;
c:=s1[1];
ss:=ss+c;
나는:=i+1;
lblDisplay.caption:=c+inttostr(i);
쓰기(저장,c);
if (c=chr(10))또는(c=chr(13)) then
시작하다
lblDisplay.caption:='cr'+inttostr(i);
memDisplay.lines.add(ss);
ss:='';
끝;
끝;
끝;
끝;