Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Рисование на экране [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?


Наверх

Титульная страница Поиск, карта сайта Написать письмо