Закрытие формы в Delphi |
Сегодня хочу показать простой пример, как можно сделать так, чтобы при закрытии формы в Delphi форма сворачивалась в трей и в диспетчер задач. Такой функцией обладает множество программ (TheBat, MS Outlook, RunIt, ICQ, Skype и другие) и нужны они в основном для того, чтобы спрятать программу в трей, без надобности её полностью выключать и в целях экономии пространства на панели задач. Так вот создадим новый проект в Delphi 7 Lite и на форму бросим компоненты: TrayIcon(вкладка Newly Extented - есть только в Delphi 7 lite and Delphi 2007 ~) и PopUpMenu(Standart).
Свойства TrayIcon1 - в Icon выбираем иконку, Visible - true, PopupMenu - PopupMenu1. Свойства PopupMenu1 - двойной щелчек на компоненте PopupMenu1 и нажимая Insert добавляем новое меню с Cption "Закрыть". Далее - двойной клик на нашем меню "Закрыть" и в обработчике события N1Click пишем такой код :
А в обработчике события для формы Form1 On Close пишем такой код
Теперь можно скомпилировать программу(F9) и попробовать закрыть форму. В итоге в трее появится иконка, кликнув на которую у нас выскочит менюшка с надписью "Закрыть", которая через обработчик Application.Terminate вырубит нашу программу.
С процедурой Halt не все так гладко: Процедура Halt вынуждает резкое завершение текущего приложения. Предупреждение: не гарантируется, что ресурсы будут освобождены при вызове halt.
Потому нужно освобождать ресурсы или написать другой обработчик закрытия программы, что я и сделал - это Application.Terminate; ведь метод OnClose также вызывает Application.Terminate.
А вот если вы хотите просто "вырубить" крестик, чтобы нажатие на него ничего не делало - то тут нужно воспользоваться всего одной строчкой кодав обработчике события FormCloseQuery: |