2016-08-23 3 views
2

Некоторые из моих форм можно показать как нормальные, так и модальные формы. В случае, если они отображаются как модальные формы, мне нужно скрыть некоторые компоненты, которые не полезны в модальном состоянии.Как проверить, является ли форма модальной, прежде чем она нарисована?

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

Я хотел бы выполнить свой код до того, как форма обращаются, чтобы избежать его нарисовано несколько раз без необходимости.

+1

Что не так с кодом в вопросе? Разве вы не нашли ответ? Лично, хотя это кажется неправильным. Я бы добавил в форму форму, чтобы показать ее. Передайте в качестве аргумента этому методу, следует ли показывать модально или немощно. Примите соответствующие меры в этом методе перед вызовом 'Show' или' ShowModal'. –

+0

Где это выполняется? В событии OnShow? Потому что это то, где вам это нужно, я думаю. – Dsm

+0

Вы тот, кто показывает форму. Поэтому перед тем, как вы покажете форму, сделайте все, что вам нужно. Затем сделайте 'ShowModal'. –

ответ

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; 

Вы не можете переопределить Показать таким же образом - вы должны переопределить видимое свойство, так легче сбросить видимость компонентов, как показано на рисунке.

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; 

и вы можете вызвать форму параметра. Правда для модальных, Ложные для NoModal формы:

(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.

Смежные вопросы