Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.07.2006, 11:58
krot krot вне форума
Прохожий
 
Регистрация: 24.06.2006
Сообщения: 9
Репутация: 10
По умолчанию Перерисовка PaintBox

Большая прога долго-долго вырисовывает в PaintBox график функции. Подскажите, плз., как можно потом быстро перерисовывать это изображение, помещая его куда-нибудь, и выводя в канву при перерисовке (ну чтобы после сворачивания и открытия окна снова не ждать 2 часа, пока прога все посчитает и нарисует, а чтоб она просто брала уже готовое изображение).
Ответить с цитированием
  #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;
Ответить с цитированием
  #3  
Старый 23.07.2006, 13:53
krot krot вне форума
Прохожий
 
Регистрация: 24.06.2006
Сообщения: 9
Репутация: 10
По умолчанию Гм...

Нужен совет не про то, как это делается, а про то, как это проще исправить. На канве пейнтбокса уже выведено изображение. Вопрос в том, как это (!!!!!) изображение загнать в буфер и потом использовать при перерисовке канвы пейнтбокса.

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

Так все практичетки тоже самое. Создай BitMap размером с PaintBox:

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
   bm := TBitmap.Create;
   bm.Width := PaintBox1.Width;
   bm.Height := PaintBox1.Height;
end;

Теперь сохранить содержимое PaintBox в bm можно следующим образом:

Код:
BitBlt( bm.Canvas.Handle, 0, 0, PaintBox1.Width, PaintBox1.Height, PaintBox1.Canvas.Handle, 0, 0, SRCCOPY );

Ну а теперь все с точностью до наоборот, отрисовываем bm на PaintBox:

Код:
BitBlt( PaintBox1.Canvas.Handle, 0, 0, bm.Width, bm.Height, bm.Canvas.Handle, 0, 0, SRCCOPY );
Ответить с цитированием
  #5  
Старый 26.07.2006, 19:42
krot krot вне форума
Прохожий
 
Регистрация: 24.06.2006
Сообщения: 9
Репутация: 10
По умолчанию Thanks!!!!!!!!!!!!

Спасибо.
Такое большое, человеческое спасиииииииибо!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter