Различия между Canvas

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Различия между Canvas

Сообщение Sergei I. Gorelkin » 18.06.2010 21:22:53

Не понял вопроса...
Новый класс не создается, он описан в модуле Graphics точно так же, как и все остальные классы. Зачем - чтобы реализовать функциональность, необходимую для рисования на битмапе.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Различия между Canvas

Сообщение Timid » 18.06.2010 22:19:51

Точнее, Canvas в Bitmap - это контейнер для методов работы с матрицей пикселей, в том числе и для рисования на ней.
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Re: Различия между Canvas

Сообщение А.Н. » 18.06.2010 23:04:29

Sergei I. Gorelkin писал(а):Не понял вопроса...
Новый класс не создается, он описан в модуле Graphics точно так же, как и все остальные классы. Зачем - чтобы реализовать функциональность, необходимую для рисования на битмапе.

Ну, вы пишите, что:
При обращении к свойству TBitmap.Canvas создается не TCanvas, а его наследник TBitmapCanvas. Этот TBitmapCanvas не предназначен для самостоятельного использования, и его нет в интерфейсе.

Т.е., TBitmap имеет Canvas типа TBitmapCanvas? А TControl Canvas типа TControlCanvas?
Но, если, я не перепутал чего-то, они в обоих классах объявлены, как TCanvas.
Не понимаю... :(

Timid писал(а):Точнее, Canvas в Bitmap - это контейнер для методов работы с матрицей пикселей, в том числе и для рисования на ней.

Т.е., они потомки TCanvas? Но, он же не абстрактный класс, по идее, а самостоятельный?

Добавлено спустя 2 минуты 37 секунд:
Всё, дошло. :)
proc TRasterImage.CreateCanvas:

Canvas := TBitmapCanvas.Create;

Но странно... Я думал, что канва контролов и картинок - одинаковая...

Добавлено спустя 3 минуты 34 секунды:
Хм:
Код: Выделить всё
constructor TCustomControl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  FCanvas := TControlCanvas.Create;


"Порадовало", чуть ниже в том же конструкторе:
// ----Micha's comment----
// If double buffering has to be enabled before LCL can draw anything,
// something is wrong. In the overridden Paint method you should always be
// able to draw, independent of DoubleBuffered setting.


:?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 52

Рейтинг@Mail.ru