摘要载入中…    请稍等…












内容载入中…    请稍等…

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

芯友首页 应用软件 编程开发 网络硬件 资源下载 动漫音乐 精美图库 芯友论坛 视频教程 电脑技术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系统文件
◎→ 热门资源
九赢广告联盟的优点和缺点
通过IP反查域名
用VB的Printer对象编写打印程序
用DELPHI通过写注册表来实现建立
网络积件再思考。(其实也只是胡
Delphi中动画设计(2)
Delphi中动画设计

Delphi无标题窗口的移动


日期:2008-10-20 22:12:23    来源:
   
 ·用DELPHI通过写注册表来实现建立IIS的虚拟目录! ·Excel表格标题技术二则
 ·IE弹出窗口阻止程序的常见问题 ·Google独立推出自己的移动网络

Delphi无标题窗口的移动
   在Delphi 编 程 中 有 时 要 对 无 标 题 窗 体 进 行 移 动, 以 下 就 结 合 本 人 的 经 验 介 绍 几 种 对 无 标 题 窗 体 移 动 的 方 法。

方 法 一:

通 过 响 应“wm_NCHitTest” 消 息 来 移 动 窗 体。Windows 发 送“wM_NCHitTest” 消 息 来 确 定 鼠 标 操 作 是 否 发 生 在 窗 体 的 客 户 区, 或 边 框 的 特 殊 区 上( 非 客 户 区)。 如 果Windows 发 现 用 户 单 击 了 窗 体 标 题, 系 统 将 移 动 窗 体, 单 击 了 窗 体 边 框, 则 系 统 将 开 始 改 变 窗 体 大 小。

例 程 如 下:

 .

 .

 private

{ Private declarations }

Procedure MoveForm(var M:TWMNCHITTEST);

Message WM_NCHITTEST;

 //声明一自定义事件,拦截“WM_NCHITTEST”消息

 public

 .

 .

{$R *.DFM}



Procedure TForm1.MoveForm (var M:TWMNCHITTEST);

begin

 inHerited;//继承,窗体可以继续处理以后的事件

 if (M.Result=HTCLIENT) //如果发生在客户区

and ((GetKeyState(vk_CONTROL) $#@60; 0) 

 //检测“Ctrl”键是否按下

 then M.Result:=HTCAPTION;

 //更改“.Result”域的值

end;

方 法 二:

通 过 为Application.OnMessage 创 建 一 个 处 理 程 序 获 得Windows 消 息, 可 以 调 整 应 用 程 序 对 不 同 消 息 的 响 应 或 为 不 能 正 常 识 别 的 消 息 提 供 服 务。 这 里 受 到 窗 体 客 户 区 的 鼠 标 按 下 的 消 息 后, 发 送 一 条 在 标 题 栏 内 按 下 的 消 息。

例 程 如 下:

.

 .

 procedure FormCreate(Sender: TObject);

 private

 { Private declarations }

 procedure AppMessage(var Msg:TMsg;var Handled:Boolean);

 .

 .



{$R *.DFM}



procedure TForm1.FormCreate(Sender: TObject);

begin

 Application.OnMessage:=AppMessage;

 //捕捉消息:将程序的收到消息事件与消息过滤过程关联起来

end;



procedure TForm1.AppMessage(var Msg:TMsg;var Handled:Boolean);

begin

 if (Msg.message=WM_LButtonDown) and 

 //如果鼠标左键按下的话

(DefWindowProc(Handle,WM_NCHitTest,

0,GetM   agePos)=HTClient) and

 //判断光标是否在客户区内

((GetKeyState(vk_CONTROL) $#@60; 0) 

//检测“Ctrl”键是否按下

 then

 begin

 SendMessage(Handle,WM_NCLButtonDown,

 HTCaption,GetMessagePos);

 //发送鼠标在标题栏内按下的消息

 Handled:=true;

 end;

end;

方 法 三:

直 接 向 窗 体 发 送 一 条“wm_SysCommand” 消 息, 需 要 使 用 未 归 档 的“sc_DragMove” 标 志, 定 义 如 下:

 const

 sc_DragMove:LongInt=$F012;

我 们 只 能 向TWinControl 派 生 组 件 发 送 该 消 息, 而 且 只 能 响 应 鼠 标 按 下 事 件, 因 为 系 统 会 在 此 时 捕 获 鼠 标( 当 释 放 鼠 标 键 时, 拖 动 操 作 是 没 有 意 义 的)。

例 程 如 下:

 .

 . 

const

 sc_DragMove:longint=$F012;



implementation



{$R *.DFM}



procedure TForm1.FormMouseDown

(Sender: TObject; Button: TMouseButton;

 Shift: TShiftState; X, Y: Integer);

begin

 if ssCtrl in Shift then

 //判断“Ctrl”键是否按下

 Begin

ReleaseCapture;

//释放鼠标事件的对象

 (Sender as TWinControl).PerForm(wm_SysCommand,

 sc_DragMove,0);

 //发送消息

 end;

end;

这 种 方 法 适 用 与 窗 体 与 组 件, 如 想 移 动 组 件, 将 其“OnMouseDown” 事 件 写 成 与Form 的“OnMouseDown” 事 件 一 样 即 可。 如 只 想 移 动 窗 体 可 按 以 下 方 法 编 写 代 码:

 .

 .

procedure TForm1.FormMouseDown

(Sender: TObject; Button: TMouseButton;

 Shift: TShiftState; X, Y: Integer);

begin

 if SsCtrl in Shift then

 Begin

 ReleaseCapture;

 SendMessage(handle,wm_SysCommand,

 sc_DragMove,0);

 end;

end;

运 行 结 果:

按 下“Ctrl” 键 拖 动 鼠 标 即 可 移 动 窗 体。

总 结:

要 实 现 无 标 题 窗 体 的 移 动 有 很 多 种 方 法, 还 可 以 通 过 检 测 鼠 标 的 位 置( 坐 标) 来 确 定Form 的“left” 与“top” 值 等 方 法, 在 此 不 再 详 细 举 例.

以 上 程 序 均 在Delphi 3.0 下 编 译 通 过。

 [1]

Delphi中动画设计(2)

设定Excel表格标题行随意显现

用Excel2003的“监视窗口”

安装 Bluetooth 移动电话并将其用作调制解调器

--->GreenBrowser V4.5.0423 简体中文版┊多窗口多特性的浏览器
--->Gosurf Browser 2.76.704.8178┊最IN多页面多窗口浏览器┊多国语言绿色免费版
--->Avant Browser V11.5 Build 8┊基于IE 内核多窗口浏览器┊多国语言官方便携版
--->AcooBrowser (阿库浏览器) V1.58 build 770┊强大的多窗口多功能浏览器┊多国语言绿色特别版
--->江民杀毒软件移动版 V9.00.505┊病毒库更新日期07月02日┊简体中文绿色免费版
Tags:  Delphi 标题 窗口 移动

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