Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.031 c
14-1087578236
Art_Z
2004-06-18 21:03
2004.07.11
Пираты


4-1085539425
eRoR_rrr
2004-05-26 06:43
2004.07.11
Смена обоев


3-1086959724
TUser
2004-06-11 17:15
2004.07.11
Что это за файлы?


4-1086092265
Андрей Сенченко
2004-06-01 16:17
2004.07.11
К вопросу по ALT-F4 и прочем


1-1088070116
Alek
2004-06-24 13:41
2004.07.11
Как закрыть процесс?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский