![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рисование на экране [D7, WinXP]
Antonmm © (2004-09-08 21:18:00)Как нарисовать на desktope какую-нибудь фигуру?(Например : круг)
KSergey (2004-09-09 11:10:00) [1]> [12] KSergey © (09.09.04 11:09)
> Вот в дельфийской справке по TCanvas.Handle его нет.
Имелось в виду - в приведенном там примере.
KSergey (2004-09-09 11:09:00) [2]> [11] TUser © (09.09.04 11:01)
> > а зачем ReleaseDC(0, DC) ?
> у меня и без него прекрасно работает!
>
> Не надо зря юзать ресурс. Не нужен - освободи.
А для меня это до сих пор больной вопрос: надо или нет.
Вот в дельфийской справке по TCanvas.Handle его нет. Единственный источник, котоорому вроде можно доверять. Более ничего авторитетного, указывающего на его необходимость/не обязательность использования не нашел.
PS
Разумеется, это все в разрезе такого шаблона:
c := TCanvas.Create;
c.Handle := GetDC(...);
...
c.Free;
Если же речь о GetDC(...) и далее WinAPI - тогда понятно вопроса о том вызывать/не вызывать ReleaseDC не возникает.
TUser (2004-09-09 11:01:00) [3]> а зачем ReleaseDC(0, DC) ?
у меня и без него прекрасно работает!
Не надо зря юзать ресурс. Не нужен - освободи.
KSergey (2004-09-09 08:59:00) [4]> [9] kaZaNoVa (09.09.04 08:57)
> а зачем ReleaseDC(0, DC) ?
> у меня и без него прекрасно работает!
Без Free тоже прекрасно работает ;)
На кой его эти умники пишут?
kaZaNoVa (2004-09-09 08:57:00) [5]а зачем ReleaseDC(0, DC) ?
у меня и без него прекрасно работает!
Александр1 (2004-09-09 07:35:00) [6]procedure TForm1.Button1Click(Sender: TObject);
var dtC:TCanvas;
begin
dtC:=TCanvas.Create;
//Устанавливаем связь с рабочим столом
dtC.Handle:=GetDC(Hwnd_Desktop);
dtC.Font.Size:=20;
dtC.TextOut(200,400,'Привет!');
//Разрыв связи между dtC и рабочим столом
ReleaseDC(dtC.Handle, Hwnd_Desktop);
dtC.Free;
end;
Рисовать аналогично. Пеши dtC.LineTo(800,600); и т.д.
Так например можно вывести на рабочий стол рисунок.
procedure TForm1.Timer1Timer(Sender: TObject);
var dtC:TCanvas;
Ris:TBitmap;
begin Randomize;
//x:=x+1;
Ris:=TBitmap.Create;
dtC:=TCanvas.Create;
dtC.Handle:=GetDC(Hwnd_Desktop);
dtC.Font.Size:=20;
dtC.TextOut(200,400,'wsdwdwewewe');
Ris.LoadFromFile('1.bmp');
dtC.Draw(Random(600),Random(600),Ris);
Ris.Free;
ReleaseDC(dtC.Handle, Hwnd_Desktop);
dtC.Free;
end;
Gero (2004-09-09 00:11:00) [7]GetDesktopWindow
Mihey_temporary (2004-09-08 23:45:00) [8]
> wl (08.09.04 22:39) [4]
Надо добавить ReleaseDC(0, DC)
wl (2004-09-08 22:41:00) [9]хых, а также поверх всех окон...
ерунда какая-то
wl (2004-09-08 22:39:00) [10]
var
dc: HDC;
begin
dc := GetDC(0);
if(dc)then
LineTo(dc,800,600);
end;
Попробуй тогда выполнить этот код, исправив возможные ошибки( я писал на C++, потом переводил в делфи, может где и ошибся). прекрасно рисует на десктопе
oookin (2004-09-08 22:22:00) [11][2] wl (08.09.04 21:57)
Я и сам не знаю... Но казалось бы хэндл десктопа не должен был бы быть равен нулю..
wl (2004-09-08 21:57:00) [12]affaik, hwnd десктопа равно нулю, может я и не прав конечно...
olookin (2004-09-08 21:20:00) [13]Получить хэндл десктопа рисовать?
GetDC и Draw?