![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
прорисовка [D6, Win95/98]
RaPToR_1 © (2004-08-18 20:47:00)подскажите как ,например на панели ,прорисовывать по координатам точки заданного цвета?
Семен Сорокин (2004-08-19 11:07:00) [1]я тоже точно сказать не могу, поэтому лучше уж пусть будет :)
но ничего похожего на ReleaseDC в деструкторе канваса не нашел, однако там есть принудительное выставление Handle в 0, может это оно?
KSergey (2004-08-19 11:01:00) [2]Просто как-то искал, возможно не особо напрягаясь, правда
Но так и не нашел четкого, обоснованного ответа.
KSergey (2004-08-19 11:01:00) [3]> [16] Семен Сорокин © (19.08.04 10:59)
Это когда я чистым WinAPI пользуюсь - то там понятно, разумеется.
А вот что есть в обертке TCanvas - вот в чем штука...
Семен Сорокин (2004-08-19 10:59:00) [4]KSergey © (19.08.04 10:56) [15]
из Help'a по GetDC:
After painting with a common device context, the ReleaseDC function must be called to release the device context. Class and private device contexts do not have to be released. The number of device contexts is limited only by available memory.
KSergey (2004-08-19 10:56:00) [5]> [12] Семен Сорокин © (19.08.04 10:18)
> with TCanvas.Create do
> try
> Handle := GetDC(Panel.Handle);
> // Use Canvas.Pixels ...
> ReleaseDC(Panel.Handle, Handle)
> finally
> Free
> end
Встречный вопрос: а выделеная строка обязательна? TCanvas сам при уничтожении не высвободит?
NAlexey (2004-08-19 10:28:00) [6]>NAlexey © (19.08.04 10:24) [13]
Упс... Чушь спорол, прошу прощения.
NAlexey (2004-08-19 10:24:00) [7]>Семен Сорокин © (19.08.04 10:18) [12]
Ну так а нам нужен DC канвы а не панели?
Семен Сорокин (2004-08-19 10:18:00) [8]кому этот путь [3] не нравится :)) можно использовать другой:
with TCanvas.Create do]
try
Handle := GetDC(Panel.Handle);
// Use Canvas.Pixels ...
ReleaseDC(Panel.Handle, Handle)
finally
Free
end
NAlexey (2004-08-19 10:16:00) [9]>KSergey © (19.08.04 10:14) [10]
Ага, набивать срамнОй текст одной рукой, другой стыдливо прикрывая глаза.:)
KSergey (2004-08-19 10:14:00) [10]> [9] NAlexey © (19.08.04 10:08)
А использовать то, что описано в документации - уже не прилично? ;)
NAlexey (2004-08-19 10:08:00) [11]Причем программисты от Borland сами частенько не гнушаются такими методами, можно убедиться задав поиск по 'Hack' в исходниках VCL.
KSergey (2004-08-19 09:17:00) [12]Однако сам по себе путь вполне соответствует документации.
Anatoly Podgoretsky (2004-08-19 09:15:00) [13]Это даже еще ниже, это приведение типов, куда как стандартнее, но метод относится к хакерским. Иногда так прямо и пишут, не TMyPanel, а THackClass, что точнее отражает суть.
Думкин (2004-08-19 07:03:00) [14]> [5] Алхимик © (19.08.04 00:11)
Это не фича. Это стандартный способ вытаскивания protected.
Алхимик (2004-08-19 00:11:00) [15]
> [4] Mihey_temporary © (19.08.04 00:07)
Как я понимаю - это недокументированая фича.
Mihey_temporary (2004-08-19 00:07:00) [16]
> Алхимик © (18.08.04 23:24) [3]
Красивое решение, надо запомнить.
Алхимик (2004-08-18 23:24:00) [17]TMyPanel = class(TPanel);
...
TMyPanel(Panel1).Canvas.Pixels[10,10] := clRed;
TMyPanel(Panel1).Canvas.Pixels[20,20] := clRed;
:)
Mihey_temporary (2004-08-18 22:40:00) [18]
> Рыба © (18.08.04 21:04) [1]
Canvas? На панели?
Рыба (2004-08-18 21:04:00) [19]Canvas.Pixels