Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

HDC, использование в OnPaint   Найти похожие ветки 

 
panov ©   (2004-06-02 13:35) [0]

На главной форме лежит 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.


 
panov ©   (2004-06-02 13:37) [1]

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

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

Upd(tUpd);


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

Upd(tDC);


 
MBo ©   (2004-06-02 13:52) [2]

>При просмотре в отладчике 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]);
...


 
serge ©   (2004-06-02 14:02) [3]

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


 
serge ©   (2004-06-02 14:02) [4]

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


 
serge ©   (2004-06-02 14:03) [5]

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


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

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


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

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


 
inic ©   (2004-06-02 14:07) [8]

> ClickMaker
А также TGraphicControl.WMPaint


 
panov ©   (2004-06-02 14:21) [9]

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

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


 
MBo ©   (2004-06-02 14:24) [10]

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

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


 
panov ©   (2004-06-02 14:29) [11]

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

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

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.057 c
14-1087819008
YurikGL
2004-06-21 15:56
2004.07.11
Восстановление SCSI-винта


14-1086967386
karlsn
2004-06-11 19:23
2004.07.11
помогите найти ноты!!!!!!


14-1087502171
Blackman
2004-06-17 23:56
2004.07.11
Освободи мощь Shift!


1-1088545291
001
2004-06-30 01:41
2004.07.11
Как получить код символа в строчке?


14-1087812866
Nikolay M.
2004-06-21 14:14
2004.07.11
Таки женился :-)