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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2017, 09:16   #1
Sairox
 
Регистрация: 10.10.2017
Сообщений: 9
По умолчанию Прошу объяснить StringGrid

Добрый день! Уважаемые форумчане. Помогите пожалуйста новичку разобраться со StringGrid. Написал Пинговалку программа рабочая. Но в StringGrid когда считал последнюю ячейку и выдал результат при нажатии на клик пытается считывать дальше ячейки которых нет и выдаёт ошибку, а нужно чтобы он начинал сначала всё считывать. Я понимаю должен быть цикл , но не пойму как это сделать???
Изображения
Тип файла: jpg пинг.jpg (74.7 Кб, 125 просмотров)
Sairox вне форума Ответить с цитированием
Старый 31.10.2017, 10:10   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,710
По умолчанию

так вроде там же от 0 до количество-1, а у вас с 1...
p51x вне форума Ответить с цитированием
Старый 31.10.2017, 10:27   #3
Sairox
 
Регистрация: 10.10.2017
Сообщений: 9
По умолчанию

Код:
procedure TForm2.Button1Click(Sender: TObject);
var ABuffer:string;
begin
     Form2.IdIcmpClient1.Host:=memo2.Lines.Strings[x];
                    IdIcmpClient1.Ping(ABuffer);

end;




procedure TForm2.Button2Click(Sender: TObject);
var
  L,A : TStringList;
  I : Integer;
begin
  L := TStringList.Create;
  L.LoadFromFile('print.conf');
  A :=TStringList.Create;
  A.LoadFromFile('ip.conf');
  StringGrid1.ColWidths[0] := 100;
  StringGrid1.ColWidths[1] := 100;
  StringGrid1.Cells[0,0] := 'Name';
  StringGrid1.Cells[1,0] := 'IP';
  StringGrid1.Cells[2,0] := 'Status';

  For I := 0 To L.Count -1 Do
    Begin
        StringGrid1.RowCount:= StringGrid1.RowCount+1;
       StringGrid1.Cells[0,i+1] := L[i];
       StringGrid1.Cells[1,i+1] := A[i];

    End;
  L.Free;
 //StringGrid1.RowCount:= StringGrid1.RowCount-1;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
Memo2.Lines.LoadFromFile('ip.conf');

end;

procedure TForm2.IdIcmpClient1Reply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
begin
x:=x+1;
Memo1.Lines.Add ('Host:'+Form2.IdIcmpClient1.Host);
Memo1.Lines.Add ('Reply:'+IntToStr (AReplyStatus.MsRoundTripTime));


          begin
  if AReplyStatus.MsRoundTripTime < 2000 then StringGrid1.Cells[2,x]:='В сети'
  else  StringGrid1.Cells[2,x]:='Не в сети'
end;

          end;


end.
Так вроде стоит For I := 0 To L.Count -1 Do

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 31.10.2017 в 10:31.
Sairox вне форума Ответить с цитированием
Старый 31.10.2017, 10:38   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Sairox Посмотреть сообщение
Так вроде стоит For I := 0 To L.Count -1 Do
это ЗАПОЛНЕНИЕ StringGrid

кстати, RowCount я бы рекомендовал вынести из цикла:
Код:
 StringGrid1.RowCount:= L.Count+1;
 For i := 0 To L.Count -1 Do
    Begin
       StringGrid1.Cells[0,i+1] := L[i];
       StringGrid1.Cells[1,i+1] := A[i];
    End;
и ещё будет ошибка, если число строк в файлах print.conf и ip.conf разное.
А ещё, если Вы StringList'ы создаёте через Create(), то их нужно ОБЯЗАТЕЛЬНО очистить, чтобы не было утечек памяти.

но это не суть.

Вы когда пингуете, данные берёте из Грида по переменной X?
Так где проверка на то, что X не вылезла за пределы?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.10.2017, 10:52   #5
Sairox
 
Регистрация: 10.10.2017
Сообщений: 9
По умолчанию

Да спасибо насчет файлов знаю если они будут разные то работать не будет.
Очистку допишу это не проблема.
Да грид беред данные из X
Но вот как сделать эту проверку и чтобы он не считывал дальше колонки я не могу понять.

Последний раз редактировалось Sairox; 31.10.2017 в 10:55. Причина: Добавление информации
Sairox вне форума Ответить с цитированием
Старый 31.10.2017, 11:04   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Sairox Посмотреть сообщение
Но вот как сделать эту проверку и чтобы он не считывал дальше колонки я не могу понять.
например,

Код:
procedure TForm2.Button1Click(Sender: TObject);
var ABuffer:string;
begin
     if x>=memo2.Lines.Count Then ShowMessage('Кончились строчки в Memo2')
     else begin
        IdIcmpClient1.Host:=memo2.Lines.Strings[x];
        IdIcmpClient1.Ping(ABuffer);
     end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.10.2017, 11:20   #7
Sairox
 
Регистрация: 10.10.2017
Сообщений: 9
По умолчанию

Огромное человеческое спасибо вам добрый человек с меня пиво.
А еще одно забыл и как лучше сделать чтобы он начинал пинговать заново адреса с 1 строчки без перезапуска приложения.
Sairox вне форума Ответить с цитированием
Старый 31.10.2017, 12:06   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Sairox Посмотреть сообщение
А еще одно забыл и как лучше сделать чтобы он начинал пинговать заново адреса с 1 строчки без перезапуска приложения.
попробуйте так:
Код:

procedure TForm2.Button1Click(Sender: TObject);
var ABuffer:string;
begin
     if x>=memo2.Lines.Count Then x:=0;
     IdIcmpClient1.Host:=memo2.Lines.Strings[x];
     IdIcmpClient1.Ping(ABuffer);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.10.2017, 12:39   #9
Sairox
 
Регистрация: 10.10.2017
Сообщений: 9
По умолчанию

Большое спасибо всё работает! Извините за тупые вопросы!!!!! :-). Приятно, что остались люди которые помогают!
Sairox вне форума Ответить с цитированием
Старый 31.10.2017, 13:04   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ничего страшного. Всегда пожалуйста!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу объяснить Storri Win Api 1 12.04.2015 20:07
Прошу объяснить решение [java] Demius Общие вопросы по Java, Java SE, Kotlin 0 19.10.2014 21:08
Прошу объяснить. Gtnz8 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 29.06.2013 08:06
Разбор задач, прошу объяснить. AlexMasolev1992 Паскаль, Turbo Pascal, PascalABC.NET 2 29.11.2012 17:12
прошу объяснить почему не работает регуляр frommars PHP 2 07.05.2012 11:12