2013-02-25 2 views
4

Мне было интересно, существует ли метод show TForm, не дожидаясь его (вроде TForm.Show). Но то, что я хотел бы, чтобы блокировать все другие формы (так же, как и в ShowModal)Delphi Non Blocking ShowModal

Пример:

У меня есть Form1 и Form2. Form1 имеет кнопку, которая должна открыть Form2, но Form1 заблокирован, но нажатие кнопки по-прежнему продолжает код, который появился после формы Form2.

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Form2.ShowModal; // ===> Something like that but the Code should continue, yet Form1 and all other forms are blocked (disabled) 
    MessageBox (0, 'Code continues', '', 0); 
end; 

Надеюсь, вы знаете, что я имею в виду.

+1

Можете ли вы написать свой код в 'Application.OnModalBegin'? –

+0

Как это сделать? –

+1

Вы присоединяете метод к свойству, возможно, в 'OnCreate' вашей основной формы. 'Application.OnModalBegin: = AppModalBegin', где' procedure AppModalBegin (Sender: TObject) 'находится в объявлении класса вашей формы, может быть, в частном разделе fi. В методе, который вы вызываете MessageBox:' TForm1.AppModalBegin begin MessageBox (.. ' –

ответ

9

Вы можете вызвать DisableTaskwindows, за исключением того, что ваше окно отключено, а позже EnableTaskWindows, чтобы снова включить другие формы.

Form3.Show; 
    FP:=DisableTaskwindows(Form3.Handle); 
    //Some Code 
    EnableTaskwindows(FP); 
+1

, который не делает новую форму Модальной, но –

+0

Это не имеет значения! Это именно то, что я искал, и это работает! Большое спасибо. Если вы хотите знать, зачем мне это нужно, я могу открыть «окно прогресса», пока обрабатывается фактический код. –

+5

@Benjamin. Это неправильное решение этой проблемы. Вы можете легко решить проблему с помощью модальной формы. Это отвечает на вопрос, который вы задали. –