Главная страница
    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.03 c
1-1088072674
Anatoliy
2004-06-24 14:24
2004.07.11
Распаковать буфер


1-1088077542
BFG9k
2004-06-24 15:45
2004.07.11
Текст как у недоступного компонента


3-1087474359
serg128
2004-06-17 16:12
2004.07.11
Как получить сумму поля fld в TClientDataSet?


14-1087990751
DimKa
2004-06-23 15:39
2004.07.11
Вот только что зарплату повысили.


8-1083141345
Marina_S
2004-04-28 12:35
2004.07.11
Исходник JPEG





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский