在DELPHI2010下使用SetLength函数初始化一个字符型变量后,奇怪这个字符变量有就内容了!
var
ComRev:string;//接收到的字符串
begin
//在运行下面这一行语句前测试ComRev的值是‘’空的,
setlength(ComRev, BufferLength);
//但是在执行完上面这行语句后,ComRev变量有就内容了,而且内容很奇怪,有时是某个控件的CAPTION属性值,有时是某个控件的名称等。
......
end; 请教各位有没有遇到过这个问题?能是什么原因?如何解决?
var
ComRev:string;//接收到的字符串
begin
//在运行下面这一行语句前测试ComRev的值是‘’空的,
setlength(ComRev, BufferLength);
//但是在执行完上面这行语句后,ComRev变量有就内容了,而且内容很奇怪,有时是某个控件的CAPTION属性值,有时是某个控件的名称等。
......
end; 请教各位有没有遇到过这个问题?能是什么原因?如何解决?
解决方案 »
- ListView的OnChanging事件问题,我在Onchanging事件中校验输入,如果通过校验,则允许改变item
- 声明了一个ADODataSet变量,引用时出错,请大侠指点(附代码)。
- 使用TWebBrowser控件,如何屏蔽任何的弹出窗口.
- 高手帮忙
- indy在异外断网\网络状态不好,他有这样的功能来检测吗?如果没有那INDY比SOCKET好在哪里?
- rave 5.1打印汉字出现问号,一个字对应两个问号,怎么回事啊?
- 为什么delphi中没有表格输入的控件?
- 关于发送邮件的一个超极简单的问题!帮小弟解决一下吧!
- 小问题来者给分
- 如何用程式来修改默认打印机的设置?
- 这么热的天还穿5条裤衩,散个分。。。
- adoquery用多个条件进行查询的问题
还有我刚才将类型改过后,在使用setlength后,这个变量一样会有内容,不过内容不一样了,全变成了ANSI码
procedure TMainForm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
ComRev:AnSiString;//接收到的字符串
begin
//sleep(200);
setlength(ComRev, BufferLength);
FillChar(comrev,sizeof(comrev),0);
Move(Buffer^, PChar(ComRev)^, BufferLength);
if ComRev<>'' then
begin
strtmp:=trim(ComRev);
statusbar.Panels[5].Text:=strtmp;
memo1.Lines.Add(strtmp);
statusbar.Panels[3].Text:='正常';
if (length(strtmp)>=7) and (strtmp[1]<>'A') then
begin
if FCService=nil then
FCService:=tFCService.Create(application);
FCService.edit1.Text:=strtmp;
FCService.bitbtn7.Click;
FCService.ShowModal;
end;
end
else
statusbar.Panels[3].Text:='未联接';
end;
修改后的代码如下:
procedure TMainForm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
ComRev:array[1..20] of byte;
i:integer;
begin
Move(Buffer^, PChar(@ComRev[1])^, BufferLength);
if bufferlength>0 then
begin
for i := 1 to bufferlength do
strtmp:=strtmp+chr(comrev[i]);
strtmp:=trim(strtmp);
statusbar.Panels[5].Text:=strtmp;
memo1.Lines.Add(strtmp);
statusbar.Panels[3].Text:='正常';
if (length(strtmp)>=7) and (strtmp[1]<>'A') then
begin
if FCService=nil then
FCService:=tFCService.Create(application);
FCService.edit1.Text:=strtmp;
FCService.bitbtn7.Click;
FCService.ShowModal;
end;
end
else
statusbar.Panels[3].Text:='未联接';
end;
这么明显的错误都看不出来