关于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)
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;
[解决办法]
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;
[解决办法]
自己循环吧。。。
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;