Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.07;
Скачать: CL | DM;

Вниз

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

 
jonson35   (2006-12-17 13:40) [0]

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

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

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


 
EvS ©   (2006-12-17 13:50) [1]

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


 
MBo ©   (2006-12-17 13:52) [2]

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


 
sniknik ©   (2006-12-17 13:54) [3]

> при компиляции выдет ошибку
> [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)


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

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

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


 
sniknik ©   (2006-12-17 14:21) [5]

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

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


 
Anatoly Podgoretsky ©   (2006-12-17 14:45) [6]

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

Две ошибки.

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


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

> И как написать правильно, чтоб можно было передавать в процедуру
> 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
> процедура не нужна, поскольку ничего не делает



Страницы: 1 вся ветка

Текущий архив: 2007.01.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.09 c
2-1166195111
FIL-23
2006-12-15 18:05
2007.01.07
как вставить рисунок в текст


2-1166517310
vitv
2006-12-19 11:35
2007.01.07
Создание круглой кнопки


2-1166194334
DelphiLexx
2006-12-15 17:52
2007.01.07
Как в DBGridEh e запретить рисовать разделит. линии


10-1127672414
френк
2005-09-25 22:20
2007.01.07
пара вопросов по COM


15-1166543799
oldman
2006-12-19 18:56
2007.01.07
Всем спасибо за ответы по видеокарте.