请教:下面程序中的Application.ProcessMessages有什么用?copy(instring,1,6)的含义是什么?RTD:=strtoint('$'+RTDS);中的'$'有什么用

时间:2020-12-04 23:43:31
procedure Tform1.San();
var
 instring, buffer,RTDS,PWDS:string;
 RTDV,PWDV:Single;
 RTD,PWD:integer;
 label lab1;
begin
  StatusBar1.Panels[1].Text:='状态: 正在采集!';


    {  buffer:=chr($41);
     mscomm1.Output:=buffer;

      repeat
      Application.ProcessMessages;
      td:=td+1;
      until td>100000;

       repeat
         Application.ProcessMessages;
         tz:=tz+1;
         if tz>1000 then
           begin
           edit1.Clear;
           edit2.Clear;
           edit3.Clear;
           edit4.Text:='通讯失败!';
           goto lab1;
         end;
      until mscomm1.InBufferCount>11;
      edit4.Text := '通讯正常!';
     instring:=mscomm1.Input;

         RTDS:=copy(instring,1,6);
         PWDS:=copy(instring,7,4);
         RTD:=strtoint('$'+RTDS);
         PWD:=strtoint('$'+PWDS);
         RTDV:=(RTD-8388608)/504.6+CWD;
         //8388608=8000000H,为RTD 0度对应值,504.6为1度对应的点数
         PWDV:=PWD/256; //256为片内RTD1度对应的点数}

14 个解决方案

#1


Application.ProcessMessages 处理消息队列 直到把消息队列中的消息处理完毕
copy(instring,1,6) 复制instring字符串中的内容 从第一个开始复制六个字符

$ 符号? 不太确定什么意思

#2


ShowMessage(Format('%d,%d',[StrToInt('10'),StrToInt('$10')]));
就可以看出来了哈,一个是10进制,一个是16进制

#3


strtoint('$'+PWDS)-->16进制转换10进制
Application.ProcessMessages--〉处理消息队列,主要是为了释放系统控制权,如果不使用这一步,如果你的处理很多,这个时候你可能根本没办法作任何操作,比如鼠标的移动,但是用了这个,后台就会自动分发处理消息,你仍然可以操作你的其他动作,你的程序也会继续处理自己的任务。就是这样的意思了。

#4


xjjrocker(了无痕)
strtoint('$'+PWDS)-->16进制转换10进制
-------------------------------------

反了,应该是10进制转换16进制

如:$10,表示16进制的10

#5


如:$10,表示16进制的10

#6


哈哈,对的,写反了,呵呵

#7


前面加个'$'是表示16进制,但是转换的时候StrToInt()就是16进制转换10进制了
比如:i:=StrToInt('$'+'5B');就是把16进制的'5B'转换成10进制。

#8


差点被你忽悠了,呵呵

#9


xjjrocker(了无痕)
为什么需要对其进行这种转换呢? 但是在这里又是必须的,我不明白为什么?RTDS本来是string类型,类型是匹配的啊。我把'$'删掉就出错了。

#10


太菜了,建议楼主找到二进制,10进制,8进制,16进制的基础书看2分钟就好了。

#11


不好意思,本人刚开始学习,先谢谢xjjrocker(了无痕)的回答了

#12


我先看看

#13


晕,没有注意还有StrToInt

#14


谢谢大家 谢谢大家

#1


Application.ProcessMessages 处理消息队列 直到把消息队列中的消息处理完毕
copy(instring,1,6) 复制instring字符串中的内容 从第一个开始复制六个字符

$ 符号? 不太确定什么意思

#2


ShowMessage(Format('%d,%d',[StrToInt('10'),StrToInt('$10')]));
就可以看出来了哈,一个是10进制,一个是16进制

#3


strtoint('$'+PWDS)-->16进制转换10进制
Application.ProcessMessages--〉处理消息队列,主要是为了释放系统控制权,如果不使用这一步,如果你的处理很多,这个时候你可能根本没办法作任何操作,比如鼠标的移动,但是用了这个,后台就会自动分发处理消息,你仍然可以操作你的其他动作,你的程序也会继续处理自己的任务。就是这样的意思了。

#4


xjjrocker(了无痕)
strtoint('$'+PWDS)-->16进制转换10进制
-------------------------------------

反了,应该是10进制转换16进制

如:$10,表示16进制的10

#5


如:$10,表示16进制的10

#6


哈哈,对的,写反了,呵呵

#7


前面加个'$'是表示16进制,但是转换的时候StrToInt()就是16进制转换10进制了
比如:i:=StrToInt('$'+'5B');就是把16进制的'5B'转换成10进制。

#8


差点被你忽悠了,呵呵

#9


xjjrocker(了无痕)
为什么需要对其进行这种转换呢? 但是在这里又是必须的,我不明白为什么?RTDS本来是string类型,类型是匹配的啊。我把'$'删掉就出错了。

#10


太菜了,建议楼主找到二进制,10进制,8进制,16进制的基础书看2分钟就好了。

#11


不好意思,本人刚开始学习,先谢谢xjjrocker(了无痕)的回答了

#12


我先看看

#13


晕,没有注意还有StrToInt

#14


谢谢大家 谢谢大家