![]() |
|
|
Регистрация | << Правила форума >> | 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; Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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. |