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

jacky168 2000-01-13 04:58:00
请问怎么才能让窗口接收自定义的消息
另请问怎么得到MouseClick时的Mouse位置和按钮状态?
...全文
377 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。

5,379

社区成员

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

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