Forms 如何在窗体之前检查它是否是模态的';什么画?
我的一些表单可以显示为普通表单和模态表单。 如果它们显示为模态形式,我必须隐藏一些在模态状态下不可用的组件Forms 如何在窗体之前检查它是否是模态的';什么画?,forms,delphi,Forms,Delphi,我的一些表单可以显示为普通表单和模态表单。 如果它们显示为模态形式,我必须隐藏一些在模态状态下不可用的组件 if(fsModal in Self.FormState) then begin //hiding some components... end; 我希望在绘制表单之前执行我的代码,以避免不必要地绘制更多次。我认为在表单可见之前执行OnShow,但似乎不是这样。所以你可以这样做: TMyForm = class( TForm ) // this will already be i
if(fsModal in Self.FormState) then
begin
//hiding some components...
end;
我希望在绘制表单之前执行我的代码,以避免不必要地绘制更多次。我认为在表单可见之前执行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;
您不能以相同的方式替代“显示”-您必须替代“可见”属性,以便更轻松地重置组件的可见性,如图所示。您可以为两种类型的显示编写一些初始过程:
(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,对于诺模形式为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中编写并测试了这个示例。问题中的代码有什么问题?你还没有找到答案吗?我个人认为这是错误的。我会在表单中添加一个定制方法来显示它。作为参数传递给该方法是以模态方式显示还是以非模态方式显示。在调用
Show
或showmodel
之前,在该方法中采取适当的操作。在何处执行此操作?在OnShow活动中?因为那是你需要它的地方,我想。你就是那个展示表格的人。所以在你展示表格之前,做你需要做的任何事情。然后执行showmodel
。将代码放在OnShow
处理程序中有什么坏处?在任何情况下,我都会按照上面描述的方式来做。你不需要把所有的事情都安排在活动中。您可以向类中添加方法。而表单只是一个类。@DavidHeffernan:过去我在OnShow中遇到过由代码引起的图形问题。首先。。如果我能做一次,为什么我要画两次表格?在我看来,这是一件不可接受的事情。