delphi 7关闭可用模态形式在特定条件下停用

时间:2012-01-03 12:43:45

标签: forms delphi delphi-7

我正在使用 delphi 7 开展项目,该项目是一个维护项目,我不是该项目的原始编码器,我有一种情况需要关闭可用< / strong>在某些情况下通过代码创建后的表单,表单是模型

这是

的示例代码
       var 
       frmStratum : TfrmStratum;
       begin
          if not assigned(frmStratum) then myMainForm.OnExecute(PropAction);
        end; 

在myMainForm.OnExecute(PropAction)中;我有

frmStratum := TfrmStratum.Create(Self, Self as IStratum,inttostr(m_surveyno),Module,m_stations,false);

现在 TfrmStratum 程序TfrmStratum.FormActivate 我做了大量的计算并写入数据库

var
  if (bMassStratumExport) AND (bDoneOne)  then
  begin
             //write to database..
  end;

现在我必须至少 20次   

1. Create the form
2. onactivate do database writing
3. close TfrmStratum

因为它是一种模态形式,所以我无法关闭,如果低于我创建它的位置,所以我想在第2步

完成后立即关闭它onactivate

现在我尝试了这个

  if (bMassStratumExport) AND (bDoneOne) AND NOT (bReadyToclose) then
 begin
    //do database writing
    if bNowClo then frmStratum.close;
 end

编辑:(编辑以使问题更清晰)

表单的停用(frmStratum),我想关闭模态表单(frmStratum),所以我这样做

procedure TfrmStratum.FormActivate(Sender: TObject);
 begin
  if (bMassStratumExport) AND (bDoneOne) AND NOT (bReadyToclose) then
    begin
      //do database writing
      if bNowClo then self.close;// i need to close the form after after doing database write
    end
  end;

但是窃听时的控件转到self.close但它没有关闭表单。 如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

假设它的frmStatum是无效的,它会给你A / V异常

如果bNowClo那么self.close;

答案 1 :(得分:5)

过去当我需要在激活期间关闭表单时,我向自己发布了一条消息,而不是调用self.close。

PostMessage(Self.Handle, WM_CLOSE, 0, 0);

我试图找到我指向这个方向的原始来源,但我找不到它。

PostMessage将立即返回,而不是等待处理该消息。完成OnActivate函数并且Delphi处理循环处理消息后,将在您的表单上调用close消息。