1. 比如
Form1里 form2.show 显示出Form2 而Form2的按钮Btn1按下后,我想让Form1知道Form2的Btn1按下了,怎么通知Form1?需要自定义消息吗?2. 还有就是 模态对话框的问题:比如我在form1中 form2.showModal 使Form2显示,
但我想按下Form2的BtnOk后,不会自己关闭Form2,而是一直开着,
直到满足我的条件再关闭,而且要通知Form1按下BtnOk了。 要怎么写?谢谢

解决方案 »

  1.   

    >>我想让Form1知道Form2的Btn1按下了,怎么通知Form1?需要自定义消息吗?
    Form1定义个函数,在 Form2的Btn1按下 时,顺便调用 form1 的函数就可
    设置 Button1.ModalResult 为 mrNone 就不会自己关闭Form2,而是一直开着,
      

  2.   

    yes, agree with aiirii...
      

  3.   

    谢上面的我更想知道的是Form2的某个按钮单击后,怎么能马上通知到Form1大概就是 Form2.btn1 Click后会发送一个消息给Form1,说我单击Btn1了,
    然后Form1就响应这个消息,就是里面有一个消息处理函数可是我不知道怎么写?
      

  4.   

    我想能不能利用一个过度的控件来满足这个要求
    比如说:当你单击form2.btn1后,在里面加入一行代码
            form1.**.click.
    这样能在FORM1里响应FORM2的消息。
    不知道对不对~!
      

  5.   

    自己定义一个消息
    Const 
      WM_MYMESSAGE=WM_USER+1000;在Form2.btn1 Click中执行
    postmessage(form1.handle,WM_MYMESSAGE,0,0);form1中定义
    procedure OnWM_MYMESSAGE(Var Msg:TMessage);WM_MYMESSAGE;procedure TForm1.OnWM_MYMESSAGE(Var Msg:TMessage);
    begin
    showmessage('收到消息');
    end;procedure 
      

  6.   

    最好在创建Form2添加一个FormHandle 的属性 ,在创建的时候将用Form1的Handle赋值最好不在要Form2中直接引用Form1
      

  7.   

    非常感谢 ZyxIp(绝望中...) 最好在创建Form2添加一个FormHandle 的属性 ,在创建的时候将用Form1的Handle赋值
    最好不在要Form2中直接引用Form1--
    可是还是不明白上面这句? 比如我定义了一个
      private
        formhandle:HWnd;procedure TForm2.FormCreate(Sender: TObject);
    begin
      formHandle:=form1.handle;
    end;那这样的话,还是得在 unit2里 加上 uses Unit1; 还是有引用Form1?
      

  8.   

    Form2添加属性TForm2=Class(TForm)
     ....
    public
    published
     property FormHandle:THandle Read FFormHandle Write FFormHandle;
    end;在创建Form2的时候赋值。
    你的Form2是怎么创建的,是在启动是自动创建的还是自己创建的
    如果是启动时创建的,则在dpr文件中Application.CreateForm(Tform1,form1);
    Application.CreateForm(Tform2,form2);
    form2.formHandle:=Form1.Handle;
      

  9.   

    非常感谢不过 property FormHandle:THandle Read FFormHandle Write FFormHandle;不知道是什么?再问会不会被扁 ~~~ 搜了下也都没找到
      

  10.   

    //一个空白窗体是下面这个样子
    type
      TForm1 = class(TForm)
      private
        { Private declarations }
      private
        FFormHandle :THandle;//自己添加
      public
        { Public declarations }
      published  //
       property FormHandle:THandle Read FFormHandle Write FFormHandle; //添加一个属性
      end;窗体也是一个对象呀! 就是添加一个属性。楼主没有搞清DELPHI中类的定义吧。
      

  11.   

    太谢谢了
    我才学的Delphi,本来编程就不好 
    都没见过有Published的东西 呵呵 真的很谢谢