Delphi对WM_NCHITTEST消息的处理】的更多相关文章

前提:WM_NCHITTEST是很重要的,只要鼠标在活动,Windows无时无刻在发这个消息进行探测. -------------------------------------------------------------------------------- TWinControl = class(TControl) private procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST; end; pr…
http://www.cnblogs.com/GnagWang/archive/2010/09/12/1824394.html 我为了移动一个无标题栏的窗体,使用了WM_NCHITTEST消息,这个消息大概如下: 通常,我们拖动对话框窗口的标题栏来移动窗口,但有时候,我们想通过鼠标在客户区上拖动来移动窗口. 一个容易想到的方案是,处理鼠标消息WM_LBUTTONDOWN和WM_LBUTTONUP.在OnLButtonUp函数中计算鼠标位置的变化,调用MoveWindow实现窗口的移动. 注意,拖…
这个消息比较实用也很关键,它代表非显示区域命中测试.这个消息优先于所有其他的显示区域和非显示区域鼠标消息.其中lParam参数含有鼠标位置的x和y屏幕坐标,wParam 这里没有用. Windows应用程序通常把这个消息传送给DefWindowProc,然后Windows用WM_NCHITTEST消息产生与鼠标位置相关的所有其他鼠标消息.通俗的讲从消息产生消息. case WM_NCHITTEST: return (LRESULT)HTNOWHERE; 以上代码能禁用窗口的所有显示区域和非显示区…
Delphi重定义消息结构随心所欲,只需要前4个字节是消息编号就行了,跟Windows消息虽然尽量保持一致,但其实相互没有特别大的关系.有了这个,就有了主动,带不带句柄完全看需要. 比如这个结构就带句柄(放到了第二个参数): TWMContextMenu = packed record Msg: Cardinal; hWnd: HWND; case Integer of : ( XPos: Smallint; YPos: Smallint); : ( Pos: TSmallPoint; Resu…
1,回调函数工作机制 回调函数由操作系统自动调用,回调函数的返回值当然也是返回给操作系统了. 2,截获操作系统发出的消息,截获到后,将另外一个消息返回给操作系统,已达到欺骗操作系统的目的. 下面还是以具体例子来说明比较好. 在 Windows下,每一个鼠标消息都是由 WM_NCHITTEST 消息产生的,这个消息的参数包含了鼠标位置的信息.通常情况下,要把这个消息直接交给 DefWindowProc 函数处理,该函数会返回一个值来告诉 Windows 鼠标按下的是窗口的哪一部分.Windows…
我为了移动一个无标题栏的窗体,使用了WM_NCHITTEST消息,这个消息大概如下: 通常,我们拖动对话框窗口的标题栏来移动窗口,但有时候,我们想通过鼠标在客户区上拖动来移动窗口. 一个容易想到的方案是,处理鼠标消息WM_LBUTTONDOWN和WM_LBUTTONUP.在OnLButtonUp函数中计算鼠标位置的变化,调用MoveWindow实现窗口的移动. 注意,拖动标题栏移动窗口的时候,会出现一个矩形框,它提示了窗口移动的当前位置.当鼠标左键放开的时候,窗口就移动到矩形框所在位置.而我们的…
procedure imgListMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private procedure WMNCHITTEST(var Msg: TWMNCHITTEST); message WM_NCHITTEST; procedure TfrmStartHit.WMNCHITTEST(var Msg: TWMNCHITTEST); const cOffset…
Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具.由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpascal)语言,并有强大的数据库引擎(BDE),快速的代码编译器,同时又提供了众多出色的构件.受到广大编程人员的青睐.在众多的编程语言(如VB,PowerBuilder,Powerpoint等)中脱颖而出.其中一个DELPHI强于其他编程语言(如VB4.0)的地方就是在DELPHI中可自定义消息,并可直接处理消息.这对于那些希望编写自…
这里讨论的只是Windows平台上的实现. 在QT中绘制异形窗口,只要设定 windowFlag 为 CustomizeWindowHint,再结合setMask()就可以做出各种奇形怪状的窗口.相对来说比较麻烦的, 是进行窗口拖动和缩放的处理. 在 Windows SDK 和 MFC 中比较容易,只要处理 WM_NCHITTEST,返回相应的测试值就可以了.幸运的是,QT中也提供了直接处理各平台消息的方法,在 Windows下只需要重载winEvent方法. 下面给出了示例代码: // inc…
Windows是一个基于消息驱动的系统,因此,在很多时候,我们需要截获一些消息然后自己进行处理.而VCL系统又有一些特定的消息.下面对我所了解的delphi环境中截获消息进行一些总结.      就个人了解,共有6种方法来截获/处理消息. 1. 消息钩子(Message Hook) 特点:可以针对所有有句柄的窗体,适用性广泛.针对的不仅仅是一个窗口,而是进程所在的所有窗体的消息. 首先,使用SetWindowsHookEx(WH_CALLWNDPROC, @HookProc, 0, GetCur…
程序本来是想实现鼠标单击改变背景颜色.可是,程序运行时,为什么没有任何消息触发,背景颜色就一直不断的改变了?WM_PAINT怎么被触发的 #include <windows.h> #include <stdlib.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; void DrawRectangle (HWND) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANC…
消息是Windows发出的一个通知,它告诉应用程序某个事件发生了.在Delphi中,大多数情况下Windows的消息被封装在VCL的事件中,我们只需处理相应的VCL事件就可以了,但如果我们需要编写自己的控件.截获或过滤消息就必须深入研究Win32的消息处理机制. 在Delphi中消息以TMessage记录的方式定义.打开Message.pas文件,我们可以看到Tmessage是这样定义的: type TMessage = packed record Msg: Cardinal; case Int…
近来笔者在一个项目中需要实现一个功能:模仿弹出菜单的隐藏方式,即鼠标在窗口的非PanelA区域点击时,使得PanelA隐藏.   经过思考,笔者想到通过处理鼠标的点击事件来实现相应功能.但是,究竟由谁来处理这个点击事件呢?如果窗口中包含多个句柄控件,则不能确定谁能获取到这个鼠标的点击事件,故而无法做出处理.   通过热心网友的帮忙,笔者了解到了window消息截获的实现方式,更棒的是:消息截获并不影响消息的正常处理.最终实现的效果非常完美.在此分享给有需要的朋友.下面是消息截获的实现代码.1.对…
实例1 unit Unit1; interface   uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;    const WM_ME=WM_USER+100; //自定义消息:  type  TForm1 = class(TForm)     Button1: TButton; procedure  Button1Click(Sender: TO…
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; const TIMER_ID = ; type TForm1 = class(TForm) Label1: TLabel; btkilltime: TButton; btsettime: TButton; procedure Button1Click(Send…
实例1 unit Unit1; interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; constWM_ME=WM_USER+100; //自定义消息: type TForm1 = class(TForm) Button1: TButton;procedure Button1Click(Sender: TObject);//第一种消息处理…
procedure TfrmMain.btnSendClick(Sender: TObject); var hCalc, h1: Cardinal; begin WinExec('calc', SW_SHOWNORMAL);//运行计算器 hCalc := FindWindow('SciCalc', nil); //查找计算器主窗口句柄,通过Spy++可查看到类名等 h1 := FindWindowEx(hCalc, 0, 'Button', '9'); //查找按钮1的句柄,通过Spy++可查…
http://ymg97526.blog.163.com/blog/static/173658160201139101120862/http://ymg97526.blog.163.com/blog/static/173658160201131021911946/http://ymg97526.blog.163.com/blog/static/173658160201131064545445/ 记录下来,慢慢看. http://blog.163.com/as_liaokun/blog/stati…
Delphi是Borland公司的一种面向对象的可视化软件开发工具. Delphi集中了Visual C++和Visual Basic两者的优点:容易上手.功能强大,特别是在界面设计.数据库编程.网络编程方面更有其独特的优势. Delphi中的消息 消息是Windows发出的一个通知,它告诉应用程序某个事件发生了.在Delphi中,大多数情况下Windows的消息被封装在VCL的事件中,我们只需处理相应的VCL事件就可以了,但如果我们需要编写自己的控件.截获或过滤消息就必须深入研究Win32的消…
注意,这些函数只有Private一种形式(也就是不允许覆盖,但仍在动态表格中): 其中TWinControl对TControl有10个消息进行了覆盖(红色标记),其中有2个是WM_消息,8个是CM_消息. TWinControl = class(TControl) private // 41个windows消息,几乎全部消息都是私有函数(因为不需要别人来调用).很多都是覆盖消息,也有少部分是首次出现. // 总结规律:直接接受消息的函数都起一个中转站的作用,其函数内容都十分简单. // WM_P…
Windows中,消息使用统一的结构体(MSG)来存放信息,其中message表明消息的具体的类型, 而wParam,lParam是其最灵活的两个变量,为不同的消息类型时,存放数据的含义也不一样. time表示产生消息的时间,pt表示产生消息时鼠标的位置. 里面没有Result的选项.然后我用VC2008实测MSG结构的大小: #include <afx.h> void Cxe111Dlg::OnBnClickedButton1() { CString m_Str; int ddd = siz…
因项目需要准备对LISTVIEW的滚动条进行自绘.于是在网上搜了一下,问题没解决,却搜出一篇令人不愉快的帖子 .确实,那时候实力是不够的,但现在应该是没问题了,为这个目的才不断磨练自己的. LISTVIEW控件的滚动条是系统自带的,它不创建窗口.对LISTVIEW窗口本身进行子类化后,要处理一些跟滚动条有关的消息. 首先是要骗过WM_NCPAINT消息.这个十分容易.WM_NCPAINT消息的wParam是一个区域的句柄.当它不为1时,从它里面CLIP 掉滚动条的区域,再传给原窗口过程即可.当它…
需求: QQ我的资料中基本资料窗体中的文本框: 正常状态下,文本框只有一条看起来只有一个像素的边框,边框的颜色从上到下由深到浅的渐变,当鼠标定位到该文本框时,其边框会变粗,而且边框的颜色加亮显示 如下图所示: 实现思路: 一.准备两个边框素材图片, 一个是正常状态下的边框素材, 比如: 另一个是鼠标进入到文本框内的边框素材 比如: 二.需要的参数 首先是边框素材的绘制边距,分为左边距,右边距,上边距,下边距 边框素材根据边距的设置,使用九宫格缩放绘制到界面上 其次是边框的边距,也为左边距,右边距…
本文是为了加强记忆而写,这里写的大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. ---Murphy 1,构造和析构函数: a,构造函数: 一般基于TComponent组件的派生类,都应该使用overload关键字进行继承,Delphi中的对象没有什么复合的概念,在设计时,从简便的角度出发 一般都设计为耦合性较强,但是使用简单的派生类即可.构造函数不是必写的,除非“复合”这样的对象实现,当省略构造函数时,会由其父类来实现 新对象的建立.下面是几个常用的写法: construc…
Delphi 三层开发 ************   http://blog.csdn.net/lailai186/article/category/1396968 Delphi CxGrid 汇总 ************   http://blog.csdn.net/lailai186/article/details/8824724 delphi四种消息框  ************     http://www.cnblogs.com/FuYan/archive/2013/04/28/30…
先人的DELPHI基础开发技巧 ◇[DELPHI]网络邻居复制文件 uses shellapi; copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false); ◇[DELPHI]产生鼠标拖动效果 通过MouseMove事件.DragOver事件.EndDrag事件实现,例如在PANEL上的LABEL: var xpanel,ypanel,xlabel,ylabel:integer; PANEL…
delphi 换行操作 我将我的商用<旅行社管理系统>的 发团通知 部分奉献给您,望对您有所帮助. procedure TFrmMain.N327Click(Sender: TObject); var FWord :Variant; FDoc :Variant; strSQL :string; begin //首先创造对象,如果出现异常就做出提示 try FWord := CreateOleObject('Word.Application'); //WOrd程序的执行是否可见,值为false时…
键盘消息 Windows系统无论何时只有一个窗口(可能是子窗口,也就是控件)能获得焦点. 焦点窗口通过windows消息来响应人的键盘操作,与键盘相关的常用消息罗列如下: WM_KEYDOWN   按下键 WM_KEYUP         松开键 WM_SYSKEYDOWN   按下系统键(Alt) WM_SYSKEYUP         松开系统键 WM_CHAR  按下松开后WINDOWS产生的字符消息  (A B C D ...) WM_SYSCHAR  按下松开后WINDOWS产生的系统…
  其他(28)   //启动Word   try     wordapplication1.connect;   except     messagedlg('word may not be installed', mterror, [mbok], 0);     abort;   end; //打开文档 procedure TForm1.OpenWord(Sfile: string); var   FileName, ConfirmConversions, ReadOnly, AddToRe…
Delphi读取Word现在关于往Word中写入数据的方法比较多,现在专门开个贴子,希望大家把自己读取Word内容的心得体会说一下,包括读取word文档中,有几个段落,如何读取第几个段落,读取有拼音的汉字,读取图片,读取表格等,希望大家不吝赐教! [解决办法]//启动Wordtrywordapplication1.connect;exceptmessagedlg('word may not be installed', mterror, [mbok], 0);abort;end;//打开文档pr…