Диалоги в проекте наследуются от базового класса TRootDialog
, который содержит панель с диалоговыми кнопками TssButtonPanel
и основной виртуальный метод DoFinish
для выполнения действия при закрытии диалога. В отличие от диалоговых окон, реализованных в VCL
, диалоги в проекте Tillypad Manager не забирают управление основным потоком на время существования диалога. Это позволяет реализовать локальную модальность и другие более гибкие алгоритмы в проектировании. Поэтому создание диалога привычным способом не даст ожидаемого результата:
with TRootDialog.Create(Self) do try if ShowModal(nil, nil) = mrOK then DoSomething; finally Free; end;
Вызов метода ShowModal
не захватит управление потоком и форма сразу уничтожится, не успев появиться на экране. Уничтожать форму по месту создания не нужно, она сделает это сама при закрытии. А в метод ShowModal
можно передать процедуру OnCloseModal
и форму AStopBlockForm
. Процедура OnCloseModal
исполнится при закрытии формы. Также действие по закрытию диалога можно реализовать перекрытием виртуального метода DoFinish
. В параметр AStopBlockForm
передаётся блокируемая форма. Например:
TRootDialog.Create(Self).ShowModal(DialogCallBack, Self); ... procedure TMyForm. DialogCallBack(Sender: TssForm; ModalResult: Integer); begin if ModalResult = mrOk then DoSomething; end;