为什么不能给控件的方法加上侦测消息的语句?

Linux2001 2001-06-14 07:23:00
比如:在声明中这样:
Intelface
...
...
procedure Button1Click(Sender:TObject);message WM_ACTIVATE;
这样之类的语句呢?
有没有什么办法可以加呀?
...全文
183 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Linux2001 2001-07-08
  • 打赏
  • 举报
回复
不是啊,我想要侦测的是ToolBar控件上的消息,而不是窗口消息呀,意思就是当一个文件拖放路过ToolBar控件时,可以侦测到这个消息(文件是外部文件,比如说是桌面或是磁盘系统上的)!
Linux2001 2001-06-26
  • 打赏
  • 举报
回复
不是啊,我想要侦测的是ToolBar控件上的消息,而不是窗口消息呀,意思就是当一个文件拖放路过ToolBar控件时,可以侦测到这个消息(文件是外部文件,比如说是桌面或是磁盘系统上的)!
Linux2001 2001-06-24
  • 打赏
  • 举报
回复
不是啊,我想要侦测的是ToolBar控件上的消息,而不是窗口消息呀,意思就是当一个文件拖放路过ToolBar控件时,可以侦测到这个消息(文件是外部文件,比如说是桌面或是磁盘系统上的)!
光明山人 2001-06-22
  • 打赏
  • 举报
回复
必须uses ShellApi;

1、在FormCreate用DragAcceptFiles(Handle, True)登记一下;
2、增加一个消息响应方法:
procedure WMDropFiles(var msg: TWMDropFiles); message WM_DROPFILES;
当资源管理器拖动文件到你的窗体时,会有这个消息发生。
其中的msg.Drop是一个句柄,使用它,你用DragQueryPoint可以查询拖放到的点, 用DragQueryFile查询文件名,最后记住用DragFinish释放系统分配的内存。看看API的帮助吧。

祝你好运!
BlueTrees 2001-06-21
  • 打赏
  • 举报
回复
要使用ShellAPI注册的,然后资源管理器才会给你发消息的,参考ShellAPI吧!老弟!
h_lj 2001-06-21
  • 打赏
  • 举报
回复
用drop event不行吗?
h_lj 2001-06-20
  • 打赏
  • 举报
回复
你把问题讲详细点吧.
Linux2001 2001-06-20
  • 打赏
  • 举报
回复
比如我现在要响应一个从资源管理器拖放到我的ToolBar控件上的一个拖放消息,我该如何做呢?
Linux2001 2001-06-18
  • 打赏
  • 举报
回复
有没有例子啊,举一个例子吧!
h_lj 2001-06-17
  • 打赏
  • 举报
回复
在WM_ACTIVATE中调用Button1Click就行了,何必要这么麻烦呢
C_Sharp 2001-06-17
  • 打赏
  • 举报
回复
to agui(阿贵),

听你说话的口气象已经50岁啦!
Linux2001 2001-06-16
  • 打赏
  • 举报
回复
主要是想要响应一个拖放操作,这只是一个例子而已,请大家帮帮忙呀!先谢了!
BigBen 2001-06-15
  • 打赏
  • 举报
回复
to all:人家问的是控件,不是应用。
to linux:不明白你的意思。写控件时经常要用到消息处理啊,这句 procedure Button1Click(Sender:TObject);message WM_ACTIVATE;很有问题。须知wm_activate在窗口世界中是非常频繁的。你想干什么?

光明山人 2001-06-14
  • 打赏
  • 举报
回复
昨天我才给别人回复了一个这种方法,结果你又提出来,唉!

procedure TForm1.FormCreate(Sender: TObject);
var
FButtonInstance: TFarProc;
begin
FButtonInstance := MakeObjectInstance(ButtonWndProc); // 转化一下
FDefWndProc := Pointer(GetWindowLong(Button1.Handle, GWL_WNDPROC)); // 取原来的窗口函数
SetWindowLong(Button1.Handle, GWL_WNDPROC, Longint(FButtonInstance)); // 设置成咱们自己的
end;

procedure TForm1.ButtonWndProc(var Message: TMessage);
begin
// 这里会传入Button1的消息,你可以用Message来判断消息和处理
// 用下面的语句调用它原来的处理。
with Message do
Result := CallWindowProc(FDefWndProc, Button1.Handle, Msg, wParam, lParam);
end;

rh 2001-06-14
  • 打赏
  • 举报
回复
还有一个地方可以拦截消息

使用 Application的HookMainWindow方法
C_Sharp 2001-06-14
  • 打赏
  • 举报
回复
为什么不能给控件的方法加上侦测消息的语句?
这几句话是错的,可以给控件的方法加,但是需要有个TMessage或TMsg类型的参数。
windindance 2001-06-14
  • 打赏
  • 举报
回复
可以拦截Application.OnMessage事件。

5,388

社区成员

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

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