Войти
Помощь

Закрытие формы в Delphi

Снитко Александр 22.11.2023

Сегодня хочу показать простой пример, как можно сделать так, чтобы при закрытии формы в 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 пишем такой код :

procedure TForm1.N1Click(Sender: TObject);
begin
 //halt; можно использовать только в исключительных ситуациях
Application.Terminate;
end;

 

А в обработчике события для формы Form1 On Close пишем такой код

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caNone; //не производить никаких действий
 Application.Minimize; //минимизировать окно
end;

 

Теперь можно скомпилировать программу(F9) и попробовать закрыть форму. 

В итоге в трее появится иконка, кликнув на которую у нас выскочит менюшка с надписью "Закрыть", которая через обработчик Application.Terminate вырубит нашу программу.

 

С процедурой Halt не все так гладко: Процедура Halt вынуждает резкое завершение текущего приложения. Предупреждение: не гарантируется, что ресурсы будут освобождены при вызове halt.

 

Потому нужно освобождать ресурсы или написать другой обработчик закрытия программы, что я и сделал - это Application.Terminate; ведь метод OnClose также вызывает Application.Terminate.

 

А вот если вы хотите просто "вырубить" крестик, чтобы нажатие на него ничего не делало - то тут нужно воспользоваться всего одной строчкой кодав обработчике события FormCloseQuery:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 CanClose := False;
end;


Добавить комментарий



Обновить

InsCalc PRO — калькулятор для расчета страховой премии
(Win32. Связь с БД. Мгновенный расчет страховых премий. Печать расчета.)


PRO Tourist — программное обеспечение для туристического страхования.
(Win32. Связь с БД. Мгновенный расчет страховой премии. Печать полиса. Аналитика. Система напоминаний.)