我想判断串口是增加,还是移除,若串口数相等没有发生变化,它打开的是新的串口还是原来的串口,如果是原来的串口就打开该串口,在串口添加和移除的情下能自动打开原来的串口。这个该怎么实现,要不要使用遍历的方法?

解决方案 »

  1.   

    我自己是这样实现的,但还有几个问题未解决,比较急,希望大家帮帮~~
    procedure Tfrm_Main.CheckCommTimeTimer(Sender: TObject);
    var
      oldCbb_items,curCbb_items:TStrings;
    begin
        oldCbb_items:=cbb_port.Items;  //comm中原来的值
        cbb_port.Items.Clear;
        SearchComToCBB(cbb_port);      //查找系统中可用的串口至cbb_port
        curCbb_items:=cbb_port.Items;  //comm重读注册表后的值
        if oldCbb_items.Count > curCbb_items.Count then
        begin
          SetStatus('设备移除成功',False);
        end
        else if oldCbb_items.Count < curCbb_items.Count then
        begin
          SetStatus('设备插入成功',False);
          OpenComm(cbb_port);                 //打开串口
        end
        else if oldCbb_items.Count = curCbb_items.Count then
        begin
          if oldCbb_items <> curCbb_items then //!!这里肯定是错的,我不会判断这两个里面的Items是否相等
          begin                               
            SetStatus('原设备移除,新设备插入成功',False);
          end;
        end else
        begin
          SetStatus('设备重新插入成功',False);
          OpenComm(cbb_port);               //!!让它打开上一次的打开的那个串口,该怎么实现?
        end;//!!还有一点,我想让它自动检测。
      

  2.   

    上面的错了一点,应该是
    procedure Tfrm_Main.CheckCommTimeTimer(Sender: TObject);
    var
      oldCbb_items,curCbb_items:TStrings;  //oldCbb_items是原来从注册表读取到comm的值,curCbb_items是当前值
    begin
        oldCbb_items:=cbb_port.Items;  //comm中原来的值
        cbb_port.Items.Clear;
        SearchComToCBB(cbb_port);      //查找系统中可用的串口至cbb_port
        curCbb_items:=cbb_port.Items;  //comm重读注册表后的值
        if oldCbb_items.Count > curCbb_items.Count then
        begin
          SetStatus('设备移除成功',False);
        end
        else if oldCbb_items.Count < curCbb_items.Count then
        begin
          SetStatus('设备插入成功',False);
          OpenComm(cbb_port);                 //打开串口
        end
        else if oldCbb_items.Count = curCbb_items.Count then
        begin
          if oldCbb_items <> curCbb_items then //!!这里肯定是错的,我不会判断这两个里面的Items是否相等
          begin                               
            SetStatus('原设备移除,新设备插入成功',False);
          end else
          begin
            SetStatus('设备重新插入成功',False);
            OpenComm(cbb_port);                  //!!让它打开上一次的打开的那个串口,该怎么实现?
          end;
        end;//!!还有一点,我想让它自动检测。