Показать сообщение отдельно
  #2  
Старый 22.07.2006, 13:54
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Так это ж просто. Создай экземпляр класса TBitmap, который будет выполнять роль Z-буфера, и рисуй на нем. Пример:

Код:
var
  Form1: TForm1;
  bm: TBitmap;

...

procedure TForm1.FormCreate(Sender: TObject);
var
  i, x, y, Radius: integer;
begin
   bm := TBitmap.Create;
   bm.Width := PaintBox1.Width;
   bm.Height := PaintBox1.Height;
   for i := 1 to 20 do
   begin
      Radius := Random( 15 );
      x := Random( PaintBox1.Height );
      y := Random( PaintBox1.Width );
      bm.Canvas.Ellipse( x, y, x+2*Radius, y+2*Radius );
   end;
end;

После этого уже не нужно вновь пересчитывать и строить гравик, достаточно отрисовать на PaintBox содержимое bm.

Код:
procedure TForm1.FormPaint(Sender: TObject);
begin
   // Можно так
   // PaintBox1.Canvas.Draw( 0, 0, bm );
   // Но лучше так
   BitBlt( PaintBox1.Canvas.Handle, 0, 0, bm.Width, bm.Height, bm.Canvas.Handle, 0, 0, SRCCOPY );
end;

Не забудь уничтожить Z-буфер при закрытии программы.

Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   bm.Free;
end;
Ответить с цитированием