-
Здравствуйте, возник такой вопрос: В программе есть процедура, котрая рандомно в поле Image должна расставлять определенное кол-во точек. Проблема заключается в том, что после выполнения процедуры форма остается совершенно чистой.На форме находится только компоненты Image и Button, по нажатию кнопки выполняется процедура. Возможно здесь надо использовать другой компонент(не Image), впервые сталкиваюсь с графикой, поэтому не знаю. Материалов по работе с этим компонентом не нашел, а OnPaint использовать не выгодно, т.к. столкнемся с проблемой перерисовки формы в случае ее перекрытия. Заранее благодарен за ответ. Заголовок:procedure Randpix(var Image:TImage; typcard:Char; Numb:integer; cm:integer); Код процедуры:
procedure Randpix;
var
rndX,rndY,i,col:integer;
size:integer;
Function N(Numb:integer):integer;
begin
if numb=1 then n:=8
else n:=N(numb-1)*2;
end;
Procedure pix(x,y,size:integer); begin
Image.Canvas.MoveTo(x,y);
Image.Canvas.Pen.Width:=size;
Image.Canvas.LineTo(x,y);
end;
begin
randomize;
col:=n(numb);
if ((typcard='A') or (typcard='C')) then
begin
size:=round(cm/10);
end
else
begin
size:=round(cm/10*2);
end;
For i:=1 to col do
begin
rndX:=random(Image.Width-size)+round(size/2);
rndY:=random(Image.Height-size)+round(size/2);
pix(rndX,rndY,size);
end;
end;
-
> [0] Алекс (27.07.08 23:16) > Проблема заключается в том, что после выполнения процедуры > форма остается совершенно чистой.
Проблема в твоем алгоритме, разбирать который я не стал.... Можешь убедится, что с рисованием все в порядке вот так: procedure Randpix(Image: TImage);
var N: Integer;
begin
for N:=0 to 10 do begin
Image.Canvas.MoveTo(Random(Image.Width), Random(Image.Height));
Image.Canvas.LineTo(Random(Image.Width), Random(Image.Height));
end;
end; Вызов: Randpix(Image1); Изучай свои расчеты внутри своей процедуры.....
-
Черт....
> Procedure pix(x,y,size:integer); //отрисовка точки > begin > Image.Canvas.MoveTo(x,y); > Image.Canvas.Pen.Width:=size; > Image.Canvas.LineTo(x,y); > end;
Интересная отрисовка точки :)
-
Попробуй вместо [2] сделать нечто так: Procedure pix(x,y,size:integer); begin
Image.canvas.ellipse(x-size div 2, y-size div 2, x+size div 2, y+size div 2);
end; а перед циклом вызовов pix поместить такую строчку: image.Canvas.Brush.Color:=Image.Canvas.Pen.Color;
-
> Randpix
> pix
Может лучше: RandPoint
Point или RandSpot
Spot ? :) А то как-то на "пискел" (с) это не похоже
-
RASkov, да, действительно линии рисует. Последний вариант не помог, все чисто. Буду мониторить расчеты.
-
Не ) Точка - это условное название :)) Диаметр будет 1-2 мм, поэтому таким образом и рисую :D
-
> [5] Алекс (28.07.08 01:02)
покажи строку вызова.... т.е. с какими параметрами вызываешь Randpix из [0]
-
Randpix(Image1,'A',3,cm); cm - кол-во пикселей на 1 см, в моем случае 36.
-
> [8] Алекс (28.07.08 01:07)
procedure Randpix(var Image:TImage; typcard:Char; Numb:integer; cm:integer);
var
rndX,rndY,i,col:integer;
size:integer;
Function N(Numb:integer):integer;
begin
if numb=1 then n:=8
else n:=N(numb-1)*2;
end;
Procedure pix(x,y,size:integer); begin
Image.Canvas.Ellipse(x-size div 2, y-size div 2, x+size div 2, y+size div 2);
end;
begin
randomize;
col:=n(numb);
if ((typcard='A') or (typcard='C')) then
begin
size:=round(cm/10);
end
else
begin
size:=round(cm/10*2);
end;
image.Canvas.Brush.Color:=Image.Canvas.Pen.Color;
For i:=1 to col do
begin
rndX:=random(Image.Width-size)+round(size/2);
rndY:=random(Image.Height-size)+round(size/2);
pix(rndX,rndY,size);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Randpix(Image1, 'A', 3, 36);
end; За твое форматирование, сорри :)
-
Сейчас попробую :)
-
Брр, так ничего не поменялось же окромя способа рисования точки :) Блин ) Уже торможу
-
а, не ) Спасибо огромное ))) Косяк увидел.. В вызове процедуры он был.
|