com1接收數據的問題 |
尚未結案
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
我用的就是斑竹給的第一個link,
procedure TCOMMForm.FormShow(Sender: TObject);
begin
mscomm1.CommPort:=1; mscomm1.settings:='9600,n,8,1'; mscomm1.inputlen:=30; mscomm1.inbuffercount:=0; mscomm1.portopen:=true; ss:=''; i:=0; j:=0; assignfile(savef,'save1'); rewrite(savef); assignfile(readf,'read1'); //reset(readf); end; procedure TCOMMForm.MSComm1Comm(Sender: TObject);
var filenrc :char;
buffer :variant;
s1:string;
c :char;
begin case mscomm1.commEvent of comEvSend: begin while not(eof(readf)) do begin read(readf,filenrc); mscomm1.output:=filenrc; j:=j 1; lblDisplay.caption:=inttostr(j); if mscomm1.outbuffercount>=2 then break; end; end; comEvReceive: begin buffer:=mscomm1.Input;//此處得到的數據與條形碼不一致
edit2.Text:=BUFFER;
s1:=buffer;
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)) then
begin
lblDisplay.caption:='cr' inttostr(i);
memDisplay.lines.add(ss);
ss:='';
end;
end;
end; end;
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
爲什麽我讀取得數據不完整
例如條形碼為 1-823-119-1
EDIT.TEXT上得到的為119等不完整的信息,我單步調試BUFFER得到的數據是完整的.
在ONCOMM事件中我隻寫入了如下代碼:
buffer:=mscomm1.Input;
i:=pos(#13,buffer); //SCANNER 自動加上回車字符
public_str:=copy(buffer,1,i-1);
TEdit(COMMForm.ActiveControl).Text := public_str;
這樣是否會發生隻讀一半的情況,如何改善才能讀完整?
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
procedure TCOMMForm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
with query1 do
begin
close;
sql.Clear;
sql.Add('select * from sfis1.c_emp_desc_t where emp_no=''' edit1.Text '''');
open;
end;
edit1.Text:=query1.fieldbyname('emp_name').AsString;
end ;
end; procedure TCOMMForm.Edit1Change(Sender: TObject); begin
editchangecheck(edit1);
if go_keypress=1 then
edit1keypress(sender,key)
else exit;
end; procedure Tcommform.EditChangeCheck(edit:tedit);
begin
i:=0; //i :integer
key:=#10; //key :char
IF copy(buffer,1,1)<>' ' THEN
begin
for i:=1 to length(buffer) do
begin
if copy(buffer,i,1)=#13 then
begin
key:=#13;
buffer:='';
end;
end; if key=#13 then
go_keypress:=1 //go_keypress:integer
else begin
go_keypress:=0 ;
exit;
end;
end; end;
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |