TImage, TBitmap, Tpaintbox : что лучше?
Модератор: Модераторы
TImage, TBitmap, Tpaintbox : что лучше?
Суть такова:
делаю(можно сказать уже сделал) программу, которая строит некие графики,
причём надо так, чтобы было видно, как строится рисунок и скорость этого построения
управляется при помощи ползунка (в рисующем цикле стоит sleep(n), где n = 10 - показания ползунка).
Сначала сделал на Tpaintbox.canvas -- быстро, но не сохраняет содержимое при свертывании/изменении размера формы.
Сейчас всё рисует на TImage.picture.bitmap.canvas -- существенно медленнее, но нет проблем описаных выше.
Будет ли рисовать быстрее на TBitmap, или не стоит переделывать? Если есть другие более быстрые поверхности для отрисовки, скажите.
делаю(можно сказать уже сделал) программу, которая строит некие графики,
причём надо так, чтобы было видно, как строится рисунок и скорость этого построения
управляется при помощи ползунка (в рисующем цикле стоит sleep(n), где n = 10 - показания ползунка).
Сначала сделал на Tpaintbox.canvas -- быстро, но не сохраняет содержимое при свертывании/изменении размера формы.
Сейчас всё рисует на TImage.picture.bitmap.canvas -- существенно медленнее, но нет проблем описаных выше.
Будет ли рисовать быстрее на TBitmap, или не стоит переделывать? Если есть другие более быстрые поверхности для отрисовки, скажите.
- EmeraldMan
- постоялец
- Сообщения: 149
- Зарегистрирован: 16.10.2008 08:41:51
- Откуда: Белгород
- Контактная информация:
Re: TImage, TBitmap, Tpaintbox : что лучше?
На мой взгляд, лучше оставить PaintBox.
Сохранять значения пикселей в буфере при первой отрисовке и при необходимости перерисовывать содержимое из этого буфера.
PaintBox, пожалуй, самая быстрая.
Сохранять значения пикселей в буфере при первой отрисовке и при необходимости перерисовывать содержимое из этого буфера.
PaintBox, пожалуй, самая быстрая.
Re: TImage, TBitmap, Tpaintbox : что лучше?
EmeraldMan писал(а):Сохранять значения пикселей в буфере при первой отрисовке и при необходимости перерисовывать содержимое из этого буфера.
Ммм. Пытался. Попиксельно чтоли в буффер запиливать?
Re: TImage, TBitmap, Tpaintbox : что лучше?
Пишите в Bitmap, а потом выводите на канву при OnPaint.
Re: TImage, TBitmap, Tpaintbox : что лучше?
А Вы при перерисовке в связи с изменившимися размерами не выполняйте слип, выполняйте только при изменении значений ползунка или когда первый раз рисуете. И будет быстро, и нет проблем.
Re: TImage, TBitmap, Tpaintbox : что лучше?
Рисунок пропадает не только при изменении размера, но и при приостановлении отрисовки.
Т.е. на форме есть кнопка 'ПАУЗЭ'. При ее нажатии рисующий цикл останавливается и загорается кнопка 'РЕСЮМ' и 'СТОП'.
'СТОП' означает, что при следующем нажатии 'ДРО' график будет отрисован с самого начала.
'РЕСЮМ' - продолжение отрисовки с того места, где остановились.
Так вот: я нажимаю 'РЕСЮМ' и все проходит как надо, за исключением того, что предыдущая часть графика пропадает.
Понятно, что ее можно нарисовать снова без слипа, но может быть есть более 'прямой' метод?
--------------------------------------
Ещё.
Как называется event формы типа 'unminimize' (разветнуть).
Т.е. на форме есть кнопка 'ПАУЗЭ'. При ее нажатии рисующий цикл останавливается и загорается кнопка 'РЕСЮМ' и 'СТОП'.
'СТОП' означает, что при следующем нажатии 'ДРО' график будет отрисован с самого начала.
'РЕСЮМ' - продолжение отрисовки с того места, где остановились.
Так вот: я нажимаю 'РЕСЮМ' и все проходит как надо, за исключением того, что предыдущая часть графика пропадает.
Понятно, что ее можно нарисовать снова без слипа, но может быть есть более 'прямой' метод?
--------------------------------------
Ещё.
Как называется event формы типа 'unminimize' (разветнуть).
Re: TImage, TBitmap, Tpaintbox : что лучше?
IonIvan писал(а):Ещё.
Как называется event формы типа 'unminimize' (разветнуть).
Форму нельзя свернуть ее можно либо скрыть Hide или вообще закрыть Close, либо показать show. А вот приложение можно свернуть на панель (меню пуска).
Код: Выделить всё
Application.Restore; //Востановить свернутое приложение
Application.Minimize; //Минимизировать (свернуть)
Re: TImage, TBitmap, Tpaintbox : что лучше?
Maxizar писал(а):Application.Restore; //Востановить свернутое приложение
Application.Minimize; //Минимизировать (свернуть)
А как повесить какое либо действие на это?
Re: TImage, TBitmap, Tpaintbox : что лучше?
Форма, при нажатии кнопки, назначаем события... события - это процедуры типа TNotifyEvent, Где
Это значит, чтобы Application.OnRestore присвоить значение нужно иметь переменую типа TNotifyEvent. Значит мы должны создать процедуры я сделал так:
Тут уже в конце процедуры писать of object; не нужно.
После их нужно описать, и присвоить определенному полю. Присваивать нужно адреса процедур вот так:
Код всей формы:
Более подробно можно прочитать в любом ХОРОШЕМ учебнике по Делфи.
Код: Выделить всё
TNotifyEvent = procedure(Sender: TObject) of object;Это значит, чтобы Application.OnRestore присвоить значение нужно иметь переменую типа TNotifyEvent. Значит мы должны создать процедуры я сделал так:
Код: Выделить всё
procedure OnRest(Sender: TObject);
procedure OnMin(Sender: TObject);
Тут уже в конце процедуры писать of object; не нужно.
После их нужно описать, и присвоить определенному полю. Присваивать нужно адреса процедур вот так:
Код: Выделить всё
//Назначаем действия
Application.OnRestore:=@OnRest;
Application.OnMinimize:=@OnMin;
Код всей формы:
Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
procedure OnRest(Sender: TObject);
procedure OnMin(Sender: TObject);
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
//Назначаем действия
Application.OnRestore:=@OnRest;
Application.OnMinimize:=@OnMin;
end;
procedure TForm1.OnRest(Sender: TObject);
begin
Caption:='';
end;
procedure TForm1.OnMin(Sender: TObject);
begin
Button1.Caption:='';
end;
end.
Более подробно можно прочитать в любом ХОРОШЕМ учебнике по Делфи.
