Delphi实现QQ窗体的缩入伸出功能

不知道大家在使用QQ时有没有想到它的缩入伸出的功能是如何实现的呢?实现这个效果的关键在于如何判断当前鼠标指针下面的窗体是不是我们的程序窗体。GetCursorPos()是一个可以获得鼠标指针在屏幕中的坐标的API函数,利用它与FindVCLWindow()的结合就可以轻易地获得鼠标指针下的VCL可视组件,但当一个窗体中不只一个VCL可视组件,例如可能还有TPanel、TMemo等等类型时,那么我们就必须要查找到它们的Parent级,最终得到TForm,那就是指我们的程序窗体。按照这个思路我自定义了GetFormNameAt()函数,它可获得当前鼠标指针下面的窗体的名称。以下列出程序的主要实现代码,供大家参考:

//自定义函数GetFormNameAt,获得鼠标针指下窗体的Name
function GetFormNameAt ( X, Y : integer ) : string;
  var
   P:TPoint;
   W:TWinControl;
  begin
   P.X := X;
   P.Y := Y;
   W := FindVCLWindow(P); //得到鼠标指针下的VCL可视组件
   if ( nil <> W ) then
   begin
    while w.Parent<>nil do //当W的上级Parent不为空时就继续往上找
     w:=w.Parent;
     Result := W.Name;//最后返回窗体的名称Name
    end
   else
   begin
    Result := ’’;
   end;
  end;
  procedure TForm1.Timer1Timer(Sender: TObject);
  var
   winPos:TPoint;
  begin
   if (form1.Top<=3) or (form1.Left>=screen.Width-form1.Width-3) then //判斷
   begin
    GetCursorPos(winpos); //得到当前鼠标指针的在屏幕上的坐标
    //当鼠标指针下的窗体的Name等于form1.name时
    if form1.name=GetFormNameAt(winpos.X,winpos.Y) then
     {在此我们可以为form1取一个特别的名称,以防有别的窗体名称与它相同}
    begin
     form1.Timer2.Enabled:=false; //停用Timer2
     form1.Top:=0; //form1的Top与屏幕对齐
    end
   else
    form1.Timer2.Enabled:=true; //开启Timer2
   end;
  end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
  if form1.Top<=20 then
   form1.Top:=-(form1.Height-10);//将form1向上移,在屏幕上方露出10像素
end;

时间: 2016-10-15

Delphi实现QQ窗体的缩入伸出功能的相关文章

Delphi下QQ窗体自动隐藏探索

腾讯QQ是当前流行的网络聊天工具之一,由于它在应用设计上有很多独特之处,所以也吸引了很多程序员对之进行研究和模仿.在这里,我将利用Delphi对QQ的窗体自动隐藏效果提出自己的实现方法. 一.问题的提出 熟悉QQ使用的朋友都知道,当QQ窗体区域超出屏幕四边时,窗体就会自动"消失",只留下窗体一边的小部分显露在桌面上.当用鼠标移动到显露部分之上,窗体就会在隐藏位置重新完整显示:但当鼠标离开窗体区域后,窗体便会重新进入隐藏状态. 对隐藏的全过程进行分析,可以得出两点推测:第一,窗体隐藏的处

用C#代码实现类似QQ窗体的“上、左、右”停靠功能

阅读对象:入门级,老鸟漂过 大家都知道QQ有一个自动停靠功能,即"上.左.右",当你把窗体拖到屏幕边缘,然后移开鼠标它会自动缩放,然后只显示一小小点出来,我们仔细观察会发现其实它只露3像素左右的边缘,当你鼠标移上去它又会伸出来,介于普通入门级学者要求艾伟就在这里给需要的朋友们分享分享我是怎么实现的,代码很少,效果如下: 先在当前类里弄几个变量,方便逻辑判断: QQ_MODE(用于记录窗体当前的停靠状态,即0为不停靠,1为X轴,2为Y轴,3为顶部),QQ_T(窗体缩放时显示出来的边缘大小

Android自定义ListView实现仿QQ可拖拽列表功能_Android

我们大致的思路,其实是这样子的,也是我的设想,我们可以先去实现一个简单的ListView的数据,但是他的Adapter,我们可以用系统封装好的,然后传递进去一个实体类,最后自定义一个listview去操作,所以我们先把准备的工作做好,比如? list_item.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.a

Android自定义ListView实现仿QQ可拖拽列表功能

我们大致的思路,其实是这样子的,也是我的设想,我们可以先去实现一个简单的ListView的数据,但是他的Adapter,我们可以用系统封装好的,然后传递进去一个实体类,最后自定义一个listview去操作,所以我们先把准备的工作做好,比如? list_item.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.a

如何让QQ也具有MSN的手写板功能

我们知道MSN具有手写板功能,点击输入消息框上的标签,就可以使用鼠标来随意涂鸦,可以给好友发送自己画的图片,或是搞笑的表情去骚扰一下好友,感觉非常有趣,但是QQ却一直不具备该功能,不免让人有些许的遗憾.如何让QQ也具有MSN的手写板功能呢?其实你只要下载QQPaint就可以了. QQpaint是一款免费的绿色软件,下载解压后直接运行即可,使用该工具就可以为QQ增加手写板功能,可以在聊天的时候随意涂鸦,并且可以把涂鸦内容保存下来,以后就可以象发送快捷回复那样快速的发送涂鸦内容.使用QQPaint不

利用Delphi为Visual C++添加JPEG图形处理功能

Visual C++对JPEG等常见图形格式的支持不够一直是为人所诟病的缺陷,相比起来,Delphi/C++ Builder在这方面就要强得多了.由于JPEG是实际应用中经常使用的图形格式,如果你是Visual C++用户的话,自然会想如何让Visual C++能够处理JPEG图形. 虽然网络上现在已经有了不少能够处理JPEG图形的Visual C++库,但是别人的东西用起来总有点不那么得心应手,而且经常有一些限制,比如有名的ImageObject库要求必须静态链接到MFC DLL,给使用带来很

Win7系统安装qq炫舞失败提示“功能传送错误”的解决方法

  经常在win7纯净版系统下载安装程序,下载完成程序后只要双击即可安装了,但是一些用户反馈说在Win7系统安装qq炫舞失败提示"功能传送错误"为什么会出现这样的故障问题呢?本文小编告诉大家Win7系统安装qq炫舞失败提示"功能传送错误"的原因和解决方法. 原因一:出现这样的提示,是由于下载好的客户端中缺少文,一般是用户错误操作或误删导致的. 原因二:使用迅雷下载大文件的时候,由于迅雷下载文件时是通过收集互联网上的服务器的下载地址许多"碎片"组合

音速启动怎么添加qq音乐在线听歌功能?

音速启动怎么添加qq音乐在线听歌功能?   音速启动 1.点击新建栏目,选择文件夹/网址栏目; 2.在地址中输入qq音乐在线播放器地址 音速启动 3.其实不但QQ在线音乐可以添加,任何网页版的在线音乐都可以添加,大家来试一下吧!

qq-如何纯java实现类似QQ聊天时候的气泡功能,最好有代码。请给位大神指教

问题描述 如何纯java实现类似QQ聊天时候的气泡功能,最好有代码.请给位大神指教 如何纯java实现类似QQ聊天时候的气泡功能,请给位大神指教一下 解决方案 最近在用Java做一个类似QQ聊天系统 原理:就是给你每次发的消息加一个背景面板panel,每次发送消息,都加载一次,不过这样在聊天框显示比较慢, 暂时我没找到好方法