当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

 ·怎样显示jtextarea滚动条    »显示摘要«
    摘要: 如题 ......
    摘要: java.sql.sqlexception: [microsoft][sqlserver 2000 driver for jdbc]error establishing socket. at com.microsoft.jdbc.base.baseexceptions.createexception(unknown source) at com.microsoft.jdbc.base.......


关于串口通信的问题

要求能实现对PC机的串行口进行直接操作,请问应该怎么实现?最好有原代码。

NO.1   作者: honkily

我这里刚好有我以前用过的一段代码,希望对你有帮助  
   
  //这里是串口通信的完整代码  
  unit   Comm  
   
  interface  
   
  uses  
      windows,messages,sysutils,classes,graphics,controls,forms,dialogs,stdctrls;  
   
  const  
      WM_COMMNOTIFY=WIN_USER+1;  
   
  type    
   
        TForm1=class(TForm)  
            procedure   FormCreate(Sender:TObject);  
        private  
            procedure     CommInitialize;  
            procedure     MsgCommProcess(var   Message:TMessage):message   WM_COMMNOTIFY;  
        public    
       
        end;  
   
        //线程声明  
        TComm=class(TThread)  
        protected  
            procedure     Execute;override;  
        end;  
   
  var  
      Form1:TForm1;  
      hCom,Post_Event:THandle;  
      lpol:Poverlappped;  
   
  implementation  
   
  {$R   *.DFM}      
     
  procedure     TComm.Execute;//线程执行  
  var  
      dwEvtMask:DWord;  
      Wait:boolean;  
  begin  
      FillChar(lpol,SizeOf(Toverlappped),0);  
      While   true   do    
      begin  
          //等待串口事件    
          Wait:=WaitCommEvent(hCom,dwEvtMask,lpol);  
          if   Wait   then  
              //等待同步事件置位  
              WaitForSingleObject(Post_Event,infinite);  
              //同步事件复位    
              ResetEvent(Post_Event);  
              //发送消息  
              PostMessage(Form1.Handle,WM_COMMNOTIFY,0,0);    
   
      end;    
  end;    
   
  //初试化串行口    
  procedure     TForm1.CommInitialize;      
  var  
      lpDCB:TDCB;  
  begin  
      hCom:=CreateFile(com2,Generic_Read   or   Generic_Write,0,nil,Open_Existing,File_Attribute_Normal   or    
   
  File_Flag_OverLapped,0)  
      if   hCom=invalid_handle_value   then  
      begin  
          ShowMessage(Unable   to   Open   COM2.);  
          Exit;  
      end;  
      SetupComm(hComm,4096,4096);//设置输入、输出缓冲区的大小为4096字节  
      GetCommState(hCom,lpDCB);    
      lpDCB.baudrate:=2400;  
      lpDCB.StopBits:=1;  
      lpDCB.ByteSize:=8;  
      lpDCB.Parity:=EvenParity;//偶校验  
      SetCommState(hCom,lpDCB);  
      SetCommMask(hCom,ev_rxchar);     //指定串口事件为接受到字符  
         
  end;    
   
  procedure     TForm1.MsgCommProcess(var   Message:TMessage);  
  var    
      Clear:boolean;  
      Coms:TComStat;  
      cbNum,ReadNumber,lpErrors:DWord;  
      Readd_Buffer:array   [1..100]   of   char;  
  begin  
      Clear:=ClearCommError(hCom,lpErrors,@Coms);  
      if   Clear   then  
      begin  
          cbNum:=Coms.cbInQue;  
          ReadFile(hCom,Read_Buffer,cbNum,ReadNumber,lpol);  
          SetEvent(post_Event);  
      end;  
  end;  
   
  procedure     TForm1.FormCreate(Sender:TObject);  
  begin  
      CommInitialize;  
      Post_Event:=CreateEvent(nil,true,true,nil);//创建同步事件  
      TComm.Create(false);//创建串口监视线程  
  end;  
   
   
   
   
 


 ·如何使窗体不遮住任务栏    »显示摘要«
    摘要: 我的代码如下: private sub form_load() with me .left = 0 . = 0 .height = screen.height .width = screen.width end with end sub 通过以上代码,本机可以显示任务栏,但是拿到别的机器上窗体却把任务栏也遮住了,请教如何修改? ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE