Как установить цвет фона иконок на рабочем столе, либо сделать у них прозрачный фон? |
Previous Top Next |
Для этого нужно найти окно "SysListView32" (которое является списком, который содержит иконки рабочего стола). Сперва будем искать главное родительское окно "Progman", которое содержит дочернее окно "SHELLDLL_DefView" , которое в свою очередь имеет дочернее окно "SysListView32". Для этого можно воспользоваться API функцией FindWindow to. Когда Мы получим дескриптор окна "SysListView32", то можно будет воспользоваться макросами ListView_SetTextBkColor и ListView_SetTextColor для установки желаемого цвета.
Ниже приведена процедура, которая делает всё вышеперечисленное. Если параметр Trans равен true, то будет установлен прозрачный фон, иначе цвет фона будет равен Background.
Code: |
unit DeskIcons;
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. |
©Drkb::01823
Взято из http://forum.sources.ru