在绘制之前如何检查表单是否是模态的?

时间:2016-08-23 13:27:23

标签: forms delphi

我的一些表格可以显示为普通形式和模态形式。 如果它们显示为模态形式,我必须隐藏一些在模态状态下无用的组件。

if(fsModal in Self.FormState) then
begin 
  //hiding some components...
end;

我想在绘制表单之前执行我的代码,以避免它被不必要地抽出更多次。

2 个答案:

答案 0 :(得分:4)

我认为OnShow在表单可见之前执行,但似乎并非如此。所以你可以这样做:

TMyForm = class( TForm )  // this will already be in your source
public
  function ShowModal: Integer; override;
end;

function TMyForm.ShowModal: Integer;
begin
  // hide some components
  Result := inherited;
  // show them again in case next time it is a Show
end;

您不能以相同的方式覆盖显示 - 您必须覆盖可见属性,因此更容易重置组件的可见性,如图所示。

答案 1 :(得分:3)

您可以为两种类型的显示编写一些初始程序:

(in Form)
procedure TfrmForm01.Init(p_Modal: Boolean);
begin
  if p_Modal then
    begin
      edtForModalForm.Visible := False;  // hide some components
      ShowModal;
    end
  else
    Show;
end;

你可以通过参数调用表单。模态为True,NoModal形式为False:

(In main program)
procedure TForm1.btnShowFormClick(Sender: TObject);
var
  v_F : TfrmForm01;
begin
  v_F := TfrmForm01.Create(self);
  v_F.Init(True);
end;

procedure TForm1.btnShowModalFormClick(Sender: TObject);
var
  v_F : TfrmForm01;
begin
  v_F := TfrmForm01.Create(self);
  v_F.Init(False);
end;

我在Delphi7中编写并测试了这个例子。