Всем еще раз привет. Создаю вторую тему уже за сегодня. Надеюсь не забанят :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
|
Спасибо заранее за любой ответ. Сорри, если вопрос нубский. Только осваиваю Делфи. Спасибо.