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

2016-02-19 18:50 5 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的实现QQ窗体的缩入伸出功能教程,一起来看看吧!超容易上手~

【 tulaoshi.com - 编程语言 】

 

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

  //自定义函数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.Parentnil do //当W的上级Parent不为空时就继续往上找
          w:=w.Parent;
        Result := W.Name;//最后返回窗体的名称Name
     end
     else
     begin
      Result := ’’;
     end;
  end;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1619179.html

延伸阅读
Windows 中不规则窗体的编程实现 作者:上海伟功通信 roc 下载源代码 一、序言 在绝大多数的Windows应用程序中,其窗体都是使用的正规正矩的矩形窗体,例如我们常用的,“记事本”,“扫雷”,等等。矩形窗体,具有编程实现简单,风格简洁的优点,所以在普通文档应用程序和简单小游戏中使...
'分割区的宽度 PrivateConstSPLITTERWIDTH=45 '最小移动宽度 PrivateConstHMIN=15 'picLeft和picRight的宽度相对于窗体的比例 PrivatePercentAsSingle '正在拖动的标志 PrivateDragFlagAsBoolean '每次拖动后需要重排窗体上的控件 PrivateSubRedrawMe() DimNewWidthAsSingle ...
标签: 办公软件
笔者学校需要经常打印学生毕业证、在教案纸上书写教案等。我们想出一种办法:在所编辑的文档里把原表内容和需要填写的内容都输入,而在打印到现成的表格上时只打印填写的内容,不再把原表内容打印出来,这可以用Word2000的窗体及对窗体域的打印控制来实现。以打印学生毕业证为例,学生毕...
标签: Web开发
所以要引入JQUERY框架。 把我的这个控件代码放到一个js文件里面直接引入就可以了 控件代码 代码如下: $.fn.myDrag = function() { var self = $(this); self.css("position", "absolute"); var p = self.position(); self.css({ left: p.left, top: p.top }); self.mousedown( function(event) { // debugger; self.data("ifDary...
在VB编程中,应用程序窗体的出现和关闭一般都是静态的,不过,我们利用下面的一个API函数AnimateWindow就可以轻松实现窗体的动态效果。 API函数AnimateWindow的声明如下: Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal d...

经验教程

768

收藏

38
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部