请问怎么让窗口接收并处理自定义的消息

jacky168 2000-01-13 04:58:00
请问怎么才能让窗口接收自定义的消息
另请问怎么得到MouseClick时的Mouse位置和按钮状态?
...全文
380 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kxy 2000-01-13
  • 打赏
  • 举报
回复
又晚了 :(
Venne 2000-01-13
  • 打赏
  • 举报
回复
假设你的消息这样定义:
Const
WM_YOURMSG=WM_USER+100;
你的过程定义可以这样:
procedure YourProc(var MSG:TMsg);message WM_YOURMSG;
这样,当你的窗口收到该消息时,将调用这个过程。
例如:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
Const
WM_MINE=WM_USER+100;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure Mine(var msg:TMSG);message WM_MINE;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Mine(var msg: TMSG);
begin
Showmessage('OK');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Sendmessage(handle,WM_MINE,0,0);
end;

end.
这个单元定义了一个消息,当按下按钮时,向自己窗口发送这个消息(当然,不一定发送到自己的窗口,处理消息的过程也可以在其他地方),然后弹出个对话框。这当然是多此一举,不过,只是为了说明使用方法。

至于想处理MOUSECLICK时的MOUSE位置和状态,你可以不处理ONCLICK事件,而在ONMOUSEDOWN事件里处理。这个事件提供的参数分别告诉了你
Sender:那一个按钮接收这个鼠标事件:
Shift:当前鼠标的按钮状态是什么样,其他键盘状态是什么样,我们一般用
if Shift=[ssleft]来判断是否鼠标左键点击,有关方括号里的值,你可以查询DELPHI的在线帮助,关键字:TShiftState
Button:表明那一个鼠标键被按下,
X,Y:鼠标在接收这个鼠标事件时的位置,如果你需要的是屏幕的位置可以这样做:

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
CurrentPos:TPoint;
begin
if shift=[ssRight] then begin
CurrentPos:=TButton(Sender).clientToScreen(point(x,y));
{或者,GetcursorPos(CurrentPos)}
Showmessage(format('X:%d,Y:%d',[CurrentPos.x,CurrentPos.y]));
end;
//这个过程将使你鼠标在按钮上点下时弹出对话框,标明当前的位置。
end;
;
这样CurrentPos的X,Y就是当前屏幕的坐标。
olo 2000-01-13
  • 打赏
  • 举报
回复
先声明procedure myMessage(var msg:TMessage);message WM_USER+1;

procedure TForm1.myMessage(var msg:TMessage);
begin
....
end;

Mouse位置:GetCursorPos(aPoint);
caili 2000-01-13
  • 打赏
  • 举报
回复
随便找一本DELPHI的书。推荐DELPHI 4 UNLEASHED。
我将带领大家来系统学习Windows的窗口编程,包括消息窗口、GDI绘图、游戏开发等。本课程比较基础,非常适合初学者入门,读者可以边学习边实践。具体的章节目录和课程内容如下所示:---------------------------------------------Windows游戏编程系列之1:GUI界面编程及游戏入门实战1、Windows创建第一个窗口 WinMain入口函数 5进行Windows编程的调试手法 6窗口从哪里来? 7窗口编程的步骤 7窗口编程需要的主要结构 8窗口编程需要的主要API 92、Windows的窗口过程与消息机制 如何留住窗口? 121)Windows的消息消息循环 142)消息处理函数与常用消息 17)Windows的窗口过程函数 19 3、GDI编程之设备上下文 1)GDI的通用编程框架 222)GDI的绘图步骤 253)GDI获取设备句柄 254、GDI编程之绘制几何图形 画点、线 28颜色COLORREF 29矩形 29画圆、饼图、弦图 305、GDI编程之自定义画笔画刷画笔简介 32画刷简介 33画笔案例 33画刷案例 346、GDI编程之绘制文字 DrawText函数 35TextOut 函数 (wingdi.h) 36CreateFont函数 37绘制文本案例 377、GDI编程之绘制位图 位图简介 381)在资源中添加位图资源 392)从资源中加载位图: LoadBitmap 393)创建一个与当前DC相匹配的DC(内存DC) 394)将bitmap放入匹配的DC中:SelectObject 405)成像(1:1 比例 ) 406)取出位图 407)释放位图 418)释放匹配的DC 41绘制位图案例 41   8、Windows鼠标键盘消息 一、键盘消息 421、键盘消息 422、消息参数: 423、消息的使用: 424、键盘消息的案例代码 43二、鼠标消息 441、基本鼠标消息 442、双击消息 443、滚轮消息 454、不响应双击消息 45 9、Windows定时器消息 定时器消息介绍 47创建定时器 47关闭定时器 47定时器消息案例代码 4810、GDI游戏之跳舞动画 11、GDI游戏之走路动画 12、GDI贪吃蛇游戏实战  

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧