问题的标题是: Spcomm (100分 )来自 :哈哈! 时间 :99-7-28 11:12:41 
哪位专家能给我一个较详细的使用Spcomm的例子(包括属性设置)。
我是第一次在这里提问(教育网太难上、太慢),多多包涵!  来自 :amo 时间 :1999-07-28 13:22:14 
如果没记错,好象控件中带有例子吧!
你从哪down的?  来自 :huhuhu 时间 :1999-07-28 15:54:27 
呵呵,正好我刚用过。好象简单极了。声明: Comm1:TComm;
开始: Comm1.StartComm;
写数据: strSend := 'asdfasdf'
Comm1.WriteCommData(PChar(strSend) , Length(strSend));读数据:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
I : Integer;
begin
Move(pdes , Buffer , BufferLength);
end;属性设置好象也很简单,抄下来太麻烦了。  来自 :哈哈! 时间 :1999-07-29 09:21:48 
amo:我是看了例子的,只是觉得过于简单。
或者更改一下我的提问:详述用SPCOMM接收串口数据的流程。
具体一点说,就是:SPCOMM控件工作是否只需StartComm,然后在ReceiveData
事件中接收即可(读数据)?
我在1.0时用WINAPI写过一段,打开串口后还得写DCB参数等,然后不断读数据缓
冲区,直到数据完。
用SPCOMM,缓冲区默认为4096,如果我的数据大于此数,它的接收是什么情况?
程序中应怎样做?
不好意思,写得比较琐碎,只因我不懂的东西太多,离开Delphi的时间太久。
谢谢amo和huhuhu两位,也先谢谢准备回答我问题的朋友!
 来自 :pount 时间 :1999-07-29 12:26:15 
我也希望知道  来自 :aho 时间 :1999-07-29 23:11:36 
从我的code中cut出来的。初始化合接受数据部份。
数据太多时好象也不会有问题,windows会帮你处理的。procedure TfrmSMSComm.FormCreate(Sender: TObject);
var
i : Integer;
begini := 1; // Get you port number by your methodSMSPort := TComm.Create(Self);
if i = 1 then
SMSPort.CommName := '\\.\COM1';
if i = 2 then
SMSPort.CommName := '\\.\COM2';
if i = 3 then
SMSPort.CommName := '\\.\COM3';
if i = 4 then
SMSPort.CommName := '\\.\COM4';SMSPort.BaudRate := 9600;
SMSPort.Bytesize := _8;
SMSPort.StopBits := _1;
SMSPort.Outx_CtsFlow := false;
SMSPort.Outx_DsrFlow := false;
SMSPort.ParityCheck := false;
SMSPort.Outx_XonXoffFlow := False;
SMSPort.OnReceiveData := SMSPortReceiveData;SMSPort.Startcomm; // Start comm when everythink is ok
end;procedure TfrmSMSComm.SMSPortReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin
Move(Buffer^, LinkBuffer[LinkBuffPtr], BufferLength);
LinkBuffPtr := LinkBuffPtr + BufferLength; 
end;
 来自 :哈哈! 时间 :1999-08-01 10:22:29 
还有新的指教吗?  来自 :bluebird 时间 :1999-08-02 09:10:42 
就是这样,SPCOMM控件工作只需StartComm,然后在ReceiveData事件中接收即可procedure TCommfrm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
type
IArr = ^integer;
var RevP : array [1..2048] of byte;
i : integer;
CommRevStr : ShortString; //í¨Ñ¶μÃμ½μÃêμ¼ê×Ö·û′®
begin
SetLength(CommRevStr,BufferLength);
Move(IArr(buffer)^,Revp,bufferLength);
For i:=1 to BufferLength do
begin
CommrevStr[i] := Char(Revp[i]);
Edit1.text := Edit1.Text + inttostr(Revp[i])+' '; 
end;
try
HandleRevAllStr(CommRevStr);
except
showMessage('×Ö·û′®′|àí′íÎó');
end;
end;procedure TCommFrm.SetCom;
var RegFile : TRegIniFile;
begin
RegFile := TRegIniFile.Create('KJ99');
try
Comm1.CommName := RegFile.ReadString(COMMSEC, 'DownCom','COM1');
Comm1.BaudRate := RegFile.ReadInteger(COMMSEC,'DownBaudRate',1200);
finally
RegFile.Free;
end;
end;在主程序中写就可以了
Setcom;
Comm1.StartComm;  来自 :哈哈! 时间 :1999-08-02 13:59:26 
请教aho:
我希望知道怎么判断ReceiveData事件结束?也就是说,在应用程序中,我该在什么地方处理ReceiveData里收到的数据?特别是当数据大于接收数据缓冲区时,怎么判断何时接收数据结束?判断是否文件尾?
你说代码是从你的code中cut出来的,能否再详细指点一下?愿意的话也可直接mail我。
谢谢aho,谢谢各位!  来自 :datoncg 时间 :1999-08-02 16:26:39 
我现在正在找关于‘COM'串口的控件,你们谁有其详细的,请发给我。有详细
的例子最好!
my email
[email protected]  来自 :xww 时间 :1999-08-02 16:34:47 
也发一份给我. 我的E-MAIL:
[email protected]  来自 :diky 时间 :1999-08-03 20:57:18 
也请发一份给我,我的E-MIAL是:
[email protected]
谢谢!
 来自 :diky 时间 :1999-08-04 11:14:33 
我用的时候,编译时出错
"Error opening serial port."
还有bluebird说的"HandleRevAllStr(CommRevStr);"编译时也不能通过呀。
huhuhu给的 ” Move(pdes , Buffer , BufferLength);"中"pdes"是怎么用的?请两位大侠指点。
谢谢!  来自 :aho 时间 :1999-08-06 00:08:42 
onreceivedata事件的调用是在spcomm初始化的时候在ReadIntervalTimeout
属性中确定的,就是数据接受后在没有从满buffer时,如果最后一个数据到达
后等待readintervaltimerout毫秒,如果没有数据再进来就触发receivedata.至于diky预到的错误,用我的例子代码中的文件名,既在端口名之前加上一个
"\\.\", 如COM1就写成"\\.\COM1",否则WINDOWS回去试图打开当前目录下
的叫COM1的文件.我在163上,到这里每次都要代理,所以回答晚了.见谅.
如果有需要也可以直接EMAIL我.  来自 :哈哈! 时间 :1999-08-07 12:13:17 
不知坛主能否帮我分配分数?我想再添100分:给aho 180分 给 bluebird 10分 给给 huhuhu 10分。  来自 :bluebird 时间 :1999-08-07 15:34:04 
可以看我的已回答的串口有关问题  来自 :刘光涛 时间 :1999-11-10 16:27:21 
SPCOMM里的事件有几个?我的SPCOMM控件的事件好象不全,各位能不能给我发一个SPCOMM控件,我的E-Mail为[email protected].谢谢。  来自 :guo_qpeter 时间 :1999-11-11 00:34:52 
你的SPCOMM 版本. 可到 VCLXX.COM 上去但一个.还有说明.
如有问题 请来信联系  来自 :3h 时间 :2000-01-31 09:26:38 
再添分就没有办法了,不过现在基本按您的意思办了。