4.2. Диалоги

Диалоги в проекте наследуются от базового класса 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;