Pre*_*ias 3 forms delphi delphi-7
我正在使用delphi 7工作项目,该项目是一个维护项目,我不是项目的原始编码器,我有一种情况,我需要在某些情况下通过代码创建后关闭可用的表单,表格是模特
这是示例代码
var
frmStratum : TfrmStratum;
begin
if not assigned(frmStratum) then myMainForm.OnExecute(PropAction);
end;
Run Code Online (Sandbox Code Playgroud)
在myMainForm.OnExecute(PropAction)中; 我有
frmStratum := TfrmStratum.Create(Self, Self as IStratum,inttostr(m_surveyno),Module,m_stations,false);
Run Code Online (Sandbox Code Playgroud)
现在程序TfrmStratum.FormActivate的TfrmStratum 我做很多calucaltion和写入数据库
var
if (bMassStratumExport) AND (bDoneOne) then
begin
//write to database..
end;
Run Code Online (Sandbox Code Playgroud)
现在我不得不这样做ATLEAST 20倍 即
1. Create the form
2. onactivate do database writing
3. close TfrmStratum
Run Code Online (Sandbox Code Playgroud)
因为它是一种模态形式,所以我无法关闭,如果在我创建它的地方下面,所以我想在第2步完成时关闭它onactivate
现在我试过这个
if (bMassStratumExport) AND (bDoneOne) AND NOT (bReadyToclose) then
begin
//do database writing
if bNowClo then frmStratum.close;
end
Run Code Online (Sandbox Code Playgroud)
编辑:(编辑,以使问题更清楚)
表单的onactivate(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;
Run Code Online (Sandbox Code Playgroud)
但是控制虽然窃听到了自我关闭但它并没有关闭形式.如何解决这个问题?
在过去,当我需要在激活期间关闭表单时,我向自己发布了一条消息,而不是调用self.close.
PostMessage(Self.Handle, WM_CLOSE, 0, 0);
Run Code Online (Sandbox Code Playgroud)
我试图找到我指向这个方向的原始来源,但我找不到它.
PostMessage将立即返回,而不是等待处理消息.一旦OnActivate函数完成并且消息Delphi处理循环处理消息关闭将在您的表单上调用.