- 浏览: 2058042 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (1409)
- asp/asp.net学习 (241)
- oracle (10)
- delphi (295)
- java (27)
- pb (1)
- 每日点滴 (49)
- 学习方法 (40)
- 思想方面 (104)
- C语言 (5)
- C++ (1)
- 代码重构经验 (5)
- 软件工程 (3)
- 数据库 (99)
- 英语学习 (3)
- mysql (1)
- 该关注的网站或者网页 (42)
- 总结 (7)
- 要去做的事情 (33)
- 算法 (1)
- 网络方面 (29)
- 随感 (96)
- 操作系统 (36)
- UML (12)
- 常用工具的使用 (55)
- 脚本 (7)
- 汇编 (62)
- 数据结构 (2)
- 财务 (38)
- 语文作文 (16)
- 法律 (1)
- 股票 (88)
最新评论
-
devwang_com:
可以,学习了~~
列出文件夹下所有文件夹的树形结构--Dos命令 tree的使用 -
hvang1988:
不管用啊 frxrprt1.PreviewForm.Pare ...
fastReport预览时嵌入到别的窗体 -
00915132:
我也有这个疑问,非常 感 谢
left join加上where条件的困惑 --SQL优化 -
zhuyoulong:
学习了,高效读书
软件架构师要读的书 -
nTalgar:
非常感谢分享!
Application.ProcessMessages用法:
思路:(1) 如果用图片做背景。可以根据图片设置窗体的形状;
(2) 再加写代码;
转自:http://blog.sina.com.cn/s/blog_495671f50100dkvz.html
为了使标题栏不显示,我们可以在窗体BorderStyle特性中选取bsNone值即可。但选取bsNone值后,窗体周围什么也没有。当我们只想去掉标题栏时又怎么办呢?
实际上窗体的位置、大小、显示风格等均由Windows API的CreateWindowEx函数所指定,这个API的参数是在Delphi的CreateParams过程中被初始化的。Delphi是依据以下的TCreateParams记录的值生成窗体的。TCreateParams记录包含窗体的位置、大小以及其他各种特性,在Delphi的 Control.Pas单元中记录的定义为:
TCreateParams = record
Caption: PChar; //标题
Style: DWORD; //窗体的显示风格
ExStyle: DWORD; //窗体的扩展显示风格
X, Y: Integer; //显示位置
Width,Height:Integer; //窗体的大小
WndParent: HWnd; //父窗体
Param: Pointer; //指向窗口生成参数(WM_CREATE消息的 //LParam)的指针
WindowClass: TWndClass; //窗体的类别
WinClassName: array[0..63] of Char; //类别名
end;
该记录中包含窗体的位置、大小和窗体显示风格的标志。因此,一般通过其值的改变来控制生成窗体的位置、大小和窗体显示风格。由于我们要设置窗体初始的风格,所以在Params.Style变量中设定窗体的风格。又因为该变量是取标志形式,所以使用and或or布尔运算来演算,从而完成各个位的on或 off。
例如,当BorderStyle特性为bsNone时,再给窗体加上可变更大小的粗框架,则对CreateParams方法进行重载。处理过程如下即可:
Procedure TForm1.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
if BorderStyle = bsNone then
with Params do Style:= Style or WS_THICKFRAME;
end;
需要注意,一般情况下的继承关系,单纯使用inherited,则派生类的方法即可被调出执行;但继承使用了CreateParams方法时,必须明确按inheritedCreateParams(Params)编制程序。
关于窗体风格标志值用以下定量来指定,这里列举的只是具有代表性的一部分。详情请参考Windows API的CreateWindow的help。
WS_BORDER边框
WS_CAPTION标题栏
WS_CHILD子窗体
WS_HSCROLL水平滚动条
WS_MAXIMIZE全屏化窗体
WS_MAXIMIZEBOX全屏按钮
WS_MINIMIIE图标化窗体
WS_MINIMIZEBOX图标化按钮
WS_SYSMENU系统菜单
WS_THICKFRAME可变更窗体大小的粗边框
WS_VISIBLE初始为可视的窗体
到此,没有标题栏的,大小可以变更的窗体已完成。
此窗体由于没有标题栏所以关闭、全屏化等按钮的操作均不可能,并且想通过拉拖标题栏移动窗体也不可能,下面我们先讨论关于移动的问题。
关于WM_NCHITTEST消息前面已经作了解说。当拖拉标题栏移动窗体时,窗体伴随鼠标器的移动,系统向窗体传送WM_NCHITTEST消息,当确认光标在标题栏上,并同时检测出鼠标器左按钮被按下时,移动成开始状态。
只要光标在窗体,则使窗体的移动成为可能。为此,WMNCHitTest处理过程如下。
porcedure TForm1.WMNCHitTest(var Msg:TWMNCHitTest);
begin inherited; //当标题栏非显示时,光标在窗体领域即可移动
if (BorderStyle = brNone) and
(Msg.Result = HTCLIENT) then
Msg.Result:= HTCAPTION;
end;
当鼠标光标在窗体领域内时,并且无标题栏,WM_NCHITTEST消息传回值为HTCLIENT时,将传回值作为HTCAPTION处理,系统则判断鼠标光标在标题栏上,这样就完成了窗体领域可移动的处理。这里再次给Windows系统一个骗局。
另外,讨论一下标题栏的消除和追加的方法。从而解决关闭、全屏化、图标化的问题。首先想到的方法是在窗体(Form)被单击或双击后,改变 BorderStyle特性的值。就是说对Form的OnClick事件进行定义,创建子程序将bsNone变为bsSizeable。
可是我们测试一下,它并不动作。实际上这是因为在前面为了处理移动,在WMNCHitTest过程中,将窗体领域的返回值变更成了标题栏的返回值,因此系统只判断鼠标光标在标题栏上单击。
要想移动和单击同时起作用需要下一点功夫。当用WinSight32来确认显示正常的窗体返回给系统的消息时,与通常窗体领域返回WM_LBUTTONDOWN消息相对,在标题上单击时返回WM_NCLBUTTONDOWN消息。
这里不使用窗体(Form)的OnClik事件,而是通过WM_NCLBUTTONDOWN消息的处理来得到希望的动作。如下编程即可 :
interface
--------------------------------------------------------------------------------
type
TForm1 = Class(TForm);
:
protected WMNCLButtonDown(var Msg:TWMNCLButtonDown);
message WM_NCLBUTTONDOWN;
implemention //鼠标单击窗体追加标题栏
porcedure TForm1.WMNCLButtonDown(var Msg:TWMNCLButtonDown);
begin
if BorderStyle = bsNone then
borderStyle = bsSizeble;
end;
当然,如果在窗体上配置其他可视构件,从而可以简单地通过对构件的单击来完成以上动作。
发表评论
-
form打开时的关闭代码
2011-10-25 20:29 1571摘自:http://topic.csdn.n ... -
TUpdateSQL更新问题 提示Update Failed
2011-08-29 20:26 1238摘自:http://topic.csdn.net/u/200 ... -
图解如何用Eurekalog跟踪程序错误
2011-08-12 07:28 941图解如何用Eurekalog跟踪程序错误 摘自:h ... -
VirtualBox 复制VDI 并能创建新的虚拟机
2011-07-21 11:14 2739摘自:http://www.nonabyte.net/how- ... -
截获所有异常 不报错
2011-07-12 16:52 1239摘自:http://media.ccidnet.c ... -
delphi exe程序以及DLL程序如何在模块内部获得各自的路径
2011-07-11 16:38 1305delphi Exe程序以及DLL程序如何在模块内部获得各自的 ... -
Delphi文本文件读写
2011-07-11 14:55 1244Delphi文本文件读写 (2008-10-31 1 ... -
Delphi自定义的消息的使用
2011-05-31 14:12 2315阅:已验证,可通过; 摘自:http://blog.1 ... -
怎么查看OutputDebugString输出的信息?debugview
2011-05-25 16:02 3835网上很多说用debugview查看,我自己写了一个程序,里面用 ... -
Delphi里查看该变量的内存值
2011-05-25 13:32 1122Delphi里查看该变量的内存值:Run==>Evalu ... -
注册表操作 写入autorun启动项,键值为本程序的全路径
2011-05-20 15:40 1825procedure TForm4.Button2Click ... -
报说包frx7和frxdb7都包含了某个单元的错误
2011-05-11 09:59 10221. 问题描述:在安装FastReport3的时候,安装到- ... -
Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏
2011-05-03 14:34 1462摘自:http://blog.csdn.net/g ... -
WM_USER的说明 用户消息ID
2011-04-28 10:46 1687WM_USER 摘自:http://baike.bai ... -
ToolButton不能改变大小
2011-04-28 10:38 3462问题描述:ToolButton不能改变大小? 问 ... -
Delphi里TOOLBAR 上的button的caption为什么显示不出来啊
2011-04-20 17:55 1767Delphi里TOOLBAR 上的button的caption ... -
delphi指针简单入门
2011-04-11 21:42 1156摘自:http://topic.csdn.net/t/2003 ... -
Delphi中paramstr的用法 应用程序间传递数据
2011-04-01 14:33 2104Delphi中paramstr的用法 应用程序间传递数据 ... -
Delphi中的THashedStringList对象 --大数据量时
2011-04-01 13:54 5147Delphi中的THashedStringLi ... -
inherited Create(AOwner); 和直接写inherited有区别吗
2011-03-26 15:44 1323摘自:http://zhidao.baidu.com/que ...
相关推荐
delphi无标题栏窗口的拖动 一般情况下,移动一个窗体需要将鼠标放置在标题栏上才能拖动窗体,为什么非要使用标题栏呢?其实我们可以使用一个巧妙的方法来实现将鼠标放置在窗体上按下就可拖动窗体
"Delphi无标题栏改变窗口大小"这个主题主要涉及到以下几个核心知识点: 1. **窗体样式设置**: Delphi中的窗体(TForm)有一个属性叫做BorderStyle,它决定了窗体的边框类型。要实现无标题栏的效果,我们需要将...
在Delphi编程中,窗口标题栏和右上角按钮的美化是提升应用程序视觉效果的关键步骤。这个名为"Delphi美化窗口标题栏和右上角按钮..rar"的压缩包很可能包含了一些示例代码或组件,用于帮助开发者实现这一目标。在...
"ffmpeg-delphi-pascal-headers-3.0.2.zip" 是一个针对 Delphi 用户的 FFmpeg 头文件包,包含了 FFmpeg 3.0.2 版本的 Pascal 头文件,适用于 Delphi 的 FFVCL 库。 FFVCL (FFmpeg Video Component Library) 是一个 ...
Delphi binding for OpenCV Experimental Delphi binding for OpenCV 4.7.0 Development environment - Delphi 10.4, 11 x64 platform only
本示例提供的"Delphi无标题栏窗体拖动的方法 源码例子.rar"正是为了展示如何实现这一功能。 首先,我们需要理解Delphi中的TForm组件。TForm是Delphi中用于创建窗口的基础类,它包含了窗体的基本属性、方法和事件。...
最新版 delphi-modbus-develop 1.6.7
总的来说,"delphi-modbus-tcp-indy.7z"是一个实用的工具包,为Delphi开发者提供了实现Modbus TCP通信的便捷途径,尤其适用于那些需要与工业设备进行网络交互的应用场景。通过深入理解Delphi、Modbus TCP和Indy的...
本文将深入探讨标题提及的“DELPHI 10.3编码转换:iso-8859-1转GBK,GBK转iso-8859-1”,以及在二维码生成中的应用,以解决乱码问题。 首先,我们需要理解两种编码系统的基础知识。`ISO-8859-1`是一种单字节编码...
在Delphi编程中,创建一个无标题窗体(BorderStyle属性设置为bsNone)时,确实会遇到无法拖动和调整大小的问题。标题栏通常提供了这些功能,但当我们选择不显示标题栏时,就需要自定义代码来实现这些行为。本资源...
无标题栏的窗体需要自定义代码来实现调整大小的功能。这通常涉及到处理鼠标消息,特别是`WM_NCHITTEST`和`WM_SIZE`消息。`WM_NCHITTEST`消息用于检测鼠标位置,判断用户是否在窗体边界上;`WM_SIZE`消息则在窗体大小...
Delphi窗口快速通道-标题栏显示按钮,很久以前的东西了,具体细节不太记得了,自己看代码,这里只给一些简单的说明。程序启动hook,获取当前激活窗口和窗口的移动事件。将自己的窗口位置/大小设置为当前激活窗口的...
使用UpdateLayerWindow,gdi+实现无标题栏无边框半透明阴影窗口使用UpdateLayerWindow,gdi+实现无标题栏无边框半透明阴影窗口使用UpdateLayerWindow,gdi+实现无标题栏无边框半透明阴影窗口使用UpdateLayerWindow,...
通过以上步骤,我们就实现了无标题栏的Delphi窗体的拖动功能。请注意,这只是一个基础示例,实际应用中可能需要考虑更多的细节,比如防止窗口移动到屏幕之外、在拖动过程中禁用其他窗体的交互等。在Delphi编程中,...
在Delphi编程环境中,开发人员有时会遇到需要创建无标题窗体的需求,通常是出于界面设计的特殊考虑。然而,无标题窗体(BorderStyle=bsNone)存在一个问题,即它缺少标准边框,使得用户无法方便地移动或调整窗体大小...
Delphi菜单实例,在Delphi窗口的标题栏上添加菜单项,如果看懂本示例的话,添加无限制的菜单就很容易,不过这种用法不多见哦。看到了吗?鼠标右键点击窗口的标题栏,在弹出的菜单中,“我的系统菜单项”即为添加的...
X-SuperObject 是一个在 Delphi 开发环境中广泛使用的 JSON 库,特别适用于 Delphi 7 这样的较早版本。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁、易读和易于机器解析而被广泛应用。...
不错的delphi课程设计项目--delphi人才信息管理系统 不错的delphi课程设计项目--delphi人才信息管理系统 不错的delphi课程设计项目--delphi人才信息管理系统 不错的delphi课程设计项目--delphi人才信息管理系统 不错...
网络上没有一篇文章是如此详细描述了安装MAC虚拟机到Delphi XE进行IOS开发的 MAC虚拟机安装 ----> MAC系统升级 ---->VMWare Tools安装 ---->获取证书 ---->加载开发者设备 ---->下载安装XCode ---->Delphi XE...
无标题栏的窗体的拖动功能实现,Delphi添加一个可拖动窗体的按钮,通过对此按钮的控制可移动窗体,实现按住标题栏移动窗口的功能,无标题栏也就不能显示最大化、最小化和关闭窗口的功能,因此本程序自定义了一个关闭...