起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 213|回复: 10

【结】主窗体问题**

[复制链接]
发表于 2009-3-10 11:12:03 | 显示全部楼层 |阅读模式
现在做的一个功能需要改变标准风格主窗体控件的caption,上论坛查了下方法,要用到消息机制,照着做了个消息,从我的功能发送消息,主窗体接收消息,但是这样做只能在DoExecute过程里输出showmessage对话框,不能控制标准风格主窗体的控件,好象是报个地址错误,请问应该如何解决??
回复

使用道具 举报

发表于 2009-3-10 11:18:39 | 显示全部楼层
把发送消息过程的代码贴出来看看,在那里报错了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-10 11:21:26 | 显示全部楼层
发送消息是没错了,接收消息报错

procedure TMyMessageHandler.DoExecute(AMessage: TBizMessage; const AParam: THandleParam;
      var Handled: Boolean);

begin
  if AMessage is TMyMessage then
  begin
    business.Forms.Dialogs.ShowMessage((AMessage as TMyMessage).msg);
    //form1.Button1.Caption := 'aaa';
    Handled := True;
  end;
end;
注释那行错了,前面我定义了var form1:tmainform;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-10 11:34:49 | 显示全部楼层
??还没好吗?
回复 支持 反对

使用道具 举报

发表于 2009-3-10 11:37:49 | 显示全部楼层
你直接把这个代码  //form1.Button1.Caption := 'aaa';
放到另外一个地方看看能起作用么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-10 11:40:23 | 显示全部楼层
能啊,TMyMessageHandler类我跟Tmainform定义在一个单元,在Tmainform的过程里,直接用button1.caption := 'aaa';就可以了,在TMyMessageHandler不定义var form1:tmainform就不能找到button1,所以要form1.Button1.Caption := 'aaa';但是这样报地址错误
回复 支持 反对

使用道具 举报

发表于 2009-3-10 11:50:53 | 显示全部楼层
你可以在Tmainform中写一个修改caption的方法,然后在DoExecute中调用这个方法
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-10 11:59:58 | 显示全部楼层
写了方法

procedure TMAINFORM.update;
begin
if button1.Caption<>'aaa' then
button1.Caption := 'aaa' else
button1.Caption := 'bbb';
end;

这样调用编译不过,该如何调用


procedure TMyMessageHandler.DoExecute(AMessage: TBizMessage; const AParam: THandleParam;
      var Handled: Boolean);

begin
  if AMessage is TMyMessage then
  begin
    business.Forms.Dialogs.ShowMessage((AMessage as TMyMessage).msg);
   //form1.Button1.Caption := 'aaa';
    TMAINFORM.Create.update;   
    Handled := True;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-10 12:07:14 | 显示全部楼层
用  form1.update 调用和 form1.button1.caption := 'aaa' 报一样的错
回复 支持 反对

使用道具 举报

发表于 2009-3-10 13:23:31 | 显示全部楼层
我们前面做的例子你参考一下吧

  TMyMessageHandler = class(TBizMessageHandler)
  private
       FOnMyDo: TNotifyEvent;
  public
    procedure DoExecute(AMessage: TBizMessage; const AParam: THandleParam;
      var Handled: Boolean); override;
     property OnMyDo: TNotifyEvent read FOnMyDo write FOnMyDo;
  end;

procedure TMyMessageHandler.DoExecute(AMessage: TBizMessage; const AParam: THandleParam;
      var Handled: Boolean);
begin
  if AMessage is ZYJ1.TMyMessage then
  begin

   if Assigned(FOnMyDo) then
          FOnMyDo(nil);
    Handled := True;
  end;
end;





lmsg : TMyMessageHandler;

procedure setCaption(Sender: TObject);

implementation   

procedure TSTANDARDSTYLEMAINFORM.BizFormShow(Sender: TObject);
begin
  lmsg := TMyMessageHandler.Create;
  TMyMessageHandler(lmsg).OnMyDo:=setCaption;
  BizSys.GlobalContext.AddMessageHandler(ZYJ1.TMyMessage.Name, lmsg);

end;


procedure TSTANDARDSTYLEMAINFORM.setCaption(Sender: TObject);
begin
       Button2.Caption :='aa';
end;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-24 11:55 , Processed in 0.043971 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表