Вопрос о скрытии кнопки приложения в Taskbar является актуальным для разработчиков, использующих технологию FireMonkey в среде Delphi. В версиях XE2 и XE3 для этого использовался код, который изменял стиль окна на __WS_EX_TOOLWINDOW и тем самым скрывал кнопку приложения в панели задач. Однако, начиная с версии XE4, данный подход перестал работать.
Описание проблемы
В версии Delphi XE4, несмотря на попытки изменить стиль окна, кнопка приложения в Taskbar оставалась видимой. Это было воспринято как баг, поскольку ранее работающий код перестал выполнять свои функции.
Альтернативное решение
После исследования проблемы было найдено решение, которое заключается в следующем:
Необходимо получить родительский элемент основной формы приложения.
Скрыть приложение на панели задач, используя полученный родительский элемент.
Пример кода для скрытия приложения:
procedure HideAppOnTaskbar(AMainForm: TForm);
var
AppHandle: HWND;
begin
AppHandle := GetParent(FmxHandleToHWND(AMainForm.Handle));
ShowWindow(AppHandle, SW_HIDE);
SetWindowLong(AppHandle, GWL_EXSTYLE, GetWindowLong(AppHandle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
end;
И для показа приложения:
procedure ShowAppOnTaskbar(AMainForm: TForm);
var
AppHandle: HWND;
begin
AppHandle := GetParent(FmxHandleToHWND(AMainForm.Handle));
SetWindowLong(AppHandle, GWL_EXSTYLE, GetWindowLong(AppHandle, GWL_EXSTYLE) and (not WS_EX_TOOLWINDOW));
ShowWindow(AppHandle, SW_SHOW);
end;
В событии OnCreate основной формы можно вызвать процедуру HideAppOnTaskbar для скрытия кнопки приложения в Taskbar:
procedure TMyMainForm.FormCreate(Sender: TObject);
begin
HideAppOnTaskbar(self);
end;
Подтвержденное решение
В качестве подтвержденного решения было предложено использовать следующий код:
Этот код ищет окно с классом "TFMAppClass" и скрывает его, если оно принадлежит текущему процессу.
Важные замечания
В коде необходимо учитывать, что FindWindow может скрыть первое найденное окно с указанным классом, что может быть нежелательно, если запущено несколько приложений.
Для повышения безопасности и точности рекомендуется использовать EnumWindows() для перебора окон.
В более новых версиях Delphi (например, XE7) используется функция ApplicationHWND для получения дескриптора окна приложения.
Заключение
Используя предложенные методы, разработчики могут скрыть кнопку приложения в Taskbar для приложений, созданных с использованием FireMonkey в Delphi XE4. Важно отметить, что с обновлением версий Delphi могут появляться новые способы решения подобных задач, и рекомендуется следить за обновлениями и документацией.
Вопрос касается решения проблемы с скрытием кнопки приложения в панели задач (Taskbar) в среде разработки Delphi XE4, когда ранее работавший метод перестал быть эффективным из-за изменений в версии.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS