![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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);