Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как устранить проблему с контекстным меню и названием кнопки приложения в Delphi XE4 на Windows XP и Server 2003

Delphi , Рабочий стол , TaskBar

В последнее время я обновился до версии XE4 и начал поиск изменений и "фиксов", представленных в версии XE3. Одно из изменений, которое меня удивило, заключается в том, что контекстное меню кнопки на панели задач больше не появляется. Это легко воспроизвести: достаточно создать новый проект FireMonkey в XE4 и запустить его на Windows XP. Если выполнить правый клик по кнопке приложения на панели задач, контекстное меню с пунктами "Закрыть", "Восстановить", "Свернуть" и т.д. не появится. Проблема касается только Windows XP и Server 2003, в то время как в Windows 7 контекстное меню отображается корректно.

Кроме того, название кнопки приложения теперь не соответствует ожидаемому. Оно должно отображать название основной формы "Form 1", но вместо этого отображается "Project1" - название исполняемого файла. Это происходит во всех версиях Windows.

Причина проблемы

Проблема связана с изменением структуры окон приложений в Delphi XE4. В предыдущих версиях окно основной формы размещалось на панели задач и имело соответствующее название и контекстное меню. В XE4 приложение создает новое окно с классом "TFMAppClass" и использует его в качестве главного окна приложения, которое размещается на панели задач. Окно основной формы является его "соседом". Это приводит к тому, что невозможно установить название кнопки на панели задач, отсутствует контекстное меню, приложение не реагирует на клики по кнопке и не скрывается, когда основная форма скрыта.

Решение проблемы

Чтобы решить проблему, необходимо скрыть окно приложения с панели задач и показать окно основной формы. Это нужно сделать один раз, но поскольку стиль окна приложения сбрасывается каждый раз при минимизации/восстановлении, окно вновь появляется на панели задач.

Для скрытия окна приложения используйте функцию ShowWindow(AppWindowHandle, SW_HIDE). Чтобы показать окно основной формы на панели задач, необходимо установить расширенный стиль окна WS_EX_APPWINDOW с помощью функции SetWindowLong() и вызвать ShowWindow каждый раз, когда приложение показывается, восстанавливается и т.д., а также привести его в фокус.

Эти действия выполняются с помощью хука, который перехватывает сообщения WM_CREATE, WM_SHOWWINDOW и WM_ACTIVATE и применяет стили при их получении. Код для удобства использования размещен в одном модуле, и хук устанавливается в разделе инициализации.

unit FM3TaskbarFix;

interface

implementation

{$IFDEF MSWINDOWS}
uses
  Winapi.Messages, Winapi.Windows, System.Sysutils, Fmx.Forms, Fmx.Platform.Win;

var
  GHookHandle: HHOOK;      // Handle для установленного хука
  GAppWnd    : HWND = 0;   // Handle главного окна приложения

function CallWndProc(nCode: Integer; iWParam: WPARAM; iLParam: LPARAM): LRESULT; stdcall;
var
  ActiveThreadID, WindowThreadID: DWORD;
  ProcMsg: TCWPStruct;
begin
  Result := CallNextHookEx(GHookHandle, nCode, iWParam, iLParam);
  // ... (код хука)
end;

initialization
  GHookHandle := SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, 0, GetCurrentThreadID);

finalization
  UnhookWindowsHookEx(GHookHandle);
{$ENDIF}

end.

Этот код основан на двух примерах из интернета. Авторы этих примеров не указаны, но им выражается благодарность за идею.

Остаточная проблема

Существует одна нерешенная проблема: при первом минимизации приложения кнопка окна приложения временно появляется на панели задач, вместо кнопки формы. После восстановления или повторного минимизации этого больше не происходит.

Вывод

Проблема с контекстным меню и названием кнопки приложения в Delphi XE4 на Windows XP и Server 2003 связана с изменением структуры окон приложений. Представленный выше код позволяет скрыть окно приложения и показать окно основной формы на панели задач, тем самым устраняя проблему.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с проблемой в Delphi XE4, связанной с отсутствием контекстного меню и неправильным отображением названия кнопки приложения на панели задач в Windows XP и Server 2003, и ищет способ её решения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TaskBar ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:00:30/0.0033860206604004/0