读书人

关于vcl的广播消息,该怎么处理

发布时间: 2012-03-29 12:53:12 作者: rapoo

关于vcl的广播消息
我在panel上放了 三个 edit
var
msg :tmessage;
str1 : string;
begin
str1:= 'abc';
msg.msg := WM_SETTEXT;
msg.lparam:=lparam(str1 );
panel.broadcast(msg);
end
结果是 只有一次被放到panel上的edit的text才被设置成了abc 另外两个 text不会被设置
反复试了很多次,每次都是第一个被放到panel的edit才会被赋值abc


求解。;。。。。。。。。。呜呜。。。呜呜

[解决办法]
看 MSDN WM_SETTEXT 消息的返回值部分:
The return value is TRUE if the text is set.

再看 D源码:(我这是D6)

Delphi(Pascal) code
procedure TWinControl.Broadcast(var Message);var  I: Integer;begin  for I := 0 to ControlCount - 1 do  begin    Controls[I].WindowProc(TMessage(Message));    if TMessage(Message).Result <> 0 then Exit;  end;end;
[解决办法]
探讨
看 MSDN WM_SETTEXT 消息的返回值部分:
The return value is TRUE if the text is set.

再看 D源码:(我这是D6)

Delphi(Pascal) code

procedure TWinControl.Broadcast(var Message);
var
I: Integer;
begin
for I ……

[解决办法]
改了吧
Delphi(Pascal) code
procedure mBroadcast(var mm: TMessage;mComp: TWinControl);var        I: Integer;begin        for I := 0 to mComp.ControlCount - 1 do        begin                mComp.Controls[I].WindowProc(mm);                //if mm.Result <> 0 then Exit;        end;end;procedure TForm1.Button1Click(Sender: TObject);var        msg:tmessage;        str1:string;begin        str1:= 'abc';        msg.msg := WM_SETTEXT;        msg.lparam:=lparam(str1);        //panel1.broadcast(msg);        mBroadcast(msg,Panel1);end;
[解决办法]
自己循环吧。。。
Delphi(Pascal) code
var  i: Integer;  for i:=0 to pnl1.ControlCount - 1 do  begin    if pnl1.Controls[i] is TEdit then      (pnl1.Controls[i] as TEdit).Text := 'abc';  end; 

读书人网 >.NET

热点推荐