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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2012, 08:01   #1
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию if...then...else

Всем привет. Ребят, помогите распутаться, ибо запутался

В общем. Есть процедура

Код:
procedure TNewThread.Execute;
var
other: string;
i:integer;
State: Boolean;
begin

with Form1.advstringgrid1 do
begin

for I:=FixedRows to RowCount do
begin
if GetCheckboxState(0,I,State) then
if State then
begin
Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
//1 Гет запрос 
other:=datamodule2.idHttp1.Get('http://www.iptrackeronline.com/index.php?ip_address='+ Cells[2, i]);
//2  Страна
Cells[13, i]:=Pars('Country<br><input type="text" name="T2" size="20" value="',other,'"></td>');
//4 Регион
if Pos('Region (code)<br><input type="text" name="T8" size="20" value="n/a ()">',other)=0 then
Cells[14, i]:=Pars('Region (code)<br><input type="text" name="T8" size="20" value="',other,'"></td>')
else
begin
Cells[14, i]:=' n/a';
end;
//3  Город
Cells[15, i]:=Pars('City<br><input type="text" name="T9" size="20" value="',other,'"></td>');
//4 Провайдер
Cells[12, i]:=Pars('ISP<br><input type="text" name="T7" size="20" value="',other,'"></td>');
if i=Form1.AdvStringGrid1.RowCount then
begin
Form1.ProgressBar1.Position:=0;
end;
end;

end;

end;
Мне надо прописать else на if State then
Может я тут намудрил, возможно есть легче способ. Но не знаю куда влепить else тут.
Буду благодарен за ответ.

Последний раз редактировалось _ZixeL_; 29.11.2012 в 08:06.
_ZixeL_ вне форума Ответить с цитированием
Старый 29.11.2012, 08:07   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
if GetCheckboxState(0,I,State) then begin
if State then
begin
Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
//1 Гет запрос 
other:=datamodule2.idHttp1.Get('http://www.iptrackeronline.com/index.php?ip_address='+ Cells[2, i]);
//2  Страна
Cells[13, i]:=Pars('Country<br><input type="text" name="T2" size="20" value="',other,'"></td>');
//4 Регион
if Pos('Region (code)<br><input type="text" name="T8" size="20" value="n/a ()">',other)=0 then
Cells[14, i]:=Pars('Region (code)<br><input type="text" name="T8" size="20" value="',other,'"></td>')
 else{тут_ваш_код} end else
begin
Cells[14, i]:=' n/a';
end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 29.11.2012 в 08:10.
Mad_Cat вне форума Ответить с цитированием
Старый 29.11.2012, 08:22   #3
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

Немного не то.

это всё идёт в одном цикле

Код:
Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
//1 Гет запрос 
other:=datamodule2.idHttp1.Get('http://www.iptrackeronline.com/index.php?ip_address='+ Cells[2, i]);
//2  Страна
Cells[13, i]:=Pars('Country<br><input type="text" name="T2" size="20" value="',other,'"></td>');
//4 Регион
if Pos('Region (code)<br><input type="text" name="T8" size="20" value="n/a ()">',other)=0 then
Cells[14, i]:=Pars('Region (code)<br><input type="text" name="T8" size="20" value="',other,'"></td>')
else
begin
Cells[14, i]:=' n/a';
end;
//3  Город
Cells[15, i]:=Pars('City<br><input type="text" name="T9" size="20" value="',other,'"></td>');
//4 Провайдер
Cells[12, i]:=Pars('ISP<br><input type="text" name="T7" size="20" value="',other,'"></td>');

if i=Form1.AdvStringGrid1.RowCount then
begin
Form1.ProgressBar1.Position:=0;
end;
Мне это надо влепить между

Код:
if GetCheckboxState(0,I,State) then
if State then
и


Код:
else
showmessage('123')

Последний раз редактировалось _ZixeL_; 29.11.2012 в 08:24.
_ZixeL_ вне форума Ответить с цитированием
Старый 29.11.2012, 09:10   #4
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

Немного упростил код. Что б понятней было


Код:
procedure TNewThread.Execute;
var
other: string;
i:integer;
State: Boolean;
begin

for I:=Form1.advstringgrid1.FixedRows to Form1.advstringgrid1.RowCount do  begin
if Form1.advstringgrid1.GetCheckboxState(0,I,state)=state then
begin
other:=datamodule2.idHttp1.Get('http://www.iptrackeronline.com/index.php?ip_address='+ Form1.advstringgrid1.Cells[2, i]);
//2  Страна
Form1.advstringgrid1.Cells[13, i]:=Pars('Country<br><input type="text" name="T2" size="20" value="',other,'"></td>');
//4 Регион
if Pos('Region (code)<br><input type="text" name="T8" size="20" value="n/a ()">',other)=0 then
Form1.advstringgrid1.Cells[14, i]:=Pars('Region (code)<br><input type="text" name="T8" size="20" value="',other,'"></td>')
else
begin
Form1.advstringgrid1.Cells[14, i]:=' n/a';
end;
//3  Город
Form1.advstringgrid1.Cells[15, i]:=Pars('City<br><input type="text" name="T9" size="20" value="',other,'"></td>');
//4 Провайдер
Form1.advstringgrid1.Cells[12, i]:=Pars('ISP<br><input type="text" name="T7" size="20" value="',other,'"></td>');
//----

end;
end;


end;
Но так и не понял, куда для if Form1.advstringgrid1.GetCheckboxSta te(0,I,state)=state then прописать else >_<

ПыСы: Вопрос: почему перед for to do не работает условный оператор if then?

Последний раз редактировалось _ZixeL_; 29.11.2012 в 09:14.
_ZixeL_ вне форума Ответить с цитированием
Старый 29.11.2012, 09:27   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы зря не форматируете код. Так намного проще отлаживать и дорабатывать..
пробуйте:
Код:
procedure TNewThread.Execute;
var
  other: string;
  i: integer;
  State: Boolean;
begin

  for I := Form1.advstringgrid1.FixedRows to Form1.advstringgrid1.RowCount do begin
    if Form1.advstringgrid1.GetCheckboxState(0, I, state) = state then
    begin
      other := datamodule2.idHttp1.Get('http://www.iptrackeronline.com/index.php?ip_address=' + Form1.advstringgrid1.Cells[2, i]);
      //2  Страна
      Form1.advstringgrid1.Cells[13, i] := Pars('Country<br><input type="text" name="T2" size="20" value="', other, '"></td>');
      //4 Регион
      if Pos('Region (code)<br><input type="text" name="T8" size="20" value="n/a ()">', other) = 0 then
        Form1.advstringgrid1.Cells[14, i] := Pars('Region (code)<br><input type="text" name="T8" size="20" value="', other, '"></td>')
      else
      begin
        Form1.advstringgrid1.Cells[14, i] := ' n/a';
      end;
      //3  Город
      Form1.advstringgrid1.Cells[15, i] := Pars('City<br><input type="text" name="T9" size="20" value="', other, '"></td>');
      //4 Провайдер
      Form1.advstringgrid1.Cells[12, i] := Pars('ISP<br><input type="text" name="T7" size="20" value="', other, '"></td>');
      //----
    end
    else {else для if .. = state}
      showmessage('123');
    end 

end;

Цитата:
ПыСы: Вопрос: почему перед for to do не работает условный оператор if then?
всё работает, если правильно писать (и соблюдать логику выполнения и записи операторов)!
Вы где-то ошибку делаете, вот и не работает у Вас...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.11.2012, 09:31   #6
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

Спасибо. Работает, но не правильно.
Оно выводить сообщение "123" столько раз, сколько присутствует строк в таблице, тоесть
Код:
   for I := Form1.advstringgrid1.FixedRows to Form1.advstringgrid1.RowCount do
Подскажите как сделать, что б такого не было?
Я выше задавал вопрос. И никак не пойму, почему if..then не работает перед for..to..do.
Буду благодарен за ответ.
_ZixeL_ вне форума Ответить с цитированием
Старый 29.11.2012, 09:38   #7
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Цитата:
Сообщение от _ZixeL_ Посмотреть сообщение
Спасибо. Работает, но не правильно.
Оно выводить сообщение "123" столько раз, сколько присутствует строк в таблице, тоесть
Код:
   for I := Form1.advstringgrid1.FixedRows to Form1.advstringgrid1.RowCount do
Непонятно: должно выводить или выводит

Цитата:
Сообщение от _ZixeL_ Посмотреть сообщение
Я выше задавал вопрос. И никак не пойму, почему if..then не работает перед for..to..do.
Буду благодарен за ответ.
У вас перед циклом нет никакого условия
superedward вне форума Ответить с цитированием
Старый 29.11.2012, 09:51   #8
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

[QUOTE=superedward;1140182]Непонятно: должно выводить или выводит

Выводит, прошу прощение.


Код:
У вас перед циклом нет никакого условия
Делал так

Код:
if Form1.advstringgrid1.GetCheckboxState(0, I, state) = state then
begin
 for I := Form1.advstringgrid1.FixedRows to Form1.advstringgrid1.RowCount do  begin
И не работало. Никакой реакции вообще.
_ZixeL_ вне форума Ответить с цитированием
Старый 29.11.2012, 09:54   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, в упор не вижу, где Вы заполняете переменную State ?!
Допускаю, что Вы опустили этот кусок кода. Если же нет - это грубая ошибка с вашей сторону. Должно быть, State := true; или State = false;

во-вторых, при переборе строк нужно учитывать, что последния строчка в гриде имеет индекс не RowCount, а RowCount-1

в-третьих, проверяйте:
Код:
var
  other: string;
  i: integer;
  State: Boolean;
begin

  State := false;

  if Form1.advstringgrid1.GetCheckboxState(0, I, state) = state then 
    for I := Form1.advstringgrid1.FixedRows to Form1.advstringgrid1.RowCount-1 do 
    begin
        other := datamodule2.idHttp1.Get('http://www.iptrackeronline.com/index.php?ip_address=' + Form1.advstringgrid1.Cells[2, i]);
        //2  Страна
        Form1.advstringgrid1.Cells[13, i] := Pars('Country<br><input type="text" name="T2" size="20" value="', other, '"></td>');
        //4 Регион
        if Pos('Region (code)<br><input type="text" name="T8" size="20" value="n/a ()">', other) = 0 then
          Form1.advstringgrid1.Cells[14, i] := Pars('Region (code)<br><input type="text" name="T8" size="20" value="', other, '"></td>')
        else
        begin
          Form1.advstringgrid1.Cells[14, i] := ' n/a';
        end;
        //3  Город
        Form1.advstringgrid1.Cells[15, i] := Pars('City<br><input type="text" name="T9" size="20" value="', other, '"></td>');
        //4 Провайдер
        Form1.advstringgrid1.Cells[12, i] := Pars('ISP<br><input type="text" name="T7" size="20" value="', other, '"></td>');
        //----
    end
  else {else для if .. = state}
    showmessage('123');

end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.11.2012, 09:58   #10
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

Я начинающий, не пинайте сильно

Цикл выполняется полностью независимо от того, чекнут ли чекбокс или нет(
_ZixeL_ вне форума Ответить с цитированием
Ответ


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