delphi中sendmessage如何调用过程(急死人拉) 可以TWMMouse 代替wParam ,lParam,很方便的:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 说说你到底要做什么。wParam和lParam的用法是和消息相关的。也许你是希望处理某一特殊的消息?那么可以在TForm类中声明一个消息处理过程:procedure DoMouseHover(var msg: TMsg); message WM_MOUSEHOVER;并让他去调用EditEnter之类的函数(或者直接写在里面)。你再说详细一些最好(目的)。 在EDIT的ONENTER事件中编程:EditEnter;即可。干吗用SENDMESSAGE呢?????? to JGTM2000 我想把WM_MOUSEHOVER消息发送给edit1构件。如果按照你的意思,该事件应该是发送给Form的,这怎么可以混在一起呢?或者我有些误解。你能不能给我一个例子 哎,不好意思,是我看错了。你的意思是让TEdit像TSpeedButton那样可以响应鼠标进出事件,是吧?那就new一个Delphi的Component,从TEdit或者最好TCustomEdit继承,并加入对消息CM_MOUSEENTER和CM_MOUSELEAVE(没有WM_MOUSEHOVER消息,CM_开始的消息是Delphi内部定义并使用的消息)的处理过程。最好声明一个新的事件属性,并在处理消息的程序中根据OnHover属性的有无选择执行。另外前面有个笔误,处理消息的函数参数类型应该是TMessage,不是TMsg。抱歉。还有,在TWinControl内部“执行”消息过程可以用Perform(msg,wParam,lParam),看看源码就知道干什么的了。写组件的时候常用。 嘻嘻,不好意思,前面又犯了一个武断的错误:WM_MOUSEHOVER自从Win98/NT4以后已经成为正式消息了,在Delphi4+以后的Message.pas里面有它的定义。我前面说没有WM_MOUSEHOVER是因为当年俺在Win95中用Delphi2写TFlatButton的时候想用它就没找到,后来就是用CM_MOUSEENTER和CM_MOUSELEAVE解决的。另外,Perform是TControl而不是TWinControl中引入的,是我记错了,对不住父老乡亲们我对不起党不过:如果你希望得到WM_MOUSEHOVER消息则必须先使用TrackMouseEvent函数申请,写法很简单:procedure THoverEdit.SetTrackMouseEvent;var tme: TTrackMouseEvent;begin ZeroMemory(@tme,sizeof(tme)); with tme do begin cbSize:=sizeof(tme); dwFlags:=TME_HOVER; hwndTrack:=Handle; dwHoverTime:=HOVER_DEFAULT; end; Win32Check(TrackMouseEvent(tme));end;然后重载CreateWindowHandle方法(因为要用到自己的hWnd):procedure THoverEdit.CreateWindowHandle(const Params: TCreateParams);begin inherited; SetTrackMouseEvent;end;然后再声明WM_MOUSEHOVER处理过程: THoverNotifyEvent = procedure(Sender: TObject; keyFlag: Longint; XPos,YPos: Smallint); THoverEdit = class(TCustomEdit) private FOnHover: THoverNotifyEvent; procedure SetTrackMouseEvent; protected procedure WMHover(var msg: TWMMouse); message WM_MOUSEHOVER; public procedure CreateWindowHandle(const Params: TCreateParams); override; .... end;写好缺省的消息处理过程(根据文档的说明,该消息的参数结构和TWMMouse是一样的):procedure THoverEdit.WMHover(var msg: TWMMouse);begin if Assigned(FOnHover) then begin FOnHover(Self,msg.Keys,msg.XPos,msg.YPos); end; SetTrackMouseEvent; msg.Result:=0;end;为什么要重新SetTrackMouseEvent?因为这些事件的跟踪是要消耗系统资源的,因此一次性触发,除非重新设置。当然,这里的只是一个示意而已,具体的逻辑还要看情况而定。BTW,我还是觉得CM_MOUSE那两个消息更好用。以上供您参考,不一定对。嘿嘿 搞得太复杂了 procedure TForm1.EditEnter(msg:Tmessage); message WM_USER+n begin ... msg.Wparam msg.Lparam end; SendMessage(Self.Hanlde,WM_USER+n,0,0); 自定意参数的擢用 关于MAINMENU菜单控件的用法问题,判断checkde属性问题 获得服务器信息~~ FormatDateTime如何获得一个月的最后一天 关于清空,timage里面的图片的问题! 急求标准时间校准代码 会的进来拿分吧!来! 用delphi 5.0写的程序,运行时,汉字有时不能正常输入(输入的汉字是乱码)? idhttp.get不了验证码 ---------------大派送(存储过程)======================= Delphi程序中有ActiveX控件,如何打包成独立程序? 在DELPHI中,如何知道自己这台计算机的工作组名? 请教关于pchar的小问题
procedure DoMouseHover(var msg: TMsg); message WM_MOUSEHOVER;
并让他去调用EditEnter之类的函数(或者直接写在里面)。你再说详细一些最好(目的)。
干吗用SENDMESSAGE呢??????
我想把WM_MOUSEHOVER消息发送给edit1构件。如果按照你的意思,该事件应该是发送给Form的,这怎么可以混在一起呢?或者我有些误解。
你能不能给我一个例子
还有,在TWinControl内部“执行”消息过程可以用Perform(msg,wParam,lParam),看看源码就知道干什么的了。写组件的时候常用。
var
tme: TTrackMouseEvent;
begin
ZeroMemory(@tme,sizeof(tme));
with tme do
begin
cbSize:=sizeof(tme);
dwFlags:=TME_HOVER;
hwndTrack:=Handle;
dwHoverTime:=HOVER_DEFAULT;
end;
Win32Check(TrackMouseEvent(tme));
end;然后重载CreateWindowHandle方法(因为要用到自己的hWnd):procedure THoverEdit.CreateWindowHandle(const Params: TCreateParams);
begin
inherited;
SetTrackMouseEvent;
end;然后再声明WM_MOUSEHOVER处理过程: THoverNotifyEvent = procedure(Sender: TObject; keyFlag: Longint; XPos,YPos: Smallint); THoverEdit = class(TCustomEdit)
private
FOnHover: THoverNotifyEvent;
procedure SetTrackMouseEvent;
protected
procedure WMHover(var msg: TWMMouse); message WM_MOUSEHOVER;
public
procedure CreateWindowHandle(const Params: TCreateParams); override;
....
end;写好缺省的消息处理过程(根据文档的说明,该消息的参数结构和TWMMouse是一样的):procedure THoverEdit.WMHover(var msg: TWMMouse);
begin
if Assigned(FOnHover) then
begin
FOnHover(Self,msg.Keys,msg.XPos,msg.YPos);
end;
SetTrackMouseEvent;
msg.Result:=0;
end;为什么要重新SetTrackMouseEvent?因为这些事件的跟踪是要消耗系统资源的,因此一次性触发,除非重新设置。当然,这里的只是一个示意而已,具体的逻辑还要看情况而定。BTW,我还是觉得CM_MOUSE那两个消息更好用。以上供您参考,不一定对。嘿嘿
procedure TForm1.EditEnter(msg:Tmessage); message WM_USER+n
begin
...
msg.Wparam
msg.Lparam
end; SendMessage(Self.Hanlde,WM_USER+n,0,0);
自定意参数的擢用