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

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

как правильно создать процедуру?


jonson35 ©   (2006-12-17 13:40:00) 

Здравствуйте, подскажите что в коде не так

procedure rect_pr;
var
 x1,y1,x2,y2: Integer;
 r1: TRect;
 Image1:TImage;
begin
x1:=0;
y1:=0;
x2:=y1+100;
y2:=x1+100;
r1:=Rect(x1,y1,x2,y2);
with Image1.Canvas do
  begin
    Brush.Color:=clWhite;
    FillRect(r1);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
rect_pr;
end;

при компиляции выдет ошибку
[Warning] Unit1.pas(38): Variable 'Image1' might not have been initialized
почему?
А при нажатии Button1 вообще вылетает все.

И как написать правильно, чтоб можно было передавать в процедуру x1,y1,x2,y2

Не пинайте новичка сильно :)


RASkov   (2006-12-17 23:27:00) [1]

> И как написать правильно, чтоб можно было передавать в процедуру
> x1,y1,x2,y2

procedure rect_pr(Im: TImage; const x1, x2, y1, y2: Integer; const clr: TColor);
begin
 if not Assigned(Im) then Exit;
 Im.Canvas.Brush.Color:= clr;
 Im.Canvas.FillRect(Rect(x1, y1, x2, y2));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 rect_pr(Image1, 0, 0, 100, 100, clWhite);
end;


Это самое ужасное, что можно придумать... только в качестве, может быть неудачного, примера.
Т.е. как заметил  [6] Anatoly Podgoretsky
> процедура не нужна, поскольку ничего не делает


Anatoly Podgoretsky   (2006-12-17 14:45:00) [2]

> jonson35  (17.12.2006 13:40:00)  [0]

Две ошибки.

Первая - процедура не нужна, поскольку ничего не делает
Об второй сообщил компилятор - не инициализирован Image1


sniknik   (2006-12-17 14:21:00) [3]

> спасибо помогло
хм... из двух предложенных это худший вариант, и вроде бы сказал это.

> по Ctrl+F1 у меня другая прога запускается, как еще это посмотреть можно
убери у нее эти клавиши быстрого запуска... либо запускай хелп любым доступным тебе способом (из меню например, а то может и F1 занято) и делай поиск слова procedure там, раз уж контекстную возможность с поиском "отрубил".


jonson35   (2006-12-17 14:03:00) [4]

> либо указать полный путь (Form1.Image1.Canvas)
спасибо помогло
> > И как написать правильно, чтоб можно было передавать в
> процедуру x1,y1,x2,y2
> встаешь на написанное слово procedure курсором и нажимаеш
> Ctrl+F1, читаешь. (это кстати для всего рецепт, не только

по Ctrl+F1 у меня другая прога запускается, как еще это посмотреть можно


sniknik   (2006-12-17 13:54:00) [5]

> при компиляции выдет ошибку
> [Warning] Unit1.pas(38): Variable 'Image1' might not have been initialized
> почему?
процедура регулярная, а обращаешься к обьекту класса без указания его. естественно не находит.
тут либо указать полный путь ( Form1.Image1.Canvas), либо сделать процедуру от того же класса что имедж (procedure Form1.rect_pr;) что гораздо более правильно.

> И как написать правильно, чтоб можно было передавать в процедуру x1,y1,x2,y2
встаешь на написанное слово procedure курсором и нажимаеш Ctrl+F1, читаешь. (это кстати для всего рецепт, не только по procedure)


MBo   (2006-12-17 13:52:00) [6]

Что должна делать процедура?


EvS   (2006-12-17 13:50:00) [7]

Image1 перед использованием нужно создать


Наверх

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