procedure TF_comm.keydown;
var
  i,j:integer;
begin
  j:=ord(copychr);
  if ((47 < j)and (j<58)) or ((64<j)and(j<91))  then
    keybd_event(j,0,0,0)
  if j=13  then
    begin
      keybd_event(j,0,0,0);
      mscomm1.InBufferCount:=0;
    end;
end;
 // 初始化时 mscomm1.InputLen := 1; mscomm1.InputMode := comInputModeText; procedure TF_comm.MSComm1Comm(Sender: TObject);
var
  buffer :variant;
  TempStr:string;
  InputChar:char;
begin
  case mscomm1.commEvent of
    comEvReceive:
      begin
        buffer:=mscomm1.Input;
        TempStr:=buffer;
        InputChar:=TempStr[1];
        copychr:=inputchar;     //copychr:char;为全局变量
        f_comm.keydown;
      end;
  end;
end;哪位高手请多多指教!

解决方案 »

  1.   

    MSComm32是不是OCX控件呀,如果是成功在命令用 regsvr32 MSComm32.ocx注册一次
      

  2.   

    MSCOMM根本就不好用
    一般都是用纯VCL的SPCOMM的,API做的,什么都清楚_____________________
    http://lysoft.7u7.net
      

  3.   

    "如果是成功在命令用 regsvr32 MSComm32.ocx注册一次"这个我已经注册了!不注册程序是运行不起来的!(其中我也注册了另一个注册表键值[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
    @="kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun")这样,之后我的程序才能运行,
    但是就是得到的结果只是正确的一部分!就是传输时好象丢了数据了!
      

  4.   

    把VB6+SP6装一次装的时候只选ActiveX控件,这样试试
      

  5.   

    "把VB6+SP6装一次装的时候只选ActiveX控件,这样试试"您是说用VB6+SP6开发吗!这个我不会啊!
      

  6.   

    不是开发,只是把ActiveX控件注册一次.
      

  7.   

    “不是开发,只是把ActiveX控件注册一次.”cncharles(旺仔) :十分感谢您回答我的问题!这个方法我虽然没有试验!但是要打包,到其他机器上运行啊!
    我是打完包后,先向您说的那样(regsvr32 MSComm32.ocx)注册一下,在运行一下我导出的Reg文件
    内容是([HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
    @="kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun),之后就可以启动我的程序了!我的程序是用来接收扫描枪,扫描到的条码,然后在当前文本文件的光标处显示出结果!
    但是当运行在WinXP下时,出现的是一些条码的一部分(同一条条码多次扫描,结果有时相同),而有一些扫到的是完全的条码(正确的结果)!
    在Win2K下时却没有任何问题,我在Win2K下开发的!您分析一下是程序的问题,还是条码的问题!
      

  8.   

    有的時候MSCOMM註冊了也不一定有用。。
    必要的時候還是 把 註冊的鍵值寫在    reg 文件裏面從新註冊以下比較好一點
      

  9.   

    "必要的時候還是 把 註冊的鍵值寫在    reg 文件裏面從新註冊以下比較好一點"这个我已经做注册表倒入文件了!问题是扫描时丢数据,怎么来解决这个问题!让你们费心了?