![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибки переменных [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;
...