Если вы разрабатываете программу на Delphi и хотите, чтобы она запускалась с иконкой в системном трее (системный лоток), но без отображения основного окна, вам необходимо использовать другой перегрузок метода Application.Run. В данной статье мы рассмотрим, как это можно реализовать.
Проблема
Пользователь столкнулся с проблемой, что основное окно (MainForm) программы отображается сразу после запуска программы, несмотря на попытки скрыть его. Основной код, который приводит к этой проблеме, выглядит следующим образом:
lMainForm := new MainForm;
lMainForm.ShowInTaskbar := True;
Application.Run(lMainForm);
Как только выполняется Application.Run, основное окно отображается вместе с иконкой в системном трее.
Решение
Для решения этой проблемы необходимо использовать перегрузку метода Application.Run, которая не принимает параметры главного окна. Это позволит запустить программу без отображения основного окна. Вам нужно будет создать и установить уведомляющий значок (NotificationIcon) до вызова Application.Run. Также создайте, но не отображайте ваше основное окно.
lMainForm := new MainForm;
lMainForm.ShowInTaskbar := False; // Не нужно устанавливать в True, если вы не хотите видеть его в панели задач
lMainForm.Visible := False; // Скрыть основное окно
Application.Run; // Вызов без параметров, программа будет работать в фоне
Когда вы захотите показать основное окно, например, в ответ на действие по уведомляющему значку, вызовите lMainForm.Show. Обратите внимание, что при нажатии на кнопку закрытия окна, вам следует скрыть окно, а не закрывать его. Это позволит сохранить экземпляр основного окна скрытым в фоновом режиме.
Альтернативные подходы
Существуют и другие способы скрытия основного окна. Например, можно переопределить метод SetVisibleCore, чтобы подавить отображение окна:
protected override void SetVisibleCore(bool value) {
if (!this.IsHandleCreated) {
CreateHandle();
value = False;
}
base.SetVisibleCore(value);
}
Такой подход позволяет скрыть окно один раз, и вы можете показать его позже, вызвав Show или установив свойство Visible в true. Это обычно делается в обработчике события клика по элементу контекстного меню уведомляющего значка.
Заключение
Используя перегрузку метода Application.Run без параметров главного окна и правильно настроив основное окно и уведомляющий значок, вы можете запустить программу на Delphi, показывая только иконку в системном трее и скрывая основное окно до тех пор, пока это не будет необходимо.
Задача заключается в скрытии основного окна программы при её запуске с иконкой в системном трее в среде разработки Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS