Главная страница
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.053 c
8-1082698200
D. Andrew
2004-04-23 09:30
2004.07.11
Как вырезать звуковой фрагмент из WAV потока?


3-1087119568
Axelrodm
2004-06-13 13:39
2004.07.11
Чтение курсора (c BLOB )из Хранимой процедуры ORACLE в BDE


1-1087995815
BFG9k
2004-06-23 17:03
2004.07.11
Не работает метод broadcast


14-1088091866
FX
2004-06-24 19:44
2004.07.11
Preview


4-1085833368
Grinder
2004-05-29 16:22
2004.07.11
Как запретить выключение Windows НЕ используя CloseQuery?