Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обьясните процедуру, пишем телнет 
:(
    Опции темы
Darkmaster
Дата 3.6.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Здраствуйте все!
Я к сожалению не спец в delphi. Надеюсь ктонибудь объяснит мне то что непонятно.

Мне кое-что не понятно в последней процедуре:


Код

procedure TfrmTelnetDemo.IdTelnetDemoDataAvailable(Sender: TIdTelnet;
const Buffer: String); // обрабатываем поступившие данные 
const
CR = #13;
LF = #10;
var
Start, Stop : Integer;
begin
if Memo1.Lines.Count = 0 then
Memo1.Lines.Add('');

Start := 1;
Stop := Pos(CR, Buffer);
if Stop = 0 then
Stop := Length(Buffer) + 1;
while Start <= Length(Buffer) do begin
Memo1.Lines.Strings[Memo1.Lines.Count - 1] :=
Memo1.Lines.Strings[Memo1.Lines.Count - 1] +
Copy(Buffer, Start, Stop - Start);
if Buffer[Stop] = CR then begin
Memo1.Lines.Add('');
{$IFNDEF Linux}
SendMessage(Memo1.Handle, WM_KEYDOWN, VK_UP, 1);
{$ENDIF}
end;
Start := Stop + 1;
if Start > Length(Buffer) then
Break;
if Buffer[Start] = LF then
Start := Start + 1;
Stop := Start;
while (Buffer[Stop] <> CR) and (Stop <= Length(Buffer)) do
Stop := Stop + 1;
end;

end;



1. Так значит сначала start принимает начальное значение т.е. 1

2. Потом stop принимает индекс первого встречаючегося символа #13 (enter)

3. Однако после этого если stop=0 т.е. если буфер (buffer) чист т.е. в нем ничего нет то stop для чегото принимает значение на 1 больше длинны буфера.  

Другой вариант истолкования пункта 3 :
индексация символов в буфере начинается не с 1 а с 0 , тогда не понятно зачем start принимает значение 1 (т.е. больше чем stop)  

4. В memo1 записываются строки - это понятно, но не понятно почему в функции Copy(Buffer, Start, Stop - Start) позицыя max (Stop - Start) получается из stop минус start?

это либо значит что считываться информация должна гдето с середины,
либо получается что если start=4 stop=10 то инфа считается только с 4 по 6 позицию... получается непонятно что.....  

5. Дальше блок:

if Buffer[Stop] = CR then - тут понятно что если найден символ возврата то...

begin начало
Memo1.Lines.Add(''); - в memo1 переход на новую строку (т.е. '' равно #13#10)
{$IFNDEF Linux} - а это что за директива?? 
SendMessage(Memo1.Handle, WM_KEYDOWN, VK_UP, 1); - посылает сообщение Memo1.handle ( а что это? у меня учебника по дельфи нету сорри  )
{$ENDIF} - а это что за директива??
end; конец

Да и для чего.... WM_KEYDOWN, VK_UP, 1 ?  


6. 
Код

Start := Stop + 1;
if Start > Length(Buffer) then
Break;


тута ясно что вылет с буфера нужен чтоб нарочно остановить цикл.


7.
Код

if Buffer[Start] = LF then
Start := Start + 1;
Stop := Start;
while (Buffer[Stop] <> CR) and (Stop <= Length(Buffer)) do
Stop := Stop + 1;


в 7-ом пункте тоже панятна что ищется новая "часть" (данные) в buffer'e...

Пожалуйста разьясните.... 
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.