delphi在线程中的自定义函数中使用控件的问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 19:23:13
uses
Classes, SysUtils, spComm;

type
sjcj = class(TThread)
comm : Tcomm;//这里定义的控件在Execute中调用无任何问题
private
{ Private declarations }

protected
procedure Execute; override;
......

procedure whitedata(adr,jc : byte; var byt : array of byte);
begin
byt[0] := adr;
byt[1] := $03;
byt[2] := $00;
byt[3] := jc;
byt[4] := $00;
byt[5] := $04;
getCRC(byt,6,byt[7],byt[6]);
comm.WriteCommData(@byt,8); //但是在这里怎么都通不过,为什么啊
end;

刚学delphi,唉,看半天书没找到毛病,求大虾帮帮忙啊!!

SPCOMM的主要属性,方法和事件

1.属性

CommName:填写COM1,COM2…等串口的名字,在打开串口前,必须填写好此值。

BaudRate:设定波特率9600,4800等,根据实际需要来定,在串口打开后也可更改波特率,实际波特率随之更改。

ParityCheck:奇偶校验。

ByteSize:字节长度_5,_6,_7,_8等,根据实际情况设定。

Parity:奇偶校验位

pBits:停止位

SendDataEmpty:这是一个布尔属性,为true时表示发送缓存为空,或者发送队列里没有信息;为False时表示表示发送缓存不为空,或者发送队列里有信息。

2.方法

Startcomm过程用于打开串口,当打开失败时通常会报错,错误主要有7种:
⑴串口已经打开 ;
⑵打开串口错误 ;
⑶文件句柄不是通讯句柄;
⑷不能够安装通讯缓存;
⑸不能产生事件 ;
⑹不能产生读进程;
⑺不能产生写进程;

StopComm过程用于关闭串口,没有返回值。

函数WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word ): boolean 用于发送一个字符串到写线程,发送成功返回true,发送失败返回false, 执行此函数将立即得到返回值,发送操作随后执行。函数有两个参数,其中 pdatatowrite是要发送的字符串,dwsizeofdatatowrite 是发送的长度。

3.事件

OnReceiveData : procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word) of object
当输入缓存有数据时将触发该事件,在这里可以对从串口收到的数据进行处理。Buffer中是收到的数据,bufferlength是收到的数据