![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
здравствуйте форумчане, помогите пожалуйста исправить ошибку
Код:
[Error] Unit1.pas(43): For loop control variable must be simple local variable Код:
procedure TForm1.Button1Click(Sender: TObject);
procedure Flag(x,y:integer);
begin
with image1.Canvas do
begin
pen.Color:=clBlack;
brush.Color:=clWhite;
Rectangle(x,y,x+image1.Width div 2,y-image1.Height div 2);
end;
end;
var i,j:integer;
begin
for i:=0 to image1.Width div 2 do
for j:=image1.Height div 2 downto 0 do
begin
Flag(i,j);
for i=image1.Height div 6 to image1.Height div 3 do
brush.Color:=clBlue;
for i:=image1.Height div 3 to image1.Height div 2 do
brush.Color:=clRed;
end;
end;
end.Код:
for i=image1.Height div 6 to image1.Height div 3 do |
|
#2
|
|||
|
|||
|
Переменная-счетчик может бытьиспользована только в одном цикле for, причем она не должна в его пределах изменяться. Объяви еще две целочисленные переменные, и используй их для вложенных циклов.
|
|
#3
|
||||
|
||||
|
Код:
var i,j,k:integer;
begin
for i:=0 to image1.Width div 2 do
for j:=image1.Height div 2 downto 0 do
begin
Flag(i,j);
for k:=image1.Height div 6 to image1.Height div 3 do
brush.Color:=clBlue;
for k:=image1.Height div 3 to image1.Height div 2 do
brush.Color:=clRed;
end; |
|
#4
|
|||
|
|||
|
Цитата:
По-моему оператор присваивания написан без ":" for i:=image1.Height div 6 to |
|
#5
|
||||
|
||||
|
Спасибо, теперь у меня другая проблема, всё нормально, запускается, но когда нижимаю кнопку для пуска анимации выходит окнос ошибкой
Код:
Project Project1 raised exception class EInvalidOperation with message 'can only modifi an image if it contains a bit map'. Process stopped. Use Step or Run to continue. И эта зараза у меня вылетает не только на этой программе, но и на остальных которые я пишу на делфи, как мне её исправить? я из-за неё работать не могу |
|
#6
|
||||
|
||||
|
Судя по всему ты загружаешь в Имидж картинку из файла, причем она меньше реальных размеров Имиджа и пытаешься рисовать за пределами загруженной картинки.
|
|
#7
|
||||
|
||||
|
Aristarh Dark да загружаю, но у меня картинка больше image и я подстраиваю Stretch-true, это разве не должно помочь?
|
|
#8
|
||||
|
||||
|
Нет, не должно.
Тут все дело в размерах. У тебя размеры имиджа не соответствуют размерам картинки. Сделай их одинаковыми и скорее всего заработает. |
|
#9
|
||||
|
||||
|
я решила всё таки убрать картинку и просто залить image цветом, но теперь у меня при запуске и после нажатия на кнопку "анимация " просто серое окно, и ещё exe подвисает когда я его закрыть пытаюсь или повторно на кнопку нажать, потом правда всё равно выходит, вот код переделанный
Код:
procedure TForm1.Button1Click(Sender: TObject);
procedure Flag (x,y:integer);
begin
with image1.Canvas do
begin
pen.Color:=clBlack;
brush.Color:=clWhite;
rectangle(x,y,x+image1.Width div 2,y-image1.Height div 6);
end;
end;
var i,j,k:integer;
begin
with image1.Canvas do
begin
brush.Color:=clBlack;
Fillrect(Image1.ClientRect);
for i:=0 to image1.Width div 2 do
for j:=image1.Height div 2 downto 0 do
begin
Flag(i,j);
for k:=image1.Height div 6 to image1.Height div 3 do
brush.Color:=clBlue;
for k:=image1.Height div 3 to image1.Height div 2 do
brush.Color:=clRed;
end;
end;
end; |
|
#10
|
||||
|
||||
|
Добавил 1 строчку:
Код:
procedure TForm1.Button1Click(Sender: TObject);
procedure Flag (x,y:integer);
begin
with image1.Canvas do
begin
pen.Color:=clBlack;
brush.Color:=clWhite;
rectangle(x,y,x+image1.Width div 2,y-image1.Height div 6);
Application.ProcessMessages;
end;
end;
var i,j,k:integer;
begin
with image1.Canvas do
begin
brush.Color:=clBlack;
Fillrect(Image1.ClientRect);
for i:=0 to image1.Width div 2 do
for j:=image1.Height div 2 downto 0 do
begin
Flag(i,j);
for k:=image1.Height div 6 to image1.Height div 3 do
brush.Color:=clBlue;
for k:=image1.Height div 3 to image1.Height div 2 do
brush.Color:=clRed;
end;
end;
end; |
|
#11
|
||||
|
||||
|
ИМХО, какая-то хрень рисуется. Но возможно в этом есть некий глубокий смысл...
|
|
#12
|
||||
|
||||
|
блин, должен быть флаг =(
Код:
procedure TForm1.Button1Click(Sender: TObject);
procedure Flag (x,y:integer);
var k:integer;
begin
with image1.Canvas do
begin
pen.Color:=clBlack;
brush.Color:=clWhite;
rectangle(x,y,x+image1.Width div 2,y-image1.Height div 6);
for k:=y-image1.Height div 6 downto y do
brush.Color:=clBlue;
for k:=y-image1.Height div 3 downto y-image1.Height div 6 do
brush.Color:=clRed;
end;
end;
var i,j:integer;
begin
with image1.Canvas do
begin
brush.Color:=clSilver;
Fillrect(Image1.ClientRect);
for i:=0 to image1.Width div 2 do
for j:=image1.Height div 2 downto 0 do
begin
Flag(i,j);
end;
end;
end; |
|
#13
|
||||
|
||||
|
Aristarh Dark помоги пожалуйста =((..
|
|
#14
|
||||
|
||||
|
Вот такой флаг?
|
|
#15
|
||||
|
||||
|
Он у мну не открылся =( я тут поэкспериментировала с прозрачным фоном, на один image поместила второй такой же, тока фон ему прозрачный задала, а на нижний фон сунула картинку, всё норм, фон восстанавливается, а сам флаг безобразного цвета, плюс на 4м цикле цвета вообще пропадают, в общем кидаю код чтобы понятнее было =) Подскажи пожалуйста как сделать чтобы уже нормально было
Код:
procedure TForm1.Button1Click(Sender: TObject);
procedure Flag (x,y:integer);
begin
with image2.Canvas do
begin
Pen.Color:=clBlack;
Brush.Color:=clWhite;
rectangle(x,y,x+image1.Width div 2,y-image1.Height div 2);
brush.Color:=clBlue;
rectangle(x,y-image1.Height div 6,x+image1.Width div 2,y-image1.Height div 3);
Brush.Color:=clRed;
rectangle(x,y,x+image1.Width div 2,y-image1.Height div 6);
end;
end;
var i,j:integer;
begin
with image2.Canvas do
begin
image2.Transparent:=true;
fillrect(image1.ClientRect);
Form1.DoubleBuffered:=true;
pen.Mode:=pmXOR;
for i:=0 to image1.Width div 2 do
begin
Flag(i,image1.Height div 2);
application.ProcessMessages;
image2.Transparent:=true;
fillrect(image1.ClientRect);
end;
for j:=image1.Height div 2 to image1.Height do
begin
Flag(i,j);
application.ProcessMessages;
image2.Transparent:=true;
fillrect(image1.ClientRect);
end;
for i:=image1.Width div 2 downto 0 do
begin
Flag(i,j);
application.ProcessMessages;
image2.Transparent:=true;
fillrect(image1.ClientRect);
end;
for j:=image1.Height downto image1.Height div 2 do
begin
Flag(i,j);
application.ProcessMessages;
image2.Transparent:=true;
fillrect(image1.ClientRect);
Flag(i,j);
end;
end;
end;
end. |