Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

HDC, использование в OnPaint


panov ©   (2004-06-02 13:35:00) 

На главной форме лежит TPaintBox (имя pb),
определена функция и глобальная переменная(для теста)

var
 tDC: HDC;


в OnCreate формы:

 tDC := pb.Canvas.Handle;

в pb.OnPaint написано:

Upd(tUpd);


procedure Upd(aDC: HDC);
begin
 TextOut(aDC,10,10,'1234567890',10);
end;


Таким способом не происходит отрисовка(или происходит неправильно).

При вызове в OnPaint Upd(pb.canvas.Handle) отрисовка идет нормально.

Что за особенность?

При просмотре в отладчике tDC равно pb.Canvas.Handle.


Игорь Шевченко   (2004-06-02 14:43:00) [1]

PaintBox - это кусок формы. DC один для клиентской части формы. Из этого и надо исходить


panov   (2004-06-02 14:29:00) [2]

>MBo ©   (02.06.04 14:24) [10]

Придется передавать в OnPaint либо передавать сам TPaintBox конструктору в классе.

У меня реализован класс, в котором формируется объект для отображения на канве. При создании в него передается DC.
В некоторых методах класса могут рассчитываться позиции на канве.

А раз такая ситуация с DC в PaintBox, то мне просто придется в конструктор класса передавать TPaintBox, а не DC, хотя класс и становится зависимым от используемого компонента или объекта для отображение.


MBo   (2004-06-02 14:24:00) [3]

>Похоже, что  надо каждый раз в OnPaint передавать DC, либо получать его от формы, на которой находится TPaintBox вычислять ClientRect для него...

А для чего?
Вот в OnPaint и получать этот DC - чем плохо?


panov   (2004-06-02 14:21:00) [4]

Спасибо, действительно так - TPaintBox не имеет постоянного HDC

Похоже, что  надо каждый раз в OnPaint передавать DC, либо получать его от формы, на которой находится TPaintBox вычислять ClientRect для него...


inic   (2004-06-02 14:07:00) [5]

> ClickMaker
А также TGraphicControl.WMPaint


Clickmaker   (2004-06-02 14:06:00) [6]

Разгадка в функции TControlCanvas.CreateHandle


serge   (2004-06-02 14:06:00) [7]

сорри за повтор


serge   (2004-06-02 14:03:00) [8]

Удалено модератором
Примечание: Дубль


serge   (2004-06-02 14:02:00) [9]

При каждой отрисовке TPaintBox - Canvas.Handle получает разные значения. :(


serge   (2004-06-02 14:02:00) [10]

Удалено модератором
Примечание: Дубль


MBo   (2004-06-02 13:52:00) [11]

>При просмотре в отладчике tDC равно pb.Canvas.Handle.
А у меня - не равно

procedure TForm1.FormCreate(Sender: TObject);
begin
 dc:=pb.Canvas.Handle;
end;

procedure TForm1.pbPaint(Sender: TObject);
begin
Caption:=format('%d %d',[dc,pb.Canvas.Handle]);
...


panov   (2004-06-02 13:37:00) [12]

Сорри, вместо

в pb.OnPaint написано:

Upd(tUpd);


читать
в pb.OnPaint написано:

Upd( tDC);


Наверх

Титульная страница Поиск, карта сайта Написать письмо