spcomm组件,如何发送Ctrl-B这个控制字符?急

foxe 2004-10-09 02:49:21
如题,在通信时需发送CTRL-B这个命令,不知如何写
strOutput := '#17#66';
if comm1.WriteCommData(pchar(strOutput),Length(strOutput)) = true then
上面这样写没什么反应!
...全文
270 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
foxe 2004-10-12
  • 打赏
  • 举报
回复
我已搞定,ctrl+b是2,若有人需要请访问
http://www.delphibbs.com 搜索 foxe的帖子
foxe 2004-10-10
  • 打赏
  • 举报
回复
我改成chr(13)达到了Enter的效果,是啊,开始我和你想的一样,可却不行,我就把pchar去掉了,但我发现在一个问题,就是我的中断无法即时响应,这是为什么,就是发送Enter后,要等好一会儿,才能收到回应,可这样的话像ctrl-break这样的中断就不能响应了,再问,你的26是怎么得到的,用ctrl的ASCII加上z的ASCII吗?
steven0731 2004-10-10
  • 打赏
  • 举报
回复
能行吗?WriteCommData函数第一个参数不是要求pchar类型吗?而且chr(26)是ctrl-z啊
foxe 2004-10-10
  • 打赏
  • 举报
回复
成功,把comm1.WriteCommData(pchar(chr(26)),length(chr(26)));改成
comm1.WriteCommData(chr(26),length(chr(26)));
foxe 2004-10-10
  • 打赏
  • 举报
回复
var
Form1: TForm1;
viewstring:string;
i:integer;
strInput,strOutput : string;

implementation

{$R *.dfm}

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

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

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin
SetLength(strInput, BufferLength);
Move(Buffer^, PChar(StrInput)^, BufferLength);
Mm_1.lines.add(StrInput);
Mm_1.lines.add('');
{ if (AnsiContainsText(StrInput,'Ctrl') and (i = 0)) then
begin
strOutput := '#17#66';
if comm1.WriteCommData(@strOutput,Length(strOutput)) = true then
i := 1
else
begin
msg.MessageDlg('数据传送失败,请重启被测产品!',mtinformation,[mbok],1);
i := 0;
exit;
end;
end;}
if AnsiContainsStr(StrInput,'ENTER') then
begin
sleep(1000);
comm1.WriteCommData(pchar(chr(26)),length(chr(26)));
end;
end;
steven0731 2004-10-10
  • 打赏
  • 举报
回复
不好意思,看错了,chr(26)是ctrl-z
steven0731 2004-10-10
  • 打赏
  • 举报
回复
资料上介绍就是chr(26),查表为字符→ ,控制字符SUB,你跟踪试试,可能不是这句出错。不好意思我的机器上暂时没装msn
foxe 2004-10-10
  • 打赏
  • 举报
回复
仍然不行!
foxe 2004-10-10
  • 打赏
  • 举报
回复
不知可否加我的MSN:bro664 at hotmail dot com
foxe 2004-10-10
  • 打赏
  • 举报
回复
问,26是哪个键的ASCII码,知道CTRL+B的ASCII码吗?我再试一下你的方法
steven0731 2004-10-10
  • 打赏
  • 举报
回复
我用的就是comm1.WriteCommData(pchar(chr(26)),length(chr(26)));没有问题。楼主
关闭delphi再打开试试看吧
foxe 2004-10-10
  • 打赏
  • 举报
回复
Project f1.exe raised exception class EAccessViolation with message 'Access violation at address
00402955 in module 'f1.exe'.Read of address 00000020'.Process stopped. Use Step or Run to continue.
steven0731 2004-10-10
  • 打赏
  • 举报
回复
comm1.WriteCommData(pchar(chr(26)),length(chr(26)));
foxe 2004-10-10
  • 打赏
  • 举报
回复
真的没有人知道!!!高手们现身啊!急死了!
steven0731 2004-10-10
  • 打赏
  • 举报
回复
键盘上的enter键对应两个字符(回车和换行),建议改为chr(13)+chr(10)试试看,至于26我也是从资料上看的,也没写是如何来的
foxe 2004-10-09
  • 打赏
  • 举报
回复
不行!
deanchang 2004-10-09
  • 打赏
  • 举报
回复
stroutput:=chr(#17)+chr(#66);

试试,应该差不多。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧