Закрытие модальной формы
...я думаю проблема еще в том, что обработчик FormActivate вызывается как часть кода, выполняющегося при перемещении фокуса на новую форму, поэтому Delphi подавляет изменения фокуса во время работы данного обработчика. Если вы когда-нибудь пробовали трассировать изменения фокуса с помощью Windows API, то вы знаете, что изменение фокуса во време его смены приводит к его бесконечному зацикливанию в Windows!!!
Решение должно быть простым. Пошлите форме, которую вы хотите закрыть, в конце обработчика OnActivate сообщение WM_CLOSE. Это сработает, поскольку Windows поместит сообщение в очередь только после того, как будет выполнен обработчик OnActivate (и, следовательно, завершится процедура изменения фокуса).
Я испытывал это с простой программой: одна форма с кнопкой, которая активизурует диалог About, после чего он сам немедленно закрывается. Пример не очень полезен, но цель его - показать принцип.
Unit Form1;
.... (обычная чепуха ) ...
implementation
uses
procedure TForm1.Button1Click(Sender: TObject);
begin
Unit About;
.... (обычная чепуха ) ...
implementation
uses
procedure TAboutBox.FormActivate(Sender: TObject);
begin
Я надеюсь, это поможет. Если нет, извините.
postmessage(Button1.Handle, wm_mousedown,0,0);
postmessage(button1.Handle, wm_mouseup,0,0);
Функция возвращает idOK, поэтому вы всегда можете узнать, была ли нажата кнопка Отмены.