关于MEMO控件的问题!请大神指教!

bjk3388 2017-08-27 09:24:32
我在memo控件中使用了如下代码:

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
xs: PChar;
begin
GetLocalTime(st);
xs:=Buffer;
if(xs='1') then
xs:='退出1#油泵选择!';
if(xs='a') then
xs:='选择1#油泵!';
memo1.Lines.Add(xs+DateTimetostr(now()));
end;

为什么在运行的时候,时间会在memo控件上出现2次?谢谢!
...全文
263 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjk3388 2017-08-30
  • 打赏
  • 举报
回复
好,我试试!
秋天之落叶 2017-08-29
  • 打赏
  • 举报
回复
1、搜索全部的 memo1.Lines.Add字段,看看是不是在什么地方触发了事件。 2、自己追踪一下变量,看看这个时间是哪个变量赋值的。
wdonghai 2017-08-29
  • 打赏
  • 举报
回复
你的COM口接收数据处理有问题,你只对可见字符'1'和'a'做了处理,有可能是COM设备还返回了其它内容, 所以你的代码中的xs:=Buffer,这样处理是不完整的。

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
var
 s:string;
  i:Word;
  p,pData:PByte;
begin
  GetLocalTime(st);
  s:='';
  GetMem(pData,BufferLength);
  Move(Buffer^, PByte(pData)^, BufferLength);
  p:=pData;
  i:=0;
  s:='';
  while i<BufferLength do
  begin
    s:=s+UpperCase(IntToHex(p^,2));
    inc(p);
    inc(i);
  end; 
  memo1.Lines.Add(s+DateTimetostr(now()));//用16进制格式返回接收到的数据
end;
秋天之落叶 2017-08-28
  • 打赏
  • 举报
回复
同意楼上,其他事件中应该还有add语句
bjk3388 2017-08-28
  • 打赏
  • 举报
回复
没有其它事件!
lyhoo163 2017-08-28
  • 打赏
  • 举报
回复
从代看,只显示“退出1#油泵选择!2017/8/28 7:16:49” 后面的 2017/8/28 7:16:49 是不是激发事件的代码中,有一条"memo1.Lines.Add(DateTimetostr(now())); 代码。 "

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧