发信人: daji(妲姬)
整理人: teleme(2001-04-27 09:17:09), 站内信件
|
一般而言,窗口最大化不能覆盖任务栏,下面的方法可以突破这个限制。
为完成这项工作需要处理 WM_SETTINGCHANGE 消息,并使用 SystemParametersInfo(...) WinAPI 函数。
TfmMyForm=class(TForm)
procedure FormCreate(Sender: TObject);
.............
private
......
procedure WMSettingChange( var Msg: TMessage); message WM_SETTINGCHANGE;
...........
protected
........
end;
implementation
// returns available work area
function GetWindowsWorkArea: TRect;
begin
SystemParametersInfo(SPI_GETWORKAREA, 0, @Result, 0);
end;
..........
//respond to any change of work area dimensions during runtime...
procedure TfmMyForm.WMSettingChange( var Msg: TMessage);
var
R: TRect;
begin
if (Msg.WParam=SPI_SETWORKAREA) then
begin
R:=GetWindowsWorkArea;
SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top);
end;
Msg.Result:=0;
end;
//in an OnFormCreate event get available work area,
//because your form won't get WM_SETTINGCHANGE at startup...
procedure TfmMyForm.FormCreate(Sender: TObject);
var
R: TRect;
begin
R:=GetWindowsWorkArea;
SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top);
end;
//*************************************************
使桌面图标的标题为透明背景
Windows的桌面属性对话框并没有使桌面图标标题为透明的选项,使得在使用墙纸时总有一块
为背景色的区域,下面是使其为透明的代码。
首先,找到包括图标的窗口,即桌面的句柄。
uses Windows;
function GetDesktopIconWindow: 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 SetDesktopIconTransparent;
var
Desktop : HWND;
begin
Desktop := GetDesktopIconWindow;
ListView_SetTextBkColor(Desktop, MAXDWORD);
ListView_RedrawItems(Desktop, 0, Pred(ListView_GetItemCount(Desktop)));
UpdateWindow(Desktop);
end;
BTW,还可以设置图标标题文字和背景的颜色。
uses Windows, CommCtrl, Graphics;
procedure SetDesktopIconColors(const FColor, BColor: TColor);
var
Desktop : HWND;
begin
Desktop := GetDesktopIconWindow;
ListView_SetTextColor(Desktop, FColor);
ListView_SetTextBkColor(Desktop, BColor);
ListView_RedrawItems(Desktop, 0, Pred(ListView_GetItemCount(Desktop)));
UpdateWindow(Desktop);
end;
其中 FColor 是前景色,BColor 是背景色。
最后,是恢复原来的样子。
uses Windows;
procedure ResetDesktopIconColors;
var
Kind, Color : Integer;
begin
Kind := COLOR_DESKTOP;
Color := GetSysColor(COLOR_DESKTOP);
SetSysColors(1, Kind, Color);
end;
----
^^ `_ ,
^^ | | | Hello, -(_)-
^^ )_) )_) )_) My Friends! , `
姬海涵 )___))___))___)\ ,
)____)____)_____)\\ __)\_
妲姬网苑 _____|____|____|____\\\__ (\_.-' a`-.
---------\ /--------(/~~````(/~^^`--------
^^^^^ ^^^^^^^^^^^^^^^^^^^^^ http://daji.xoasis.com
^^^^ ^^^^ ^^^ ^^ [email protected]
|
|