关于DELPHI的控件制作:(100分)

  • 主题发起人 陈荻秋
  • 开始时间

陈荻秋

Unregistered / Unconfirmed
GUEST, unregistred user!
关于DELPHI的控件制作:
如何将WINDOWS的消息(包括用户自定义消息)连接到DELPHI的事件处理函数?
比如说:要求一个控件PUBLISHED一个OnMyMessage事件处理函数,以响应程序某处发出的
SendMessage()或PostMessage()消息。


*****************************************************************************
另附:招贤
我处(广西防城港供电局)欲自行开发‘用电管理信息系统’,数据库采用MS-SQLSERVER
用户界面用DELPHI。急招几名有DELPHI开发经验的人士,共同开发,或协助开发(不必了解
用电管理的具体业务,只要能帮助解决关于DELPHI的技术问题),具体方式请按如下方式联系

电话 :07702822156 转 2261 陈
EMAIL :chendiqiu@163.net
 
你可以试试TControl.Perform(...)函数。
 
所有的 Delphi Class 都有一个内置的消息处理机制, 用来翻译、处理 Windows 系统(或自定义)消息,例如:鼠标的 HitTest、窗体的 WM_Paint...。
他们能够满足一般的需要, 若要特殊处理一些(某个)消息, 我们可以重写某个Class(后控件)的消息处理的 Message Handler, 例如:

当你的控件从另一个窗体的后面调到前面时, 需要重画该控件的全部或局部的话, 可以重写它的 WMPAINT 消息处程序
type
TMyComponent = class(...)
...
protected
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
end;
...

procedure TMyComponent.WMPaint(var Message: TWMPaint);
begin
inherited WMPaint(Message);
//编写自己的处理代码
判别重画边界
if 需要画全部 then 全部重画
else 画局部重画;
...
end;
 
首先:
没有想到答复来得如此快,足见DELPHI世界是“严肃的DELPHI世界”,DELPHI世界的参与者都是认真的程序员。
谢谢各位指教,令本人不胜感激,希望在讨论过程中共同提高!

其次:
*************

初次提问时我似乎把‘WINDOWS消息处理函数’和‘DELPHI事件处理函数’混为一谈了,我的问题描叙有欠准确,特此道歉。问题重新描叙如下:

_______________________________________________
const
WM_MyMessage:=WM_AAPP+1000;//自定义消息
...

TMyEvent=procedure(P1:type1;p2:type2) of object;//事件响应类型
...
TMyComponent=class(...)
private
FOnMyEvent:TMyEvent;
.....
published
property OnMyEvent:TMyEvent read FOnMyEvent write FOnMyEvent;//公布事件处理函数
...
end
------------------------------------
我想知道 DELPHI 如何处理自定义消息并与指定的事件处理函数相联系?
是否是在如 HUIZHANG 先生例中的消息处理函数中自己用代码来联系,如何做?
最好举例。
谢谢!
 
Tcontrol.Perform()是控件对其自身发出消息。
HuiZhang先生的代码是处理Window自身的消息,
而要完成自定义消息的发送和响应,试试如下的代码:

const WM_MyMessage:=WM_USER+101;//自定义消息...

TMyComponent=class(...)

Procedure WMMyMessage(var M:TMessage);Message WM_MyMessage;
end;
......
procedure TMyComponent.WMMyMessage(var M:TMessage);
begin
//以下为消息控制的代码
if M.wParam=1 then begin
...
end;

end;

如果您要发送该消息,执行如下代码:

PostMessage(Handle,WM_MyMessage,0,0);//请参考PostMessage的联机帮助

SendMessage(Handle,WM_MyMessage,0,0);

以上是本人的一点认识,如有错误,欢迎指正!
 

DELPHI 2 UNLEASHED ----中文版《DELPHI 2 程序设计大全》
RMB 133

可以帮你解决所有的问题,用不着在这里提这么简单的问题,
可以去我的住页,找找DELPHI的资料
http://www.nbip.net/michaeljia
 
顶部