一个自定义组件里发送自定义消息的问题?(100分)

  • 主题发起人 主题发起人 foreveryouth
  • 开始时间 开始时间
F

foreveryouth

Unregistered / Unconfirmed
GUEST, unregistred user!
我的自定义组件里有一个button按钮,单击它时,想给自定义组件发送一个
自定义消息CM_SearchReady,而自定义组件的处理事件OnSearchReady设成published,
这样在窗体中加入这个自定义组件时,可将这个自定义消息发给窗体,让窗体处理这个
消息。

这样写问题在哪儿?窗体不能接受到这个消息。我刚刚学组件开发,很多地方不懂,别见笑!
const CM_SearchReady=WM_USER + 999;
type
TCM_SearchReady=record
msgid:cardinal;
msize:word;
mcolor:longint;
msgresult:longint;
end;
type
TCustomPanel1 = class(TCustomPanel)
cedit_jiansuoshi:TEdit;
procedure cbitbtn_jiansuoClick(Sender: TObject);
private
{ Private declarations }
cbitbtn_jiansuo:TBitBtn;
FOnSearchReady: TNotifyEvent;
procedure CMSearchReady(var Message: TMessage); message CM_SearchReady;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
published
{ Published declarations }
property Align;
property OnSearchReady: TNotifyEvent read FOnSearchReady write FOnSearchReady;
end;
implementation

//***********初始化控件***********************************
constructor TCustomPanel1.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
cbitbtn_jiansuo:=TBitBtn.Create(self);
cbitbtn_jiansuo.parent:=self;
cbitbtn_jiansuo.caption:='检索';
cbitbtn_jiansuo.OnClick:=cbitbtn_jiansuoClick;
cbitbtn_jiansuo.Show ;
end;
procedure TCustomPanel1.cbitbtn_jiansuoClick(Sender: TObject);
var
szMsgStr:array[0..255] of char;
begin
SendMessage(parent.handle,CM_SearchReady,Integer(@szMsgStr),0);
end;
procedure TCustomPanel1.CMSearchReady(var Message: TMessage);
begin
inherited;
end;
end.

在form中加入这个组件与一个edit控件
procedure TForm1.CustomPanel11SearchReady(Sender: TObject);
begin
Edit1.Text:='aa';
end;
可没反应,请高手指教!!!

 
老兄,说实话,我怎么老感觉你的代码很难受。反正我不懂。你试试这个看行不。

procedure TCustomPanel1.CMSearchReady(var Message: TMessage);
begin
if assigned(fOnSearchReady) then fOnSearchReady(self);
message.result:=0;
end;

还有你的消息记录的声明有意义吗?
 
谢谢!!!
不好意思,我刚学。我查了一下资料,这样写可以吗?
type
TCustomPanel1 = class(TCustomPanel)
procedure cbitbtn_jiansuoClick(Sender: TObject);
private
{ Private declarations }
//自定义消息
FSearchReady: TNotifyEvent;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
procedure CreateWnd;override;
published
{ Published declarations }
property Align;
property OnSearchReady: TNotifyEvent read FSearchReady write FSearchReady;
end;
//初始化作好后
procedure TCustomPanel1.cbitbtn_jiansuoClick(Sender: TObject);
begin
if Assigned(FSearchReady) then
FSearchReady(self);
end;

在form中加入这个组件与一个edit控件
procedure TForm1.CustomPanel11SearchReady(Sender: TObject);
begin
Edit1.Text:='aa';
end;
可仍旧没反应,请高手指教!!!





 
如果在同一个窗体中,直接用
sendmessage(handle,CM_SearchReady,0,0)
 
这样:
Type
TSearchEvent:procedure (Sender:TObject) of object;
var
FOnSearchReady:TSearchEvent;
下面是消息处理函数:
procedure OnSearchReady(var Msg:YouMessage);
begin
if Assigned(FOnSearchReady) then
SearchReady;
end;

property SearchReady:TSearchEvent read FOnSearchReady write FOnSearchReady

明白了吗?


 
后退
顶部