Delphi ではシリアル ポート コントロールが利用できないため、まず ActiveX コントロール MSCOMM をコンポーネント パレットに追加する必要があります。これは非常に優れた制御であり、シリアル ポートを操作するだけでなく、モデムも制御できます。以下は、MSCOMM コントロールを使用してシリアル通信プログラムを開発する方法を示す具体的な例です。
Communication.dPR プロジェクトを作成し、フォームの Name プロパティを CommForm に変更し、タイトルを The Communication Test に変更して、[ファイル]/[名前を付けて保存] を選択して新しいフォームを CommFrm.pas として保存します。
対応するコードは次のとおりです。
変数の説明
変数
通信フォーム: TCommForm;
ss :文字列;
savef,readf:char のファイル;
i,j :倍長整数;
初期化
プロシージャ TCommForm.FormCreate(送信者: TObject);
始める
mscomm.commport:=1;
mscomm.settings:='9600,n,8,1';
mscomm.inputlen:=1;
mscomm.inbuffercount:=0;
mscomm.portopen:=true;
ss:='';
i:=0;
j:=0;
assignfile(savef,'save1');
書き換え(保存);
assignfile(readf,'read1');
リセット(readf);
終わり;
設定OK
プロシージャ TCommForm.btnconfirmClick(送信者: TObject);
始める
mscomm.portopenの場合
mscomm.portopen:=false;
mscomm.commport:=strtoint(edtCommport.text);
mscomm.settings:=edtCommsetting.Text;
終わり;
譲渡イベント
プロシージャ TCommForm.MSCommComm(送信者: TObject);
変数
filenrc:文字;
バッファ:バリアント;
s1: 文字列;
c:文字;
始める
mscomm.commイベントのケース
comEvSend:
始める
while not(eof(readf)) する
始める
read(readf,filenrc);
mscomm.output:=filenrc;
j:=j+1;
lblDisplay.caption:=inttostr(j);
mscomm.outbuffercount>=2 の場合
壊す;
終わり;
終わり;
comEvReceive:
始める
バッファ:=mscomm.Input;
s1:=バッファ;
c:=s1[1];
ss:=ss+c;
i:=i+1;
lblDisplay.caption:=c+inttostr(i);
write(savef,c);
if (c=chr(10))or(c=chr(13))
始める
lblDisplay.caption:='cr'+inttostr(i);
memDisplay.lines.add(ss);
ss:='';
終わり;
終わり;
終わり;
終わり;