⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 053102_05.htm

📁 对于学习很有帮助
💻 HTM
字号:
<html>

<head>
<link REL="stylesheet" HREF="/style.css" TYPE="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>计算机世界日报:
无标题栏窗口程序设计中鼠标拖动技巧
</title>
<!--***********-->
</head>

<body bgcolor="#FFFFFF" >














<p><br>
<font color="#b904e8"><b><em><a href="class.htm">返回</a></em></b></font>
<center>
<font color="#0000c0"><h2>
无标题栏窗口程序设计中鼠标拖动技巧
</h2></font>
<h3>
辽宁省铁岭市委办公室
<br>金永涛
</h3>
</center>
<p><font color="#ffffff">----</font>

WINDOWS 中窗口的常规移动方法, 是用鼠标拖动标题栏来完成, 但目前的WINDOWS 程序中, 存在很多的无标题栏窗口, 这在多媒体流行的时代更是如此, 形形色色的媒体播放机大都如此, 还有输入法或者即时翻译等程序, 其界面只有窄窄的一行, 这样的程序在程序设计阶段必须进行特殊的处理,才能使之具有鼠标拖动功能,本人在DELPHI及VB程序设计中, 找到了一种无标题栏窗口鼠标拖动的简单方法, 可广泛应用在类似的程序设计之中。
<p><font color="#ffffff">----</font>
基本原理: 当无标题栏窗口进行鼠标拖动时, 在一个最明显的事实, 就是其鼠标在窗口中的坐标始终不变, 所以如果能够在鼠标移动过程中, 通过改变窗口在桌面上的坐标, 而始终保持鼠标的相对坐标不变, 即可实现鼠标的拖动效果; 在具体的程序设计中, 先在Mousedown() 事件中记录鼠标位置, 而在Mousemove() 事件中根据鼠标的移动距离,实时修改窗体Form的Top及Left值, 即可准确无误的实现窗口的鼠标拖动操作。利用此方法实现鼠标拖动,
与常规的标题栏鼠标拖动在效果上有一点区别, 因为标题栏拖动时, 鼠标移动过程中不重画窗口, 只有松开鼠标后在固定位置重画窗口, 所以其速度较快, 而采用此方法拖动过程中, 每移动一步都需要重画窗口, 对速度稍有影响,在慢一些的机器上会出现轻微的拖尾现象, 但绝不会影响正常操作,而在586以上机器上或者高速显示系统下会完全克服这种现象。在实际程序设计时,窗口中可能有多种控件,若想使鼠标拖动窗口中的任何位置都可实现窗口移动, 必须对窗口中的所有控件进行上述的鼠标位置记录与移动处理, 即在MouseDown()与MouseMove()事件中加入下面的程序代码, 当然与可以在窗口内设置一个专门用于窗口拖动
的区域, 这样只对此一个控件操作即可。
<p><font color="#ffffff">----</font>
演示程序的编制: 下面是一个利用DELPHI编制的时间显示程序, 编制方法:在窗体内放置一个按钮Button1及一个时间控件Time1,使按钮呈横向矩形,其WIDTH足以显示下日期和时间, 之后在相应的事件中输入以下程序中的代码,程序运行之后, 其界面将只有按钮大小的窄窄一条, 显示当前的日期和时间, 用鼠标拖动窗口的任一部位, 都可使窗口随之准确地移动, 在窗体内按下鼠标右键退出程序。
<p><font color="#ffffff">----</font>
以上方法及程序在WINDOWS95系统下、DELPHI2.0环境调试通过, 经在VB5.0环境下试验, 其效果与此一致。
<p><font color="#ffffff">----</font>
附.PAS全部程序代码:
<pre>
unit formyd;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics,
  Controls, Forms, Dialogs,StdCtrls, ExtCtrls;
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
procedure Button1MouseDown(Sender:
TObject;Button:TMouseButton;
      Shift: TShiftState; X, Y: Integer);
procedure Button1MouseMove(Sender:
TObject;Shift:TShiftState;X,
      Y: Integer);
    procedure Button1Click(Sender: TObject);
  private  { Private declarations }
  public   { Public declarations }
  end;
//定义全程变量
var
Form1: TForm1;
dx,dy:integer;
implementation {$R *.DFM}
//程序初始化
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.borderstyle:=bsnone;
form1.height:=button1.height;
form1.width:=button1.width;
button1.top:=0;
button1.left:=0;
end;
//实时显示当前时间
procedure TForm1.Timer1Timer(Sender: TObject);
var
ds,ts,ps:string;
begin
ds:='DATE:'+DateToStr(Date);
ts:='TIME:'+timeToStr(time);
ps:='|__welcome__|';
button1.Caption:=ds+ps+ts;
end;
//记录鼠标当前位置
procedure TForm1.Button1MouseDown(Sender:
TObject;Button:TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
dx:=X;
dy:=y;
If Shift=[ssright] Then
close;  //右键单击退出程序
end;
//根据鼠标移动距离调整窗口位置
procedure TForm1.Button1MouseMove(Sender:
TObject;Shift:TShiftState;X,
  Y: Integer);
var
mx,my:integer;
begin
If Shift=[ssleft] Then
begin
mx:=X-dx;
my:=Y-dy;
Form1.Left:=Form1.Left+mx;
Form1.Top:=Form1.Top+my;
Form1.Caption:=intToStr(X)+':'+intToStr(Y);
end;
end;
end.
</pre>


 



<p align="right"><small><em>中国计算机世界出版服务公司版权所有</em></small> 
<br>
</p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -