Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2012, 16:13   #1
DimoK123
Пользователь
 
Регистрация: 31.10.2012
Сообщений: 28
По умолчанию IdIcmpClient, если...то

Всем еще раз привет. Создаю вторую тему уже за сегодня. Надеюсь не забанят :3

Возможно вопрос покажется тупой, но всё же.
Есть код, который определяет пинг удалённой машины.
Процедура:

Код:
procedure Ping(IP: String; OutRichEdit:TRichEdit);
const BUFSIZE = 3000;
var SecAttr    : TSecurityAttributes;
   hReadPipe,
   hWritePipe : THandle;
   StartupInfo: TStartUpInfo;
   ProcessInfo: TProcessInformation;
   Buffer     : Pchar;
   WaitReason,
   BytesRead  : DWord;
begin
with SecAttr do
begin
  nlength              := SizeOf(TSecurityAttributes);
  binherithandle       := true;
  lpsecuritydescriptor := nil;
end;
if Createpipe (hReadPipe, hWritePipe, @SecAttr, 0) then
begin
  Buffer  := AllocMem(BUFSIZE + 1);
  FillChar(StartupInfo, Sizeof(StartupInfo), #0);
  StartupInfo.cb          := SizeOf(StartupInfo);
  StartupInfo.hStdOutput  := hWritePipe;
  StartupInfo.hStdInput   := hReadPipe;
  StartupInfo.dwFlags     := STARTF_USESTDHANDLES +
                             STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_HIDE;
  if CreateProcess(nil,
     PChar('ping.exe '+IP),
     @SecAttr,
     @SecAttr,
     true,
     NORMAL_PRIORITY_CLASS,
     nil,
     nil,
     StartupInfo,
     ProcessInfo) then
    begin
      repeat
        WaitReason := WaitForSingleObject( ProcessInfo.hProcess,100);
        Application.ProcessMessages;
      until (WaitReason <> WAIT_TIMEOUT);
      Repeat
        BytesRead := 0;
        ReadFile(hReadPipe, Buffer[0], BUFSIZE, BytesRead, nil);
        Buffer[BytesRead]:= #0;
        OemToAnsi(Buffer,Buffer);
        OutRichEdit.Text := OutRichEdit.text + String(Buffer);
      until (BytesRead < BUFSIZE);
    end;
  FreeMem(Buffer);
  CloseHandle(ProcessInfo.hProcess);
  CloseHandle(ProcessInfo.hThread);
  CloseHandle(hReadPipe);
  CloseHandle(hWritePipe);
end;
На кнопке:

Код:
procedure TForm3.BitBtn30Click(Sender: TObject);
begin
RichEdit5.Clear;
RxGIFAnimator1.Visible:=true;
Ping(DBEdit1.Text, RichEdit5);
end;
На компоненте IdIcmpClient

Код:
IdIcmpClient1.Ping;
RichEdit5.Lines.Add(IntToStr(IdIcmpClient1.ReplyStatus.TimeToLive))
Брал код с другого форума, только немного переделал.
Так вот. Результат пинга отображается в RichEdit5. Некоторые строчки вывожу на Label"ы. А именно:

Код:
procedure TForm3.RichEdit5Change(Sender: TObject);
begin
Label9.Caption:=RichEdit5.Lines[8];
Label10.Caption:=RichEdit5.Lines[10];
Label11.Caption:=RichEdit5.Lines[11];
end;
Актуально только тогда, когда результат успешен, тоесть

Цитата:
Обмен пакетами с 89.208.116.60 по с 32 байтами данных:
Ответ от 89.208.116.60: число байт=32 время=107мс TTL=109
Ответ от 89.208.116.60: число байт=32 время=106мс TTL=109
Ответ от 89.208.116.60: число байт=32 время=107мс TTL=109
Ответ от 89.208.116.60: число байт=32 время=107мс TTL=109

Статистика Ping для 89.208.116.60:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 106мсек, Максимальное = 107 мсек, Среднее = 106 мсек
На Label'ах отображается

Цитата:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
Приблизительное время приема-передачи в мс:
Минимальное = 106мсек, Максимальное = 107 мсек, Среднее = 106 мсек
Так вот, задача в том, что б при отрицательном ответе(тоесть, пинг отсутствует) на Label"ах 8,10,11 отображались другие строчки с RichEdit5, ибо не совпадает. При отрицательном ответе выводится только на 8ой Label строчку
Цитата:
Пакетов: отправлено = 4, получено = 0, потеряно = 4
Спасибо заранее за любой ответ. Сорри, если вопрос нубский. Только осваиваю Делфи. Спасибо.
DimoK123 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция ЕСЛИ подходит только для 1 условия, а если условий больше? Slavatron1984 Microsoft Office Excel 2 08.01.2012 22:07
Ошибка IdIcmpClient -=Virus=- Компоненты Delphi 12 25.11.2011 21:00
Как вынести пинг через IdIcmpClient в отдельный поток ? ewgenw Помощь студентам 1 11.05.2009 16:42
IdIcmpClient Host not found Horus92 Работа с сетью в Delphi 2 04.05.2009 16:11