郁闷,telnet不接收退格键,用indy控件,急,

zzywuwu 2007-04-27 12:11:07
void __fastcall T_audit::IdTelnetDemoDataAvailable(TIdTelnet *Sender,
const AnsiString Buffer)
{
int Start, Stop;
if(Memo1->Lines->Count == 0)
Memo1->Lines->Add("");

if(RichEdit1->Lines->Count == 0)
RichEdit1->Lines->Add("");

Start = 1;
Stop = Buffer.Pos(IntToStr('\n')); //the character count to a CR in the buffer

if(Stop == 0)
Stop = Buffer.Length() + 1;
while(Start <= Buffer.Length())
{
AnsiString temp;
temp=Buffer.SubString(Start,Stop-Start);
Memo1->Lines->Strings[Memo1->Lines->Count -1] =
Memo1->Lines->Strings[Memo1->Lines->Count -1] + temp;

RichEdit1->Lines->Strings[RichEdit1->Lines->Count -1] =
RichEdit1->Lines->Strings[RichEdit1->Lines->Count -1] + temp;


if(Buffer.SubString(Stop,1)=='\n')
{
Memo1->Lines->Add("");
SendMessage(Memo1->Handle,WM_KEYDOWN, VK_UP,1);

RichEdit1->Lines->Add("");
SendMessage(RichEdit1->Handle,WM_KEYDOWN, VK_UP,1);
}
Start = Stop + 1;
if(Start > Buffer.Length())
{
break;
}
if(Buffer.SubString(Start,1)=='\n')
{
Start++;
}
Stop = Start;
while((Buffer.SubString(Stop, 1)!= '\n')&&(Stop <= Buffer.Length()))
{
Stop++;
}
}
}
//---------------------------------------------------------------------------

void __fastcall T_audit::FormShortCut(TWMKey &Msg, bool &Handled)
{

if(Msg.CharCode == VK_TAB && Msg.Result == 1)
{
if(IdTelnetDemo->Connected()){
IdTelnetDemo->SendCh(0x09); //相应tab键成功

}
}
Memo1->SetFocus();
//RichEdit1->SetFocus();

}

void __fastcall T_audit::Memo1KeyPress(TObject *Sender, char &Key)
{
if(IdTelnetDemo->Connected()){
if (Key==0x08)
{
IdTelnetDemo->SendCh(0x7F);
return;// 按了退格后,IdTelnetDemoDataAvailable都没有反应阿。感觉0x7f没有送出去,如果后面
加一个key=0x7f的话,memo 上出现 |
}
else
{
IdTelnetDemo->SendCh(Key);
Key = 0;
}
}
}

我用的indy 9.0 c++builder 6.0

indy 空间里的 ascIIfilter=false maxlineAction =maexception
Terminal=dumb,不知道这些属性干什么的
...全文
287 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
daily66 2007-04-27
  • 打赏
  • 举报
回复
帮顶了
huzhangyou 2007-04-27
  • 打赏
  • 举报
回复
如果要退格 需要自己重写这个
或者继承出来一个方法
huzhangyou 2007-04-27
  • 打赏
  • 举报
回复
procedure TIdTelnet.SendCh(Ch: Char);
begin
if Ch <> #13 then
Write(Ch)
else
if (Ch = #13) and (IamTelnet = true) then
Write(Ch)
else
Writeln('');
end;

看到没有
你SendCH表示已经发送过去了
所以不可以退格
huzhangyou 2007-04-27
  • 打赏
  • 举报
回复
这个你需要看以下原代码 是否已经发送出去了
如果发送出去了 就不幸
否则肯定可以
先看以下原代码
zzywuwu 2007-04-27
  • 打赏
  • 举报
回复
没有人接招?

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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