Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.06.2015, 13:30
vetal07 vetal07 вне форума
Прохожий
 
Регистрация: 18.06.2015
Сообщения: 11
Версия Delphi: rad studio
Репутация: 10
По умолчанию как передать символы в мемо через idTelnet

Добрый день, подскажите как передать параметры в поле мемо через idTelnet?

Вот часть кода:
Код:
procedure TForm1.IdTelnet1DataAvailable(Sender: TIdTelnet;
  const Buffer: TArray<System.Byte>);
  const CR=#13; LF=#10;
var
  Start, Stop: integer;
  str:string;
  begin
    str := TEncoding.ANSI.GetString(Buffer);
    memo1.Lines.Add('');
    start:=1;
    stop:=Pos(CR, str);
    if stop = 0 then
      stop:=length(str)+1;
    while start<=length(str) do
      begin
        memo1.Lines.Strings[memo1.Lines.Count - 1]:= memo1.Lines.Strings[memo1.Lines.count - 1] +
        copy(str, start, stop - start);
        if str[stop] = CR then begin
            memo1.Lines.Add('');
        end;
        start:=stop+1;
        if start > length(str) then break;
        if str[start] = LF then start:=start+1;
        stop:=start;
        while (str[stop] <> CR) and (stop <=length(str)) do
        stop:=stop+1;
      end;
  end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var
cmd:string;
begin
 if IdTelnet1.connected then
begin
IdTelnet1.SendCh(Key);
end;

lmikle: пользуемся тегами оформления. первое предупреждение.

В данном случае у меня передаются символы по одному и каждый сновой строки
*** Attention! Please, don't restart this router! ***
*A:router#
s
sh
ho
ow
w

Вопрос. как сделать, что бы передавались корректно символы?
т.е таким образом
*** Attention! Please, don't restart this router! ***
*A:router# show

Последний раз редактировалось lmikle, 18.06.2015 в 21:41.
Ответить с цитированием
  #2  
Старый 19.06.2015, 01:35
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Видимо ифа с условием добавления к данной строке не хватает
Ответить с цитированием
  #3  
Старый 19.06.2015, 09:03
vetal07 vetal07 вне форума
Прохожий
 
Регистрация: 18.06.2015
Сообщения: 11
Версия Delphi: rad studio
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Видимо ифа с условием добавления к данной строке не хватает

Можешь,пожалуйста, помочь?
Я понимаю, что не хватает условия, но пока что то не могу понять. Я совсем юн в программировании.
Ответить с цитированием
  #4  
Старый 21.06.2015, 09:52
vetal07 vetal07 вне форума
Прохожий
 
Регистрация: 18.06.2015
Сообщения: 11
Версия Delphi: rad studio
Репутация: 10
По умолчанию

кто нибудь может помочь мне с данным условием?
Ответить с цитированием
  #5  
Старый 21.06.2015, 20:52
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Да здесь похоже банально #13#10 пролазят сквозь "бритву Оккама" :-), проверьте на повторы переносов отладчиком в момент добавки к строке
Ответить с цитированием
  #6  
Старый 21.06.2015, 20:58
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Может просто использовать Memo1.Text?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #7  
Старый 21.06.2015, 21:05
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Bargest
Может просто использовать Memo1.Text?
У ТС в мемо и нужные переносы встречаются, хотя такое
Код:
Memo1.Text:=  StringReplace(Memo1.Text, #13#10+#13#10, '', [rfReplaceAll]);
может и поможет
Ответить с цитированием
  #8  
Старый 21.06.2015, 22:30
vetal07 vetal07 вне форума
Прохожий
 
Регистрация: 18.06.2015
Сообщения: 11
Версия Delphi: rad studio
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
У ТС в мемо и нужные переносы встречаются, хотя такое
Код:
Memo1.Text:=  StringReplace(Memo1.Text, #13#10+#13#10, '', [rfReplaceAll]);
может и поможет

не помогло мне данное решение, проблема в том что при нажатии клавиши сервер сразу же присылает ее в качестве ответа

например, при вводе show у меня выводится
s
sh
ho
ow
w

решил данную проблему костылем
Код:
  if (Length(str) = 1) and (Str = currentKey) then
    begin
      currentKey:= #0;
      exit;
    end;
но мне кажется это не совсем правильно, мне бы еще позицию строки отловить от сервера,а то в данном случае я могу вводить комманды в мемо из любого места, а подскажите, как мне перехватить клавишу таб, чтобы работала табуляция комманд.

И так, помогите мне с :
1.как мне перехватить в мемо позицию вывода комманды от сервера, чтобы я вводил только в этой строке свои комманды
2.как мне сделать табуляцию комманд в мемо с помощью клавиши таб

Последний раз редактировалось vetal07, 21.06.2015 в 22:37.
Ответить с цитированием
  #9  
Старый 21.06.2015, 23:42
vetal07 vetal07 вне форума
Прохожий
 
Регистрация: 18.06.2015
Сообщения: 11
Версия Delphi: rad studio
Репутация: 10
По умолчанию

смог я сделать передачу табуляции свойством WordWrap=True в memo.
снова пришлось после чего костыли писать, что бы он более и менее корректно символы выводил
Код:
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var
cmd:string;
begin
 if IdTelnet1.connected then
begin

currentKey:= Key;
IdTelnet1.SendCh(Key);
end;
if key=#9 then
key:=#0;
end;
правда в мемо порой выводятся не понятные символы, которые в терминал не передаются, пока не знаю как побороть
Код:
 show service id 100   
Ответить с цитированием
  #10  
Старый 21.06.2015, 23:50
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Команды лучше набирать в поле ввода (edit), а мемо юзать чисто как монитор
Ответить с цитированием
  #11  
Старый 22.06.2015, 09:01
vetal07 vetal07 вне форума
Прохожий
 
Регистрация: 18.06.2015
Сообщения: 11
Версия Delphi: rad studio
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Команды лучше набирать в поле ввода (edit), а мемо юзать чисто как монитор
Я понимаю, но хочется сделать почти полноценный терминал
Ответить с цитированием
  #12  
Старый 23.06.2015, 11:55
vetal07 vetal07 вне форума
Прохожий
 
Регистрация: 18.06.2015
Сообщения: 11
Версия Delphi: rad studio
Репутация: 10
По умолчанию

подскажите, а как мне осуществить данную возможность:
-при выводе термина ответа на ввод команды
*A:router#
я мог именно вводите из под мемо именно в этой строке? а не во всем мемо как сейчас. Как отловить позицию ?
Ответить с цитированием
  #13  
Старый 23.06.2015, 11:55
vetal07 vetal07 вне форума
Прохожий
 
Регистрация: 18.06.2015
Сообщения: 11
Версия Delphi: rad studio
Репутация: 10
По умолчанию

удалите этот пост, пжлс

Последний раз редактировалось vetal07, 23.06.2015 в 12:01.
Ответить с цитированием
  #14  
Старый 23.06.2015, 11:55
vetal07 vetal07 вне форума
Прохожий
 
Регистрация: 18.06.2015
Сообщения: 11
Версия Delphi: rad studio
Репутация: 10
По умолчанию

удалите этот пост, пжлс

Последний раз редактировалось vetal07, 23.06.2015 в 12:01.
Ответить с цитированием
  #15  
Старый 23.06.2015, 14:09
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от vetal07
...Как отловить позицию ?
Вот пример парсинга
Вложения
Тип файла: zip vetal07.zip (1.8 Кбайт, 5 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter