ไม่มีการควบคุมพอร์ตอนุกรมใน Delphi ดังนั้นก่อนอื่นคุณต้องเพิ่มตัวควบคุม ActiveX MSCOMM ลงในจานสีส่วนประกอบ นี่เป็นการควบคุมที่ดีมาก ไม่เพียงแต่สามารถใช้งานพอร์ตอนุกรมเท่านั้น แต่ยังควบคุมโมเด็มด้วย ต่อไปนี้เป็นตัวอย่างเฉพาะเพื่อแสดงวิธีการใช้ตัวควบคุม MSCOMM เพื่อพัฒนาโปรแกรมการสื่อสารแบบอนุกรม
สร้างโครงการ Communication.dPR เปลี่ยนคุณสมบัติ Name ของฟอร์มเป็น CommForm เปลี่ยนชื่อเป็น The Communication Test และเลือก File/Save As เพื่อจัดเก็บฟอร์มใหม่เป็น CommFrm.pas
รหัสที่เกี่ยวข้องมีดังนี้:
คำอธิบายตัวแปร
var
CommForm: TCommForm;
เอสเอส :string;
savef,readf:ไฟล์ของถ่าน;
ฉัน,j :longint;
การเริ่มต้น
ขั้นตอน TCommForm.FormCreate (ผู้ส่ง: TObject);
เริ่ม
mscomm.commport:=1;
mscomm.settings:='9600,n,8,1';
mscomm.inputlen:=1;
mscomm.inbuffercount:=0;
mscomm.portopen:=จริง;
เอสเอส:='';
ฉัน:=0;
เจ:=0;
มอบหมายไฟล์(savef,'save1');
เขียนใหม่ (savef);
มอบหมายไฟล์(readf,'read1');
รีเซ็ต (readf);
จบ;
การตั้งค่าตกลง
ขั้นตอน TCommForm.btnConfirmClick (ผู้ส่ง: TObject);
เริ่ม
ถ้า mscomm.portopen แล้ว
mscomm.portopen:=false;
mscomm.commport:=strtoint(edtCommport.text);
mscomm.settings:=edtCommsetting.ข้อความ;
จบ;
เหตุการณ์การโอน
ขั้นตอน TCommForm.MSCommComm (ผู้ส่ง: TObject);
var
filenrc:ถ่าน;
บัฟเฟอร์: ตัวแปร;
s1: สตริง;
ค:ถ่าน;
เริ่ม
กรณี mscomm.commเหตุการณ์ของ
มาส่ง:
เริ่ม
ในขณะที่ไม่(eof(readf)) ทำ
เริ่ม
อ่าน(readf,filenrc);
mscomm.output:=filenrc;
เจ:=เจ+1;
lblDisplay.caption:=inttostr(j);
ถ้า mscomm.outbuffercount>=2 แล้ว
หยุดพัก;
จบ;
จบ;
มารับ:
เริ่ม
บัฟเฟอร์:=mscomm.Input;
s1:=บัฟเฟอร์;
ค:=s1[1];
เอสเอส:=เอสเอส+ค;
ฉัน:=ฉัน+1;
lblDisplay.caption:=c+inttostr(i);
เขียน(savef,c);
ถ้า (c=chr(10))หรือ(c=chr(13)) แล้ว
เริ่ม
lblDisplay.caption:='cr'+inttostr(i);
memDisplay.lines.add(เอสเอส);
เอสเอส:='';
จบ;
จบ;
จบ;
จบ;