Статья: Сокрытие формы Windows из панели задач без использования WS_EX_TOOLWINDOW в Delphi
Вопрос о скрытии формы из панели задач является довольно распространенным среди разработчиков, работающих с Delphi. В частности, пользователи часто сталкиваются с необходимостью скрыть форму от пользователя, но при этом сохранить возможность минимизации и максимизации окна через системные кнопки. В данной статье будет рассмотрен способ решения этой задачи без использования стиля WS_EX_TOOLWINDOW, который позволяет убрать кнопку приложения в панели задач, но при этом сохраняет системное меню и кнопки для изменения размера окна.
Проблема
Разработчики, работающие с проектами на Delphi, сталкиваются с проблемой, когда необходимо скрыть форму из панели задач, но при этом не использовать стиль WS_EX_TOOLWINDOW, поскольку это приводит к сбоям в отображении скина формы. При этом важно сохранить возможность взаимодействия с системным меню и кнопками минимизации/максимизации окна.
Решение
Для решения данной проблемы можно использовать следующий подход:
Отключение отображения формы в панели задач с помощью функции ShowWindow.
Установка стиля окна, который исключает WS_EX_APPWINDOW, что также влияет на отображение в панели задач.
В случае использования COM-сервера необходимо установить родительское окно для скрытой формы.
Пример кода на Object Pascal для Delphi 2006:
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowWindow(Handle, SW_HIDE);
SetWindowLong(Handle, GWL_EXSTYLE,
GetWindowLong(Handle, GWL_EXSTYLE) and not WS_EX_APPWINDOW);
// Установить родительское окно, если необходимо
// SetWindowLong(Handle, GWL_HWNDPARENT, YourOwnerForm.Handle);
ShowWindow(Handle, SW_SHOW);
end;
Важно отметить, что если форма является дочерней для другого окна, то Windows может автоматически отобразить кнопку в панели задач. В таком случае, необходимо явно указать родительское окно в параметрах создания формы:
procedure TfrmWord2Site.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent := YourOwnerForm.Handle;
Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW;
end;
Также, начиная с Delphi XE (2010), можно использовать свойство Application.MainFormOnTaskbar, чтобы скрыть главную форму из панели задач:
program prog;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
begin
Application.Initialize;
Application.MainFormOnTaskbar := False;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
После этого, в событии OnShow формы Form1 можно скрыть форму, используя функцию ShowWindow:
procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Handle, SW_HIDE);
end;
Заключение
В данной статье был рассмотрен способ скрытия формы из панели задач в Delphi, не используя стиль WS_EX_TOOLWINDOW. Это позволяет сохранить функциональность системного меню и кнопок для изменения размера окна. Важно учитывать особенности проекта, в частности, наличие родительского окна, если форма является частью COM-сервера.
Приведенные примеры кода могут быть полезны для разработчиков, сталкивающихся с подобными задачами, и помогут им реализовать необходимую функциональность без потери в удобстве использования приложения конечными пользователями.
Статья описывает способы скрытия формы Windows из панели задач в программировании на Delphi без использования стиля `WS_EX_TOOLWINDOW`, сохраняя при этом возможности взаимодействия с системным меню и кнопками для минимизации и максимизации окна.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.