Как установить цвет фона иконок на рабочем столе, либо сделать у них прозрачный фон?

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