请问:使桌面图标下的文字与背景透明,该用什么方法?(50分)

  • 主题发起人 主题发起人 yname
  • 开始时间 开始时间
Y

yname

Unregistered / Unconfirmed
GUEST, unregistred user!
请问:使桌面图标下的文字与背景透明,该用什么方法?
 
首先,要利用函数 DZGetDesktopIconWindow 找到包含桌面图标的窗口。

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;
 
1、 新建一工程,在 uses 中加入 CommCtrl 单元,窗体上加一个按钮;

2、 声明一个取得桌面句柄的函数:

function TForm1.GetDesktopHand: THandle;

begin

Result:=FindWindow('progman',nil);

Result:=GetWindow(Result,GW_Child);

Result:=GetWindow(Result,GW_Child);

end;

3、 声明一个设置图标文字颜色的过程:

procedure TForm1.SetTextColor(ForeClr, BackClr: TColor);

var Hand: THandle;

begin

Hand:= GetDesktopHand;

Listview_SetTextColor(Hand,ForeClr); // 设置文字前景色;

Listview_SetTextBkColor(Hand,BackClr); // 设置文字背景色,crNone 为透明;

Listview_RedrawItems(Hand,0,Listview_GetItemCount(Hand)); // 重画;

end;
 
Windows优化大师
 
同意卷起千堆雪tyn
 
后退
顶部