Конференция "KOL" » Два popup-окна
 
  • Друг (02.09.14 11:05) [0]
    Стандартная ситуация - есть Applet, и есть сколько угодно дочерних "Popup"(как говорится в документации) окон, переключение между которыми и взаимодействие между которыми происходит просто.

    У меня другая ситуация. У меня в качестве Applet-а обязано выступать главное окно. И в данном случае мне нужно показывать ещё одно окно, хотя бы как модальное. Для этого я пишу:
    LogWindow := NewForm(nil, 'Debug Log');
    ...
    LogWindow.Show;



    Однако при нажатии на X (закрыть) и дальнейшем вызове LogWindow.Show - окно не появляется. Кроме того Applet(он же MainForm) не ловит сообщения при нажатии на контролы.

    Если писать так, то происходит белиберда, все контролы LogWindow появляются внутри MainForm:
    LogWindow := NewForm(Applet{MainForm}, 'Debug Log');



    Как решить вопрос?
    Необходимость в Applet=MainForm вызвана хаком exe+dll:
    http://pda.delphimaster.net/?id=1409041856&n=10
  • Vladimir Kladov © (10.09.14 19:02) [1]
    См. ветку Уничтожение формы. Ответ практически тот же. В случае модальности достаточно выполнить
    FormN.Form.Close;
    FormN.Form.Free;
    FormN := nil;



    Немного сложно, но если понимать, что происходит, сложности исчезают.
    FormN.Form.Close; - счетчик RefCount уменьшается, окно закрывается (WM_CLOSE).
    FormN.Form.Free; - счетчик уменьшен до нуля, уничтожается объект формы (срабатывает OnDestroy).
    FormN := NIL; - имеет смысл делать для глобальных переменных, чтобы свой же код "знал", что объект уничтожен, и требует пересоздания. Для локальной переменной формы - по необходимости. В случае простого кода [Создал - Вызвал - Убил] - не требуется.
 
Конференция "KOL" » Два popup-окна
Есть новые Нет новых   [134427   +34][b:0][p:0.001]