转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
QQ窗体自动隐藏效果探究         ★★★★

QQ窗体自动隐藏效果探究

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3169 更新时间:2009/4/23 18:26:52
     SetBarHeight;

     Top := Cur_Top;

     Bottom := Cur_Bottom;

   end else

     Rec_Position := False;

 

   Timer1.Enabled := FAnchors <> [];

  end;

end;

在新的代码中,我们首先使用了三个新定义的全局变量,分别是:

Lst_Height : Integer;   //记录窗体隐藏前的高度

Lst_Width : Integer;        //记录窗体隐藏前的宽度

Rec_Position : Boolean; //是否启动窗体宽高记录标志

然后加入了三个判断代码块。

在第一个判断中首先判定窗体在移动前是否位于屏幕左右两边的隐藏区域。若为真,则判断窗体是否从隐藏区域向屏幕中央移动(注意,存在此判断的原因是因为我们还可能将窗体往屏幕两边推动)。若再为真,则恢复窗体隐藏前的大小;反之,强制设置矩形的Top和Bottom值并退出消息的处理。

第二个判断在于记录窗体的宽高值。Rec_Position是记录窗体宽高的标志,它的值在第三个判断中进行设置。若窗体在移动前位于屏幕两边的隐藏区域,则Rec_Position为True,此时窗体的高度已经固定,记录已经无意义。所以只在Rec_Position为False时才需要记录窗体的宽高。

第三个判断位于Fanchors值设置之后。它根据窗体的位置对矩形的显示效果进行判断处理。判断也是基于窗体是否位于屏幕两边进行,为True则设置矩形的高度并设置Rec_Position的值为True。

在第三个判断中使用了一个新定义的过程SetBarHeight,其代码如下:

procedure TForm1.SetBarHeight;

var

  AppBarData : TAPPBARDATA;

begin

  AppBarData.cbSize := SIZEOF(AppBarData);

  If SHAppBarMessage(ABM_GETSTATE,AppBarData) AND ABS_AUTOHIDE) <> 0 then

  begin

    Cur_Top := 1;

    Cur_Bottom := Screen.Height - 1;

  end else

  begin

    SHAppBarMessage(ABM_GETTASKBARPOS,AppBarData);

    case AppBarData.uEdge of

      ABE_TOP :    begin

                     Cur_Top := AppBarData.rc.Bottom + 1;

                     Cur_Bottom := Screen.Height - 1;

                   end;

      ABE_LEFT :   begin

                     Cur_Top := 1;

                     Cur_Bottom := Screen.Height - 1;

                   end;

      ABE_RIGHT :  begin

                     Cur_Top := 1;

                     Cur_Bottom := Screen.Height - 1;

                   end;

      ABE_BOTTOM : begin

                    Cur_Top := 1;

                     Cur_Bottom:=Screen.Height -

(AppBarData.rc.Bottom - AppBarData.rc.Top) - 1;

                   end;

    end;

  end;

end;

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,这是不随分辨率改变的)。

    由于要使窗体在屏幕两边的高度与位置可以随系统工具栏的位置和高度的改动

上一页  [1] [2] [3] [4]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台