怎样捕捉消息:如form1中的edit1的en_change,combobox1的cbn_selchange的消息?(100分)

  • 主题发起人 主题发起人 gxetdc
  • 开始时间 开始时间
G

gxetdc

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样捕捉消息:如form1中的edit1的en_change,combobox1的cbn_selchange的消息?
我用函数:setwindowlong 或makeobjectinstance进行指定新窗口都不行,请高手举个例子!
 
这样:

type

TForm1 = Class(TForm)
Edit1: TEdit;
ComboBox1: TComboBox;
...
protected
procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
public
...
end;
...
implementation
...
procedure TForm1.WMCommand(var Message: TWMCommand);
begin
with Message do
begin
case NotifyCode of
EN_CHANGE:
if Ctl = Edit1.Handle then
begin
//处理关于 Edit1 的 EN_CHANGE 消息
end;
CBN_SELCHANGE:
if Ctl = ComboBox1.Handle then
begin
//处理关于 ComboBox1 的 CBN_SELCHANGE 消息
end;
end;
inherited; //调用缺省的处理
end;
end;
 
谢谢bbkxjy,程序通过。
但我不知道什么时候用TWMCOMMAND,什么时候用Tmessage。如果能解释那就更加好!
 
其实 TWMCommand 与 TMessage 都可以用的,只要保证了两个结构的大小一样,头两个字节
代表消息 ID 就行了,结构的其它字节你可以根据 Windows 或 Delphi 对消息的定义自己
划分的。总之,TMessage 是通用的,其它在 Messages.pas 中定义了包括 TWMCommand 在
内的一些 Windows 特定消息结构,在 Controls.pas 中定义了 VCL 自己使用的一些消息特
定结构,对于这些消息,你就可以直接使用已定义的结构。Delphi 中未定义的,可以用
TMessage,但 wParam,lParam 中所包含的实际参数要你自己去拆分,如果你根据消息传递
的参数划分结构中除 Msg 外的字节为若干字段,并给这些字段更有意义的名字,则处理消息
时就更方便了。
有一点,划分时一个字段是不能跨过 DWORD 边界的,如不能把 Msg 之后的第 4 字节与第 5
字节作为一个字段。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
633
import
I
I
回复
0
查看
617
import
I
后退
顶部