Внешний вид сайта:

Как сделать иконки Рабочего стола прозрачными

Сначала нужно найти дескриптор окна, которое содержит значки Рабочего Стола. Вот эта функция:
uses Windows; 

function DZGetDesktopIconWindow: HWND;
begin
  Result := FindWindow(PChar('Progman'),
      PChar('Program Manager')); 
  Result := FindWindowEx(Result, 0,
      PChar('SHELLDLL_DefView'), nil); 
  Result := FindWindowEx(Result, 0,
      PChar('SysListView32'), nil);
end;

А это, как достичь эффекта прозрачности:

uses Windows, CommCtrl;

procedure DZSetDesktopIconTransparent;
var
  Desktop : HWND; 
begin
  Desktop := DZGetDesktopIconWindow;
  ListView_SetTextBkColor(Desktop, MAXDWORD);
  ListView_RedrawItems(Desktop, 0, Pred(
      ListView_GetItemCount(Desktop)));
  UpdateWindow(Desktop);
end;

Между прочим, Вы можете установить любой цвет фона или текста заголовка значка, не только прозрачным. Вот пример:

uses Windows, CommCtrl,
  Graphics; // Только для определения TColor

procedure DZSetDesktopIconColors(const FColor, BColor: TColor);
var
  Desktop : HWND;
begin
  Desktop := DZGetDesktopIconWindow;
  ListView_SetTextColor(Desktop, FColor);
  ListView_SetTextBkColor(Desktop, BColor);
  ListView_RedrawItems(Desktop, 0, Pred(
      ListView_GetItemCount(Desktop)));
  UpdateWindow(Desktop);
end;

В процедуре выше FColor - цвет текста, BColor - цвет фона.

И наконец, эта процедура сбросит Ваши цвета назад после Ваших экспериментов над ними:

uses Windows;

procedure DZResetDesktopIconColors;
var
  Kind, Color : Integer;
begin
  Kind := COLOR_DESKTOP;
  Color := GetSysColor(COLOR_DESKTOP);
  SetSysColors(1, Kind, Color);
end;

Комментарии

Нет комментариев. Ваш будет первым!