1.SPCOMM控件我已经动态创建好,但当执行STARTCOMM时,会出现问题?
2.应如何为控件定义事件(如:ONRECEIVEDATA)?又如何知道哪个控件有事件发生呢?小弟第一问题的程序部分如下:
const
iMaxComNumber = 4;procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer ;
begin
i := 0 ;
while i < iMaxComNumber do
begin
tSPComm[i] := TComm.Create(self); tSPComm[i].CommName := 'COM' + IntToStr(i + 1);
tSPComm[i].Name := 'Comm' + IntToStr(i + 1);
tSPComm[i].Tag := i+1; memResult.Lines.Add('Com' + IntToStr(i + 1) + ' create OK.'); Inc(i);
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
i : Integer ;
begin
i := 0 ;
while i < iMaxComNumber do
begin
try
tSPComm[i].StartComm;
memResult.Lines.Add('Com' + IntToStr(i + 1) + ' start OK.');
except
i := iMaxComNumber;
end;
Inc(i);
end;
end;谢谢!
2.应如何为控件定义事件(如:ONRECEIVEDATA)?又如何知道哪个控件有事件发生呢?小弟第一问题的程序部分如下:
const
iMaxComNumber = 4;procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer ;
begin
i := 0 ;
while i < iMaxComNumber do
begin
tSPComm[i] := TComm.Create(self); tSPComm[i].CommName := 'COM' + IntToStr(i + 1);
tSPComm[i].Name := 'Comm' + IntToStr(i + 1);
tSPComm[i].Tag := i+1; memResult.Lines.Add('Com' + IntToStr(i + 1) + ' create OK.'); Inc(i);
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
i : Integer ;
begin
i := 0 ;
while i < iMaxComNumber do
begin
try
tSPComm[i].StartComm;
memResult.Lines.Add('Com' + IntToStr(i + 1) + ' start OK.');
except
i := iMaxComNumber;
end;
Inc(i);
end;
end;谢谢!
解决方案 »
- 请问DELPHI ShellExecute(Handle,'open','www.baidu.com',nil,nil,1)中的网址可不可以用变量代替?
- 关于取字符串的问题
- 谁有 PsFRExportFilters for delphi 7.0 控件的最新注册版?万分感谢!在线等!!
- 自定义纸张打印问题,急,谢谢
- adotable中filter的用法..
- 我们这样的公司真的能开发软件吗?
- 有关EXCEL的问题
- 需要几个传统一点的图标:)
- !!!!!!!!挑战极限3---修改正在运行的可执行文件(PE)的数据并把他保存在该程序的文件中---!!!!!!!!!!!你能吗?!!!!
- 怎样用delphi写出端口扫描的程序,要速度很快!拜托了!
- 关于UDP广播
- 一个难题呀!!
iMaxComNumber = 4;
var
Form1: TForm1;
tSPComm:array[1..10] of TComm;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer ;
begin
i := 0 ;
while i < iMaxComNumber do
begin
tSPComm[i] := TComm.Create(self); tSPComm[i].CommName := 'COM' + IntToStr(i + 1);
tSPComm[i].Name := 'Comm' + IntToStr(i + 1);
tSPComm[i].Tag := i+1;
tSPComm[i].OnReceiveData:=Comm10ReceiveData; memResult.Lines.Add('Com' + IntToStr(i + 1) + ' create OK.'); Inc(i);
end;
end;
procedure TForm1.Comm10ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin
memResult.Lines.Add('Read From Com'+IntToStr(TComm(Sender).Tag));
end;procedure TForm1.Button2Click(Sender: TObject);
var
i : Integer ;
begin
i := 0 ;
while i < iMaxComNumber do
begin
try
tSPComm[i].BaudRate:=9600;
tSPComm[i].ByteSize:=_8;
tSPComm[i].StopBits:=_1;
tSPComm[i].StartComm;
memResult.Lines.Add('Com' + IntToStr(i + 1) + ' start OK.');
except
// i := iMaxComNumber;
end;
Inc(i);
end;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
tSPComm[2].WriteCommData('12345',5);end;
程序如下:
unit FormMain;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm, Registry ;const
iMaxComNumber = 4;type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
memResult: TMemo;
GroupBox2: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Comm99: TComm;
Button7: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure ComReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
tSPComm : array [0..3] of TComm;
sReceive : String;implementation{$R *.dfm}//动态创建SPCOMM
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer ;
begin
i := 0 ;
while i < iMaxComNumber do
begin
tSPComm[i] := TComm.Create(self); tSPComm[i].CommName := 'COM' + IntToStr(i + 1);
tSPComm[i].Name := 'Comm' + IntToStr(i + 1);
tSPComm[i].Tag := i+1; tSPComm[i].OnReceiveData := ComReceiveData; memResult.Lines.Add('Com' + IntToStr(i + 1) + ' create OK.'); Inc(i);
end;
end;//打开串口
procedure TForm1.Button2Click(Sender: TObject);
var
i : Integer ;
begin
i := 0 ;
while i < iMaxComNumber do
begin
try
tSPComm[i].BaudRate:=9600;
tSPComm[i].ByteSize:=_8;
tSPComm[i].StopBits:=_1;
tSPComm[i].Parity := NONE;
tSPComm[i].StartComm;
memResult.Lines.Add('Com' + IntToStr(i + 1) + ' start OK.');
except
memResult.Lines.Add('Com' + IntToStr(i + 1) + ' start Error.');
end;
Inc(i);
end;
end;//关闭串口
procedure TForm1.Button4Click(Sender: TObject);
var
i : Integer ;
begin
i := 0 ;
while i < iMaxComNumber do
begin
try
tSPComm[i].StopComm;
memResult.Lines.Add('Com' + IntToStr(i + 1) + ' stop OK.');
except
memResult.Lines.Add('Com' + IntToStr(i + 1) + ' stop Error.');
end;
Inc(i);
end;
end;//串口检测
procedure TForm1.Button6Click(Sender: TObject);
var
i : Integer ;
pcATCommand : PChar;
iATCommandLen : integer;
begin
pcATCommand := PChar(edit1.Text + chr(13));
iATCommandLen := strlen(pcATCommand);
sReceive := 'fdas'; i := 0 ;
while i < iMaxComNumber do
begin
tSPComm[i].WriteCommData(pcATCommand,iATCommandLen);
// sleep(1000);
{
if Pos('OK',sReceive) <> 0 then
begin
memResult.Lines.Add('Com' + IntToStr(i + 1) + ' connecting is a equipment.');
memResult.Lines.Add(sReceive);
end
else
begin
memResult.Lines.Add('Com' + IntToStr(i + 1) + ' connecting is NOT a equipment.');
tSPComm[i].StopComm;
tSPComm[i].Destroy;
// tSPComm[i].Handle := INVALID_HANDLE_VALUE;
end;
} memResult.Lines.Add(sReceive);
Inc(i);
end;
memResult.Lines.Add('Check over.');
end;//串口接收事件
procedure TForm1.ComReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin
memResult.Lines.Add('Read From Com'+IntToStr(TComm(Sender).Tag));
SetLength(sReceive,BufferLength); //接收RS232的数据并显示Memo1上。
Move(Buffer^,PChar(sReceive)^,BufferLength);
memResult.Lines.Add(sReceive);
// memResult.Invalidate; //无效
end;end.
多谢!