窗体ShowModal之后  
 
procedure  TForm1.FormActivate(Sender:  TObject);  
begin  
       Procedure2;//1  
       procedure1;//2  
       ModalResult:=mrOK;//3*完成之后要返回  
end;  
 
上面第三句*之后没有关闭空口返回,  
要怎样才可以,完成1,2之后如3那样就自动关闭空口返回?

解决方案 »

  1.   

    var OK: Boolean;procedure  TForm1.FormActivate(Sender:  TObject);  
    begin  
           OK := False;
           Procedure2;//1  
           procedure1;//2  
           OK := True;
    end;  procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if OK then
      begin
        ModalResult := mrOK;
        Close;
      end;
    end;
      

  2.   

    最后加上
    Close;  
    就可以了
      

  3.   

    刚才看错了,应该这样:
    procedure  TForm1.FormActivate(Sender:  TObject);  
    begin  
           Procedure2;//1  
           procedure1;//2  
           ModalResult:=mrOK;//3*完成之后要返回  
           PostMessage(Handle, WM_CLOSE, 0, 0);
    end;  
      

  4.   

    Sorry ,
     ModalResult:=mrOK;//3*完成之后要返回
    一定要一个返回值的.
    返回后在调用处会有一个处理。
      

  5.   

    ModalResult := mrOK;
        Close;
      

  6.   

    俺从来没这样干过,
    都是用图形按钮的
    把图形按钮的kind设为mrok不就完了
    窗体会自动返回mrok的
      

  7.   

    对于模式化的窗体来说,窗体的本身通常并不处理自身.通常是由调用都去处理的.
    例:
    var
      dlg: TMyForm;
    begin
      dlg := TMyForm.Create(Self);
      try
        ....设置窗体的参数
        dlg.ShowModule;
        if dlg.ModalResult = mrOk then
        begin
          //如果用户选择了确定后做的处理.
        end;
      finally
        dlg.Free;//这里是调用者释放这个窗体的地方.
      end;
    end;通常只有非模式化的窗体才需要自己关闭自己.
      

  8.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
       try
         Form2.ShowModal;
       finally
         case Form2.ModalResult of
              mrOk     :showMessage('aaaaaaaaaaaaa');
              mrCancel :showMessage('bbbbbbbbbbbbb');
              mrAbort  :showMessage('cccccccccccccc');
         else
             showMessage('ddddddddddddddddddd');
         end;
       end;      
    end;
      

  9.   

    楼上的写法似乎不全常理吧,怎么会在Finally后做这些判断呢?