Как установить цвет фона иконок на рабочем столе, либо сделать у них прозрачный фон?
Для этого нужно найти окно "SysListView32" (которое является списком, который содержит иконки рабочего стола). Сперва будем искать главное родительское окно "Progman", которое содержит дочернее окно "SHELLDLL_DefView" , которое в свою очередь имеет дочернее окно "SysListView32". Для этого можно воспользоваться API функцией FindWindow to. Когда Мы получим дескриптор окна "SysListView32", то можно будет воспользоваться макросами ListView_SetTextBkColor и ListView_SetTextColor для установки желаемого цвета.
Ниже приведена процедура, которая делает всё вышеперечисленное. Если параметр Trans равен true, то будет установлен прозрачный фон, иначе цвет фона будет равен Background.
interface
uses Graphics; // Будет использоваться TColor
procedure SetDesktopIconColor(Forground, Background: TColor; Trans: Boolean);
procedure SetDefaultIconColors;
implementation
uses Windows, CommCtrl; // будут использоваться HWND и ListView_XXXXX
procedure SetDesktopIconColor(Forground, Background: TColor; Trans: Boolean);
var
Window: HWND;
begin
// Находим нужное окно в три этапа
Window := FindWindow('Progman', 'Program Manager');
// Используем FindWindowEx для нахождения дочернего окна
Window := FindWindowEx(Window, HWND(nil), 'SHELLDLL_DefView', '');
// SysListView32, это список с иконками на рабочем столе
Window := FindWindowEx(Window, HWND(nil), 'SysListView32', '');
// Используем макрос для очистки цвета фона
if Trans then
ListView_SetTextBkColor(Window, $ffffffff) // фоновый цвет
else
ListView_SetTextBkColor(Window, Background); // фоновый цвет
ListView_SetTextColor(Window, Forground); // передний цвет
// теперь перерисовываем иконки
ListView_RedrawItems(Window, 0, ListView_GetItemCount(Window) - 1);
UpdateWindow(Window); // даём команду "немедленно перерисовать"
end;
procedure SetDefaultIconColors;
{ Эта процедура устанавливает цвета, которые заданы в
windows по умолчанию }
var
Kind: Integer;
Color: TColor;
begin
Kind := COLOR_DESKTOP;
Color := GetSysColor(COLOR_DESKTOP);
SetSysColors(1, Kind, Color);
end;
end.
Взято из http://forum.sources.ru
Отправить комментарий