Форум: "Начинающим";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];
Внизкак правильно создать процедуру? Найти похожие ветки
← →
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,y2procedure 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c