Версия для печати

Рисуем на рабочем столе

Оцените материал
(3 голосов)

Вы можете использовать поверхность рабочего стола для вывода любой графики. Этот способ может понадобится для написания различных напоминалок, показ праздников. Вы можете поселить на рабочем столе забавного персонажа из комикса и многое другое. Осуществить это можно очень простым способом, напишем процедуру для рисования:

procedure TForm1.DeskTopPaint(Sender:Tobject);
var
DeskTop:TCanvas;
begin
DeskTop:=TCanvas.Create;
try
DeskTop.Handle:=GetDC(0);// Получим Handle Рабочего стола

И ВСЕ !!! Далее работаем с DeskTop как с обычным TCanvas.
Например поместим текущую дату:

DeskTop.Brush.Style:=bsClear; // Устанавливаем тип кисти
With DeskTop.Font do // Подбираем шрифт
Begin
Color:=clRed;
Size:=13;
Name:='Times New Roman';
Style:=[fsBold];
end;
DeskTop.TextOut(10,10,'Сегодня : '+DateToStr(Now));
ReleaseDC(0, DeskTop.handle);
finally
DeskTop.Free; // Уберем за собой
end;
DeskTop.Free;
end;

Единственный минус данного способа - другие формы затирают надпись. По этому есть несколько других методов. Это прозрачная форма и помещение изображения вместо бакграунда ( так делают почти все программы календари ). Для смены обоев предусмотрена функция Win32API:

SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar('Path'),SPIF_SENDWININICHANGE);Где Path - путь к BMP файлу.

По умолчанию устанавливает обои 'В центре', а как поставить 'Размножить' я так и не нашел. Если вы захотите убрать обои, то в параметре Path надо указать несуществующий файл.

При работе часто требуется обновить рабочий стол, по умолчанию это делается клавишей F5. В Delphi это делается это вот такой функцией:

SendMessage(FindWindow ('Progman', 'Program Manager'), WM_COMMAND, $A065, 0);

Функцией FindWindow находим, и получаем handle на нужное окно.
Первый параметр - class name / название класса /, а второй - window name / название окна /

SendMessage - функция, для посылания сообщений окну или окнам, вот ее параметры :

SendMessage(
HWND hwnd,     // handle на посылаемое окно, его мы нашли функцией FindWindow
UINT uMsg,     // сообщение для посылки
WPARAM wParam, // первый и
LPARAM lParam  // второй параметры.

Прочитано 2462 раз