Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];




Вниз

Как рисовать на обоях, вместо обоев? 


alxx   (2002-04-12 16:17) [0]

Не подскажете, как можно рисовать прямо на обоях (разместить поверх обоев свое окно), как например может делать Winamp"овская AVS (overlay mode)?



Song   (2002-04-12 16:32) [1]

Это назвается рисовать на канвасе рабочего стола.



alxx   (2002-04-14 14:43) [2]

Ну и как нарисовать на канвасе рабочего стола?
Если использовать GetDesktopWindow - то получается хэндл вовсе не обоев, а всего рабочего стола, включая окна, которые на нем висят.



lipskiy   (2002-04-14 14:53) [3]

Лучше взять файл обоев, испоганить его, и подсунуть системе как новые обои, имхо.



alxx   (2002-04-14 14:57) [4]

Нет. Я хочу в реалтайме, а загрузка новых обоев, я так понимаю десять раз в секунду не получится. Может это какие-нибудь функции DirecrX"а? AVS то как-то делает.



alxx   (2002-04-14 15:41) [5]

Никто не знает?



lipskiy   (2002-04-14 19:17) [6]

В реалтайме, имхо, только на канве рабочего стола, при этом надо следить за всеми окнами и их координатами и постоянно перерисовывать, если окна меняют свое положение.



alxx   (2002-04-14 21:01) [7]

А как за ними следить? Хотя вроде бы были функции... Разберусь.
А вот на канве рабочего стола - с помощью дескриптора, который получить на его хэндл? А то я попробовал, чего-то не получилось. Интересно только - как это все будет тормозить?

А как же быть с иконками - они же должны прорисовываться. А их не отследить.



alxx   (2002-04-16 17:46) [8]

Никто не знает, как быть?



slym   (2002-04-17 07:29) [9]

hDC:=getDC(0);
и paint...
рисуй че надо, только проблема если десктоп обновляется, а делает он это часто, все ваши старания затираются...
рисуешь где нить в прозрачный битмап, ставишь хук на WM_PAINT и выкладываешь свой битмап на getDC(0)
можно сделать транспарент форму присвоить парента (десктоп) и рисовать на ней, только самому ее перерисовывать принудительно раз 25 в секунду, мерцает? дубл буфферинг... или опять Hoук



Alx2   (2002-04-17 08:31) [10]

>А как за ними следить? Хотя вроде бы были функции... Разберусь.
Ставишь hook на Wm_onPaint "рабочего стола" и после его отработки дорисовываешь свое.



REA   (2002-04-17 09:40) [11]

Можно еще прозондировать поглубже API функции и раскопать Handle нужного окна. Или еще посмотреть плагинсы к эксплореру - активный стол там или еще что.



Alx2   (2002-04-17 09:54) [12]

>раскопать Handle нужного окна
GetDesktopWindow



REA   (2002-04-17 10:52) [13]

WinSight говорит что иерархия окон такая -
Desktop - Progman (Explorer) - Shell_DLL - SysListView32 - SysHeader (Hidden)

не знаю чей Handle возвратит GetDesktopWindow, но если тот, что нужно, то и хорошо. (Я бы наверно рисовал поверх этого SysListView32, хотя далеко не уверен)



Alx2   (2002-04-17 11:15) [14]

Рисует на Desktop, правда значки затирает. IMHO надо InvalidateRgn заполнять еще.

cnv : TCanvas;
DC : HDC;
hw : HWND;
Begin
cnv := TCanvas.Create;
Try
hw := FindWindow("ProgMan", Nil);
DC := GetWindowDC(hw);
If DC <> 0 Then
Begin
cnv.Handle := DC;
cnv.Pen.COLOR := clRed;
For K := 1 To 100 Do
cnv.Rectangle(random(600), random(600), random(600), random(600));
ReleaseDC(hw, DC);
End;
Finally
cnv.Free;
End;



alxx   (2002-04-17 21:11) [15]

Спасибо за ответы. Попробую дальше поразбираться.
А может это правда какая-нибудь функция DirectX-а?




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.024 c
4-94613           Dimitriy              2002-02-22 17:38  2002.04.29  
Ctrl + Alt + Del


1-94450           JMax                  2002-04-16 06:42  2002.04.29  
Потоки


3-94287           dim-                  2002-04-08 10:41  2002.04.29  
Удаление в дереве


7-94579           Albun                 2002-01-31 23:47  2002.04.29  
LPT Порт


3-94340           hn                    2002-04-09 17:25  2002.04.29  
Семейство Tquery