DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: lixuan123
今日帖子: 0
在线用户: 0
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 hq12 (heygel) ★☆☆☆☆ -
普通会员
2003/9/29 23:27:59
标题:
SPCOMM怎么一个字节一个字节的接收阿,我不想用MSCOMM,对API又不太懂 浏览:2803
加入我的收藏
楼主: SPCOMM怎么一个字节一个字节的接收阿,我不想用MSCOMM,对API又不太懂,主要是为了操作RTS信号线
----------------------------------------------
-
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/9/30 7:48:25
1楼: uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  SPComm, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Comm1: TComm;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    procedure SendData;
    { Public declarations }
  end;

var
  Form1: TForm1;

var
  SBuf,RBuf:array[1..10] of byte;
  i:integer;
  ViewString:string;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  SBuf[1]:=byte($5A);
  SBuf[2]:=byte('4');
  SendData;
end;

procedure TForm1.SendData;
var
  i:integer;
  CommFlg:Boolean;
begin
  ViewString:=';
  CommFlg:=True;
  for i:=1 to High(SBuf) do
  begin
    if Not Comm1.WriteCommData(@SBuf[i],1) then
      begin
        CommFlg:=False;
        break;
      end;
      //发送时字节间的延时
      Sleep(2);
      ViewString:=ViewString+IntToHex(SBuf[i],2)+' ';
  end;
  ViewString:='发送'+ViewString;
  Memo1.Clear;
  Memo1.lines.Add(ViewString);
  if not CommFlg then
    MessageDlg('发送失败!',mtError,[mbyes],0);
end;

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
var
  i:integer;
begin
  ViewString:=';
  move(Buffer^,pchar(@RBuf)^,Bufferlength);
  for i:=1 to high(RBuf) do
    ViewString:=ViewString+IntToStr(RBuf[i]);
  ViewString:='接收'+ViewString;
  Memo1.lines.Add(ViewString);
  memo1.lines.Add(' ');
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Comm1.StartComm;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Comm1.StopComm;
end; 

仅仅提供参考!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 hq12 (heygel) ★☆☆☆☆ -
普通会员
2003/10/4 13:40:52
2楼: 不是啊,我是要对字符一个个接收,按十六进制方式,我就是对bufferlength不知道怎么处理,想知道能不能象mscomm32一样处理,一个一个字符的接收,我的大量数据是没有开始停止标志的,需要一个一个处理了自己判断的。
----------------------------------------------
-
作者:
男 hq12 (heygel) ★☆☆☆☆ -
普通会员
2003/10/4 13:41:57
3楼: 接收到特定字符时候,还需要自动发送回执。所以需要控制RTS信号线.
----------------------------------------------
-
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/10/4 16:50:58
4楼: 等待高手了。。。。。。*_*
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS