Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.05.2011, 01:51
Аватар для Antidelphik
Antidelphik Antidelphik вне форума
Новичок
 
Регистрация: 28.04.2011
Сообщения: 67
Репутация: 10
По умолчанию ошибка с for, графика делфи

здравствуйте форумчане, помогите пожалуйста исправить ошибку
Код:
[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  
Старый 05.05.2011, 03:16
Raskolnikov Raskolnikov вне форума
Прохожий
 
Регистрация: 20.04.2011
Адрес: Киров
Сообщения: 35
Версия Delphi: 7 Enterprise
Репутация: 148
По умолчанию

Переменная-счетчик может бытьиспользована только в одном цикле for, причем она не должна в его пределах изменяться. Объяви еще две целочисленные переменные, и используй их для вложенных циклов.
Ответить с цитированием
  #3  
Старый 05.05.2011, 03:49
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Код:
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  
Старый 05.05.2011, 05:32
hatsub hatsub вне форума
Прохожий
 
Регистрация: 12.03.2011
Сообщения: 18
Репутация: 10
По умолчанию

Цитата:
Сообщение от Antidelphik
ошибку пишет в строке
Код:
 for i=image1.Height div 6 to image1.Height div 3 do

По-моему оператор присваивания написан без ":"

for i:=image1.Height div 6 to
Ответить с цитированием
  #5  
Старый 05.05.2011, 15:46
Аватар для Antidelphik
Antidelphik Antidelphik вне форума
Новичок
 
Регистрация: 28.04.2011
Сообщения: 67
Репутация: 10
По умолчанию

Спасибо, теперь у меня другая проблема, всё нормально, запускается, но когда нижимаю кнопку для пуска анимации выходит окнос ошибкой
Код:
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  
Старый 05.05.2011, 15:58
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Судя по всему ты загружаешь в Имидж картинку из файла, причем она меньше реальных размеров Имиджа и пытаешься рисовать за пределами загруженной картинки.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #7  
Старый 05.05.2011, 16:03
Аватар для Antidelphik
Antidelphik Antidelphik вне форума
Новичок
 
Регистрация: 28.04.2011
Сообщения: 67
Репутация: 10
По умолчанию

Aristarh Dark да загружаю, но у меня картинка больше image и я подстраиваю Stretch-true, это разве не должно помочь?
Ответить с цитированием
  #8  
Старый 05.05.2011, 16:10
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Нет, не должно.
Тут все дело в размерах. У тебя размеры имиджа не соответствуют размерам картинки. Сделай их одинаковыми и скорее всего заработает.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #9  
Старый 05.05.2011, 16:22
Аватар для Antidelphik
Antidelphik Antidelphik вне форума
Новичок
 
Регистрация: 28.04.2011
Сообщения: 67
Репутация: 10
По умолчанию

я решила всё таки убрать картинку и просто залить 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  
Старый 05.05.2011, 16:31
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Добавил 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  
Старый 05.05.2011, 16:32
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

ИМХО, какая-то хрень рисуется. Но возможно в этом есть некий глубокий смысл...
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #12  
Старый 05.05.2011, 16:36
Аватар для Antidelphik
Antidelphik Antidelphik вне форума
Новичок
 
Регистрация: 28.04.2011
Сообщения: 67
Репутация: 10
По умолчанию

блин, должен быть флаг =(
Код:
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;
я только ещё твою строчку не добавляла, почему то вылазит при запуске image наполовину черный, на половину серый
Ответить с цитированием
  #13  
Старый 05.05.2011, 16:57
Аватар для Antidelphik
Antidelphik Antidelphik вне форума
Новичок
 
Регистрация: 28.04.2011
Сообщения: 67
Репутация: 10
По умолчанию

Aristarh Dark помоги пожалуйста =((..
Ответить с цитированием
  #14  
Старый 05.05.2011, 17:04
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Вот такой флаг?
Вложения
Тип файла: 7z flag.7z (2.2 Кбайт, 5 просмотров)
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #15  
Старый 06.05.2011, 00:55
Аватар для Antidelphik
Antidelphik Antidelphik вне форума
Новичок
 
Регистрация: 28.04.2011
Сообщения: 67
Репутация: 10
По умолчанию

Он у мну не открылся =( я тут поэкспериментировала с прозрачным фоном, на один 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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:13.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025