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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2013, 12:48   #1
impeee
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 56
По умолчанию цикл for to do, шаг цикла не выполняется

Всем привет. У меня какая-то странная проблема. Не буду скидывать код, он громоздкий и непонятный, и он не важен. Суть в самом цикле, в технологии цикла. Аномалия какая-то.. Существует цикл, в теле которого 8 условий. При выполнении одного из условий выполняется код, заключенный в тело условия. Проблема вся в том, что цикл на каком-то шаге (113 например), выполнив условие №8, продолжает идти дальше до конца, но больше не "читает" никакое из условий.

Давайте я напишу код все-таки, иначе не понятно объясняю проблему. Существует таблица с одной колонкой, в ней допустим 255 рядов, в каждой ячейке число от 1 до 8, рандомно, неважно.. Существует цикл for i:= 0 to 255 do, в теле которого 8 условий: если ячейка = 1 то, если ячейка = 2 то и так далее. Представьте, что цикл, на 113 шаге из 255 дает некий сбой. Он находит условие 8, но тело условия не выполняет, и далее, не выполняет ни одно из условий.. но и не обрывается, а "шагает" до 255, до конца. Чем это может быть вызвано?

Цикл выполняется в процедуре, "повешанную" на таймер с интервалом 0,250 сек. Изменение интервала таймера на проблему никак не влияет.

Заранее спасибо.
impeee вне форума Ответить с цитированием
Старый 21.10.2013, 12:55   #2
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Код встудию Так очень трудно что то сказать, скорее всег оесли у вас вложеность условий то просто на первом же идёт по ветки елсе и всё...
Dozent вне форума Ответить с цитированием
Старый 21.10.2013, 13:06   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Код в студию, телепаты в бессрочном отпуске.
Человек_Борща вне форума Ответить с цитированием
Старый 21.10.2013, 13:06   #4
grominfo
Форумчанин
 
Аватар для grominfo
 
Регистрация: 30.05.2011
Сообщений: 651
По умолчанию

Скорее всего у ТС условия (или часть условий) выглядят так :

Код:
if ....then
 begin
 {....}
 end
else if ... then
 begin
 {....}
 end
else if ... then
 begin

 end;
Создание, программирование и сопровождение сайтов любой сложности.
Изготовление программ на заказ.
Список услуг и портфолио на сайте www.andreygrom.ru
grominfo вне форума Ответить с цитированием
Старый 21.10.2013, 14:00   #5
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

Первое что сразу могу сказать из прочитанного, это то что если в таймере есть цикл, то надо до выполнения цикла таймер останавливать а после выполнения запускать иначе бред получиться. Второе что увидел, у вас наверное в теле условия 8, происходит изменения каких-то данных, которые влияют на исход других условий, скорей всего в этом причина.
Simply-Art вне форума Ответить с цитированием
Старый 21.10.2013, 14:06   #6
grominfo
Форумчанин
 
Аватар для grominfo
 
Регистрация: 30.05.2011
Сообщений: 651
По умолчанию

Да чё, давайте лучше кофейную гущу возьмём, или карты разложим.
Создание, программирование и сопровождение сайтов любой сложности.
Изготовление программ на заказ.
Список услуг и портфолио на сайте www.andreygrom.ru
grominfo вне форума Ответить с цитированием
Старый 21.10.2013, 14:48   #7
impeee
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 56
По умолчанию

Всем спасибо большое за ответы, извините что долго не отвечал. Я скидываю код куска этой процедуры, он конечно мало его скажет, но тем не менее:

Код:
var
  i, j, A, B, C: Integer;
  MINVALY, MAXVALY, EXECUTER: Double;
  PTSS: Array [0..1000] of Double;
begin
  MINVALY:= 1000000;
  MAXVALY:= 0;
  EXECUTER:= 0;
  COLZCOUNT:= 1;

  for i:= 1 to Form2.StringGrid1.RowCount - 1 do
   begin
      if MAXVALY < StrToFloat(Form2.StringGrid1.Cells[5,i]) then MAXVALY:= StrToFloat(Form2.StringGrid1.Cells[5,i]);
   end;

  for i:= 1 to Form2.StringGrid1.RowCount - 1 do
   begin
      if MINVALY > StrToFloat(Form2.StringGrid1.Cells[5,i]) then MINVALY:= StrToFloat(Form2.StringGrid1.Cells[5,i]);
   end;

  StrGrdTripleHitVal.Cells[0,19]:= FloatToStr(RoundTo(MINVALY, StrToInt(FrmMainInfo.Lbl_Nominal.Caption) * -1));
  StrGrdTripleHitVal.Cells[0,0]:= FloatToStr(RoundTo(MAXVALY, StrToInt(FrmMainInfo.Lbl_Nominal.Caption) * -1));
  EXECUTER:= (MAXVALY - MINVALY) / 20;

  for i:= 1 to 18 do
   begin
     StrGrdTripleHitVal.Cells[0, (StrGrdTripleHitVal.RowCount - 1) - i]:= FloatTostr(RoundTo(StrToFloat(StrGrdTripleHitVal.Cells[0, (StrGrdTripleHitVal.RowCount - 1) - (i - 1)]) + EXECUTER, StrToInt(FrmMainInfo.Lbl_Nominal.Caption) * -1));
   end;



   StringGrid2.RowCount:= 0;
   

  for i:= 1 to 3 do
   begin

    if i = 1 then
     begin
    // первая точка
      PTSS[COLZCOUNT - 1]:= StrToFloat(Form2.StringGrid1.Cells[5, 1]);
      EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
      C:= Round((StrToFloat(Form2.StringGrid1.Cells[5, 1]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
//      StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(0, 400 - C),  Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
     end
      else
     begin

       if i = 2 then
        begin
       // вторая точка


           if StrToFloat(Form2.StringGrid1.Cells[5,1]) < StrToFloat(Form2.StringGrid1.Cells[5,2]) then
            begin
             PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, 2]);
             EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
             A:= Round((StrToFloat(Form2.StringGrid1.Cells[5, 1]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
             B:= Round((StrToFloat(Form2.StringGrid1.Cells[5, 2]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
//             for j:= A to B do
//              begin
//               StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT-1, 400 - j), Image1.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//              end;
//               StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT-1, 400 - A), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//               StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT-1, 400 - B), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
            end;

           if StrToFloat(Form2.StringGrid1.Cells[5,1]) > StrToFloat(Form2.StringGrid1.Cells[5,2]) then
            begin
             PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, 2]);
             EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
             A:= Round((StrToFloat(Form2.StringGrid1.Cells[5, 1]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
             B:= Round((StrToFloat(Form2.StringGrid1.Cells[5, 2]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
//             for j:= B to A do
//             begin
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT-1,400 - j), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//              end;
            end;

       end;
       end;
impeee вне форума Ответить с цитированием
Старый 21.10.2013, 14:49   #8
impeee
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 56
По умолчанию

продолжение:

Код:
         // третья точка

           if i = 3 then
            begin

           if (PTSS[COLZCOUNT] < StrToFloat(Form2.StringGrid1.Cells[5,3])) and
              (PTSS[COLZCOUNT - 1] < PTSS[COLZCOUNT]) then
            begin
             EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
             A:= Round((PTSS[COLZCOUNT] - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
             B:= Round((StrToFloat(Form2.StringGrid1.Cells[5, 3]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
//             for j:= A to  B do
//              begin
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - j), Image1.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//              end;
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - A), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - B), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
             COLZCOUNT:= COLZCOUNT + 1;
             PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, 3]);
            end;

           if (PTSS[COLZCOUNT] > StrToFloat(Form2.StringGrid1.Cells[5,3])) and
              (PTSS[COLZCOUNT - 1] > PTSS[COLZCOUNT]) then
            begin
             EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
             A:= Round((StrToFloat(Form2.StringGrid1.Cells[5, 3]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
             B:= Round((PTSS[COLZCOUNT] - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
//             for j:= B to A do
//              begin
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT,400 - j), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//              end;
             COLZCOUNT:= COLZCOUNT + 1;
             PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, 3]);
            end;

           end;


 end;


 // ЗДЕСЬ НАЧИНАЕТСЯ ЗАВЕРШАЮЩИЙ ЦИКЛ С 4 ТОЧКИ
  for i:= 4 to Form2.StringGrid1.RowCount - 1 do
   begin



    // если три последовательных белых линий
    IF ((PTSS[COLZCOUNT - 3] < PTSS[COLZCOUNT - 2]) or (PTSS[COLZCOUNT - 3] > PTSS[COLZCOUNT - 2])) and
       (PTSS[COLZCOUNT - 2] < PTSS[COLZCOUNT - 1]) and
       (PTSS[COLZCOUNT - 1] < PTSS[COLZCOUNT]) THEN
       BEGIN

       // если идет дальше вверх (нынешняя точка больше предыдущей)
       if StrToFloat(Form2.StringGrid1.Cells[5, i]) > PTSS[COLZCOUNT] then
        begin
             EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
             A:= Round((PTSS[COLZCOUNT] - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
             B:= Round((StrToFloat(Form2.StringGrid1.Cells[5, i]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER); 
//             for j:= A to B do
//              begin
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - j), Image1.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//              end;
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - A), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - B), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));

             COLZCOUNT:= COLZCOUNT + 1;
             PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, i]);
        end;


       // если развернулась вниз (нынешняя точка меньше самой первой)
       if StrToFloat(Form2.StringGrid1.Cells[5, i]) < PTSS[COLZCOUNT - 3] then
        begin
             EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
             A:= Round((PTSS[COLZCOUNT - 1] - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
             B:= Round((StrToFloat(Form2.StringGrid1.Cells[5, i]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);  
//             for j:= B to A do
//              begin
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - j), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//              end;

             COLZCOUNT:= COLZCOUNT + 1;
             PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, i]);

        end;

       END;
impeee вне форума Ответить с цитированием
Старый 21.10.2013, 14:50   #9
impeee
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 56
По умолчанию

Код:
    // если три последовательных черных линий
    IF ((PTSS[COLZCOUNT - 3] > PTSS[COLZCOUNT - 2]) or (PTSS[COLZCOUNT - 3] < PTSS[COLZCOUNT - 2])) and
       (PTSS[COLZCOUNT - 2] > PTSS[COLZCOUNT - 1]) and
       (PTSS[COLZCOUNT - 1] > PTSS[COLZCOUNT]) THEN
       BEGIN

       // если идет дальше вниз (нынешняя точка меньше предыдущей)
       if StrToFloat(Form2.StringGrid1.Cells[5, i]) < PTSS[COLZCOUNT] then
        begin
             EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
             A:= Round((PTSS[COLZCOUNT] - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
             B:= Round((StrToFloat(Form2.StringGrid1.Cells[5, i]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
//             for j:= B to A do
//              begin
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - j), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//              end;

             COLZCOUNT:= COLZCOUNT + 1;
             PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, i]);
        end;

        // если развернулась вверх (нынешняя точка больше самой первой)
       if StrToFloat(Form2.StringGrid1.Cells[5, i]) > PTSS[COLZCOUNT - 3] then
        begin
             EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
             A:= Round((PTSS[COLZCOUNT - 1] - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
             B:= Round((StrToFloat(Form2.StringGrid1.Cells[5, i]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER); 
//             for j:= A to B do
//              begin
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - j), Image1.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//              end;
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - A), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - B), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));

             COLZCOUNT:= COLZCOUNT + 1;
             PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, i]);
        end;

       END;


     // другие исключительные случаи

            // 5
            if (PTSS[COLZCOUNT - 3] > PTSS[COLZCOUNT - 2]) and
               (PTSS[COLZCOUNT - 2] > PTSS[COLZCOUNT - 1]) and
               (PTSS[COLZCOUNT] < StrToFloat(Form2.StringGrid1.Cells[5,i])) and
               (PTSS[COLZCOUNT] > PTSS[COLZCOUNT - 2]) then
             begin
             EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
             A:= Round((PTSS[COLZCOUNT] - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
             B:= Round((StrToFloat(Form2.StringGrid1.Cells[5, i]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);     
//             for j:= A to  B do
//              begin
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - j), Image1.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//              end;
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - A), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - B), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
             COLZCOUNT:= COLZCOUNT + 1;
             PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, i]);

              end;


            // 7
            if (PTSS[COLZCOUNT - 3] > PTSS[COLZCOUNT - 2]) and
               (PTSS[COLZCOUNT - 2] > PTSS[COLZCOUNT - 1]) and
               (PTSS[COLZCOUNT - 1] > StrToFloat(Form2.StringGrid1.Cells[5,i])) and
               (PTSS[COLZCOUNT] > PTSS[COLZCOUNT - 2]) then
             begin
             EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
             A:= Round((PTSS[COLZCOUNT - 2] - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
             B:= Round((StrToFloat(Form2.StringGrid1.Cells[5, i]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
//             for j:= B to A do
//              begin
//                StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - j), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//              end;
             COLZCOUNT:= COLZCOUNT + 1;
             PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, i]);

             end;
impeee вне форума Ответить с цитированием
Старый 21.10.2013, 14:51   #10
impeee
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 56
По умолчанию

Код:
           // 6 + 8
            if (PTSS[COLZCOUNT - 2] > PTSS[COLZCOUNT - 3]) and
               (PTSS[COLZCOUNT - 1] > PTSS[COLZCOUNT - 2]) and
               (PTSS[COLZCOUNT - 2] > PTSS[COLZCOUNT]) then
             begin

             if (PTSS[COLZCOUNT] > StrToFloat(Form2.StringGrid1.Cells[5,i])) then
              begin
               // 8    <------- вот тут ошибка какая-то (
               EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
               A:= Round((PTSS[COLZCOUNT] - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
               B:= Round((StrToFloat(Form2.StringGrid1.Cells[5, i]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER); 
//               for j:= B to A + 1 do
//                begin
//                  StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - j), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//                end;
               COLZCOUNT:= COLZCOUNT + 1;
               PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, i]);
                 end;

              // 6
              if (PTSS[COLZCOUNT - 1] < StrToFloat(Form2.StringGrid1.Cells[5,i])) then
               begin

               EXECUTER:= (StrToFloat(StrGrdTripleHitVal.Cells[0,0]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19])) / 399;
               A:= Round((PTSS[COLZCOUNT - 2] - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
               B:= Round((StrToFloat(Form2.StringGrid1.Cells[5, i]) - StrToFloat(StrGrdTripleHitVal.Cells[0,19]))  / EXECUTER);
//               for j:= A to  B do
//                begin
//                  StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - j), Image1.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//                end;
//                  StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - A), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
//                  StrGrdTripleHitGraph.Canvas.CopyRect(StrGrdTripleHitGraph.CellRect(COLZCOUNT, 400 - B), Image2.Picture.Bitmap.Canvas, Rect(0, 0, 20, 1));
               COLZCOUNT:= COLZCOUNT + 1;
               PTSS[COLZCOUNT]:= StrToFloat(Form2.StringGrid1.Cells[5, i]);

               end;

              end;


  // окончание цикла с 4-й точки
  end;


 StrGrdTripleHitGraph.ColCount:= COLZCOUNT;

я закомментил рисования по канве, на время, для себя. В условии, помеченном как "8" код не выполняется. Точнее он выполняется один раз, а на второй уже нет, и все последующие шаги цикла не проверяют ни одно из условий (в то время, как они должны происходить на 101%). При других данных совершенно другая картина, при третьих - третья. Весь косяк в самом цикле и таймере - я только к такому выводу пришел. Все условия вылизаны и идеальны, все должно работать.

Буду рад любой помощи, спасибо!
impeee вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаг цикла LLIALLIJIbIK Общие вопросы Delphi 4 14.04.2013 15:45
Нужно сделать шаг вперед и шаг назад в сортировке расческой DeadGod Помощь студентам 0 29.11.2012 16:11
сколько раз выполняется тело цикла? adm2010 Паскаль, Turbo Pascal, PascalABC.NET 2 23.12.2010 16:46
В самой проге не выполняется цикл. Repac123456 Помощь студентам 5 15.11.2010 22:10
Не выполняется весь цикл alexeevich PHP 3 30.08.2010 11:52