摘要载入中…    请稍等…












内容载入中…    请稍等…

如长时间看不到内容,请关闭浏览器,重新打开此页!

芯友首页 应用软件 编程开发 网络硬件 资源下载 动漫音乐 精美图库 芯友论坛 视频教程 电脑技术QQ群:72845454
 ★★photoshop学友-史上最强播放器★★
 位置:编程开发>Deiphi>Deiphi窗体文章
◎→ 本类最新
DELPHI动态生成控件
Delphi编程中创建一个启动闪现窗
在win95,win98下实现半透明的窗口
拖动无标题栏窗体的方法
用Delphi 控制窗体的大小
使MDI窗口有一个背景图象或使它平
软件启动画面中启动状态的显示
◎→相关资源
C语言入门视频教程
C#编程WinForm入门视频
Asp.net入门视频教程下载
VC++编程视频教程下载
VB窗体文章
HTML入门教程
Deiphi实例教程
Deiphi窗体文章
Deiphi数据库编程
Deiphi网络编程
Deiphi图形图象文章
Deiphi系统文件
◎→ 热门资源
Delphi拖放编程(2)(1)
Delphi“流”实现文件加密器(3)
Delphi“流”实现文件加密器(2)
Delphi“流”实现文件加密器(1)
Delphi6函数大全(8)(2)
Delphi6函数大全(8)(1)
Delphi6函数大全(12)

Delphi无标题栏窗口程序设计中鼠标拖动技巧


日期:2008-10-20 22:07:21    来源:
   
 ·移动没有标题栏的窗口 ·用Delphi7.0实现漂亮的汉字窗口
 ·Visual Basic通信程序设计
Delphi无标题栏窗口程序设计中鼠标拖动技巧----WINDOWS中窗口的常规移动方法,是用鼠标拖动标题栏来完成,但目前的WINDOWS 程序中,存在很多的无标题栏窗口,这在多媒体流行的时代更是如此,形形色色的媒体播放机大都如此,还有输入法或者即时翻译等程序,其界面只有窄窄的一行, 这样的程序在程序设计阶段必须进行特殊的处理,才能使之具有鼠标拖动功能,本人在DELPHI及VB程序设计中,找到了一种无标题栏窗口鼠标拖动的简单方法, 可广泛应用在类似的程序设计之中。

----基本原理:当无标题栏窗口进行鼠标拖动时,在一个最明显的事实,就是其鼠标在窗口中的坐标始终不变, 所以如果能够在鼠标移动过程中,通过改变窗口在桌面上的坐标,而始终保持鼠标的相对坐标不变,即可实现鼠标的拖动效果;在具体的程序设计中,先在Mousedown() 事件中记录鼠标位置,而在Mousemove()事件中根据鼠标的移动距离,实时修改窗体Form的Top及Left值,即可准确无误的实现窗口的鼠标拖动操作。利用此方法实现鼠标拖动, 与常规的标题栏鼠标拖动在效果上有一点区别,因为标题栏拖动时,鼠标移动过程中不重画窗口,只有松开鼠标后在固定位置重画窗口,所以其速度较快,而采用此方法拖动过程中, 每移动一步都需要重画窗口,对速度稍有影响,在慢一些的机器上会出现轻微的拖尾现象,但绝不会影响正常操作,而在586以上机器上或者高速显示系统下会完全克服这种现象。在实际程序设计时,窗口中可能有多种控件,若想使鼠标拖动窗口中的任何位置都可实现窗口移动, 必须对窗口中的所有控件进行上述的鼠标位置记录与移动处理,即在MouseDown()与MouseMove()事件中加入下面的程序代码,当然与可以在窗口内设置一个专门用于窗口拖动的区域,这样只对此一个控件操作即可。

----演示程序的编制:下面是一个利用DELPHI编制的时间显示程序,编制方法:在窗体内放置一个按钮Button1及一个时间控件Time1,使按钮呈横向矩形,其WIDTH足以显示下日期和时间, 之后在相应的事件中输入以下程序中的代码,程序运行之后,其界面将只有按钮大小的窄窄一条,显示当前的日期和时间,用鼠标拖动窗口的任一部位,都可使窗口随之准确地移动, 在窗体内按下鼠标右键退出程序。

----以上方法及程序在WINDOWS95系统下、DELPHI2.0环境调试通过,经在VB5.0环境下试验, 其效果与此一致。

----附.PAS全部程序代码:

unitformyd;

interface   es

Windows,Messages,SysUtils,Classes,Graphics,

Controls,Forms,Dialogs,StdCtrls,ExtCtrls;

type

TForm1=class(TForm)

Timer1:TTimer;

Button1:TButton;

procedureFormCreate(Sender:TObject);

procedureTimer1Timer(Sender:TObject);

procedureButton1MouseDown(Sender:

TObject;Button:TMouseButton;

Shift:TShiftState;X,Y:Integer);

procedureButton1MouseMove(Sender:

TObject;Shift:TShiftState;X,

Y:Integer);

procedureButton1Click(Sender:TObject);

private{Privatedeclarations}

public{Publicdeclarations}

end;

//定义全程变量

var

Form1:TForm1;

dx,dy:integer;

implementation{$R*.DFM}

//程序初始化

procedureTForm1.FormCreate(Sender:TObject);

begin

form1.borderstyle:=bsnone;

form1.height:=button1.height;

form1.width:=button1.width;

button1.top:=0;

button1.left:=0;

end;

//实时显示当前时间

procedureTForm1.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;

//记录鼠标当前位置

procedureTForm1.Button1MouseDown(Sender:

TObject;Button:TMouseButton;

Shift:TShiftState;X,Y:Integer);

begin

dx:=X;

dy:=y;

IfShift=[ssright]Then

close;//右键单击退出程序

end;

//根据鼠标移动距离调整窗口位置

procedureTForm1.Button1MouseMove(Sender:

TObject;Shift:TShiftState;X,

Y:Integer);

var

mx,my:integer;

begin

IfShift=[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.
 [1]

拖动无系统标准标题栏的窗口

使用Delphi轻松控制IE窗口

VB多媒体程序设计

--->GreenBrowser V4.5.0423 简体中文版┊多窗口多特性的浏览器
--->Gosurf Browser 2.76.704.8178┊最IN多页面多窗口浏览器┊多国语言绿色免费版
--->Avant Browser V11.5 Build 8┊基于IE 内核多窗口浏览器┊多国语言官方便携版
--->AcooBrowser (阿库浏览器) V1.58 build 770┊强大的多窗口多功能浏览器┊多国语言绿色特别版
--->世界之窗浏览器TheWorld V1.402Final┊功能非常强大多窗口浏览器┊官方绿色免费版
Tags:  标题栏 窗口 程序设计

芯友网版权所有 1999-2006 | 著作权与商标声明 | 法律声明 | 服务条款 | 隐私声明 | 联系我们