Форум: "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