Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибки переменных [D7, XP]


DagOT-R ©   (2011-06-02 12:24:00) 

Столкнулся с такой ошибкой: переменная, изменяющаяся в цикле for, внутри вложенного цикла, ведет себя некорректно.

Скриншот в run-time на точке останова:
http://i036.radikal.ru/1106/80/ec3f368ec207.png
я наскоряк заменил все вхождения этой переменной на integer(a), вроде пишет результат правильно, но все равно далее функции не работают корректно. Уточняю: все использованные переменные - типа integer, переменная "а" - внутри цикла. На всякий случай переустановил делфи - результат тот же. Подскажите, что нужно делать/не делать, чтобы впоследствии таких непоняток не происходило.


DiamondShark   (2011-06-02 14:02:00) [1]


>  переменная, изменяющаяся в цикле for, внутри вложенного
> цикла, ведет себя некорректно.

Стрелять-колотить. Когда ж вы все передохните-то, находители, блин.


DagOT-R   (2011-06-02 13:37:00) [2]

Все, нашел в чем проблема. Тема закрыта.


DagOT-R   (2011-06-02 13:00:00) [3]

разверну мысль. Часть кода:


...
   bit1.Canvas.Brush.Color:=clred;
   bit1.Canvas.Pen.Style:=psclear;
   bit1.Canvas.Pen.Width:=3;
   bit1.Canvas.Brush.Style:=bssolid;
   bit1.Canvas.Rectangle(rect(0, 0, image1.picture.Bitmap.Width, image1.picture.Bitmap.Height));
   bit1.Canvas.Brush.Color:=clgreen;
   bit1.Canvas.Brush.Style:=bsclear;
   bit1.Canvas.Pen.Style:=psSolid;
//    bit1.Canvas.moveto(5, 5); bit1.Canvas.LineTo(image1.picture.Bitmap.Width-30, image1.picture.Bitmap.Height-30);
   for b:=1 to 9 do
     if (form1.SpinEdit1.Value-dopusk+integer(a) > 0)and(integer(a)<dopusk*2) then
       begin
         poi:=point(ZeroPoint.X-((panel1.Height-30-ZeroPoint.Y) div (dopusk*2)-3)*integer(a)+b*GraphSize.X div 10, ZeroPoint.y-round(GraphSize.Y*graphic(form1.SpinEdit1.Value+integer(a)-dopusk, b/10))+1+((panel1.Height-30-ZeroPoint.Y)div (dopusk*2)-3)*integer(a));
         bit1.Canvas.moveto(poi.X, poi.Y);
         poi:=point(ZeroPoint.X-((panel1.Height-30-ZeroPoint.Y) div (dopusk*2)-3)*(integer(a)+1)+b*GraphSize.X div 10, ZeroPoint.y-round(GraphSize.Y*graphic(form1.SpinEdit1.Value+(integer(a)+1)-dopusk, b/10))+1+((panel1.Height-30-ZeroPoint.Y)div (dopusk*2)-3)*(integer(a)+1));
         bit1.Canvas.LineTo(poi.X, poi.Y);
       end;
...


если убрать комментарий,, выделенный жирным текстом, то тот код рисует линию как надо. Однако, функции moveto/linetoвнутри не рисуют вообще. Думал, рисуют за пределами канвы, вывел результаты расчета в переменную poi- в ней все значения верны.


sniknik   (2011-06-02 12:34:00) [4]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1305447899&n=3


DagOT-R   (2011-06-02 12:32:00) [5]

добавлю:
а изменяется примерно так:


var a, b, dopusk: integer;
begin
...
for a:=0 to dopusk*2 do
 for b:=1 to 9 do
   begin
     ...//та самая проверка условия
   end;
...


Наверх

Титульная страница Поиск, карта сайта Написать письмо