Delphi下QQ窗体自动隐藏探索
http://tech.ddvip.com 2006年07月31日 社区交流
本文详细介绍Delphi下QQ窗体自动隐藏探索
SetBarHeight用于计算矩形高度,计算后的结果通过Cur_Top和Cur_Bottom两个全局变量传递给矩形的Top和Bottom参数。
在该过程中使用了一个Windows API 函数SHAppBarMessage。SHAppBarMessage 的作用是向系统传递系统工具栏消息,其函数原型为:
WINSHELLAPI UINT APIENTRY SHAppBarMessage(DWORD dwMessage,PAPPBARDATA pData);
其中dwMessage 是发送给系统的工具栏消息; pData是指向PAPPBARDATA结构的指针,PAPPBARDATA结构返回的内容依据发出的消息而定。
在过程中,我们首先传递ABM_GETSTATE参数去获取系统工具栏的状态是自动隐藏还是总在最前显示。
然后我们再利用ABM_GETTASKBARPOS参数去获取系统工具栏的位置,此时AppBarData的返回值中将会是系统工具栏的位置ABE_TOP 、ABE_LEFT、ABE_RIGHT、ABE_BOTTOM四者之一。最后我们利用系统工具栏自身的拖动矩形参数计算出工具栏的高度。
使用了SetBarHeight令窗体在屏幕两边随系统工具栏的位置和高度的改动而发生相应的变化。当然,你也可以直接给Cur_Top和Cur_Bottom这两个变量设置固定值以实现QQ效果。在测试中,Cur_Top可以是1,而Cur_Bottom 则是Screen.Width-30(Windows系统工
具栏的高度在默认情况下是30,这是不随分辨率改变的)。
由于要使窗体在屏幕两边的高度与位置可以随系统工具栏的位置和高度的改动而发生相应的变化,因此OnTimer事件中的处理也要相应的改动,主要是显示窗体的时候要注意对窗体Top和Height属性的设置必须跟随与系统工具栏的位置和高度相协调,代码如下:
..
if akLeft in FAnchors then
begin
Left := -Width + cOffset;
SetBarHeight;
Top := Cur_Top;
Height := Cur_Bottom;
end;
if akRight in FAnchors then
begin
Left := Screen.Width - cOffset;
SetBarHeight;
Top := Cur_Top;
Height := Cur_Bottom;
end;
..
作者:cobi 责编:豆豆技术应用