Главная » 2D графика » Рисуем на рабочем столе

RSS

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

Не нравитсяНравится   Рейтинг +2

Рабочий стол

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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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:

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

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

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

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

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

В заключении: люди, по чаще смотрите Help по Delphi, особенно полезен файл Win32.hlp. Можно многому научиться :)


Исходный код