我的一些表格可以显示为普通形式和模态形式。 如果它们显示为模态形式,我必须隐藏一些在模态状态下无用的组件。
if(fsModal in Self.FormState) then
begin
//hiding some components...
end;
我想在绘制表单之前执行我的代码,以避免它被不必要地抽出更多次。
答案 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中编写并测试了这个例子。