Показать сообщение отдельно

  #708  
Старый 01.11.2008, 16:09
omen-6-6-6
Новичок
Регистрация: 21.06.2008
Сообщений: 2
Провел на форуме:
10671

Репутация: 3
По умолчанию

помогите с лабой..


1. Рисование на канве формы с использованием пиксельной графики и графических примитивов

1. Создать фон формы с плавным переходом от одного цвета к другому.
2. Используя пиксельную графику и графические примитивы, вывести на форму произвольный рисунок.
3. Выполнить простую анимацию следующими методами:
a) С использованием randomize, random ( ) и компонента TTimer (стр. VCL System);
Пример 1

procedure TForm1.Timer1Timer(Sender: TObject);
var x,y:integer;
begin
randomize;
x:=Form1.ClientWidth div 2;
y:=Form1.ClientHeight div 2;
Canvas.MoveTo(x,y);
Canvas.Pen.Color:=RGB(random(255),random(255),rand om(255));
Canvas.LineTo(random(ClientWidth),random(ClientHei ght));
end;

procedure TForm1.FormMouseMove(……);
begin
Application.Terminate;
end;

Пример 2 (анимация объекта TShape)

Такая анимация достаточно проста, так как весь код рисования и перерисования скрыт в объекте. Например, чтобы заставить объект TShape перемещаться по горизонтали, нужно просто изменять свойство Shape1.Left.

b) Используя свойство пера Pen.Mode.
Режим Pen.Mode=pmNotXor или Pen.Mode=pmXor предназначен для рисования движущихся фигур. Если два раза нарисовать одну и ту же фигуру таким пером, то после первого раза она появится, после второго – сотрется.

Пример

Rectangle(x0,y0,x,y);
pause:=time;
while (time-pause)<1E-12 do;
Rectangle(x0,y0,x,y);

c) Анимацию можно организовать, если “стереть” фигуру прямоугольником с цветом фона:

procedure TForm2.Button1Click(Sender: TObject);
var rr:real;
angle,i,j,x,y:integer;
begin
for i:=1 to 5 do begin
angle:=random(368);
rr:=Angle*Рi/180;
for j:=1 to 100 do begin
x:=trunc(j*sin(rr))+100;
y:=trunc(j*cos(rr))+100;
with Form2.Canvas do begin
Вrush.Color:=clВlue;
Еllipse(x-16,y-16,x+16,y+16);
Вrush.Color:= clBtnFace;
Rectangle(0,0,Form2.ClientWidth,Form2.ClientHeight );end;
end; end; end;

К сожалению, такой метод дает сильное мерцание на экране.

d) Использование двойной буферизации для анимации.
Двойной буфер – это набор плоскостей, одна из которых используется для отображения на экране (это может быть канва формы или компонента TPaintBox), а другая – для рисования (это может быть компонент TBitMap или другой компонент TPaintBox). Использование двойного буфера позволяет получить плавное движениепри анимации и отсутствие мерцания, но уменьшает скорость движения фигуры.

Пример
procedure TForm3.Button1Click(Sender: TObject);
var rr:real;
angle,i,j,x,y:integer;
TheBitmap:TBitmap;
begin
TheBitmap:=TBitmap.Create;
TheBitmap.Height:=Form3.ClientHeight;
TheBitmap.Width:=Form3.ClientWidth;
for i:=1 to 10 do begin
angle:=random(368);
rr:=Angle*pi/180;
for j:=1 to 100 do begin
x:=trunc(j*sin(rr))+100;
y:=trunc(j*cos(rr))+100;
with TheBitmap.Canvas do begin
Brush.Color:= clBtnFace;
Rectangle(0,0,Width,Height);
Brush.Color:=clblue;
Ellipse(x-16,y-16,x+16,y+16);
Form1.Canvas.CopyRect(Rect(0,0,Width,Height),
TheBitmap.Canvas,
Rect(0,0,Width,Height));
end; end; end; end;

Выполните данную процедуру, а затем на ее основе напишите свой код анимации с двойным буфером.

4. Выведите в качестве фона формы какую-либо битовую матрицу так, чтобы она занимала всю площадь формы.

поставлю плюсы++
 
Ответить с цитированием