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

Устранение проблемы с модальным окном помощи в приложениях Delphi XE2

Delphi , Файловая система , Help файлы

Введение

В статье рассматривается проблема, связанная с использованием модальных окон помощи в приложениях, разработанных с использованием Delphi XE2. Проблема заключается в том, что окно помощи становится неактивным и не может быть закрыто, пока не будет закрыто модальное окно приложения.

Описание проблемы

При использовании Delphi XE2 и 64-битной версии Windows пользователь столкнулся с проблемой, когда после открытия файла помощи из основного окна приложения и последующего открытия модального окна, попытка вызвать контекстно-чувствительную помощь через F1 на модальном окне приводит к тому, что окно помощи открывается с правильной информацией, но закрыть его становится невозможным до тех пор, пока не будет закрыто модальное окно приложения. Также пользователь не может восстановить фокус окна помощи, пока модальное окно не закрыто.

Интересный момент: та же самая версия файла помощи, запущенная из старой версии приложения, созданной в Delphi 6, ведет себя ожидаемо и может быть закрыта без проблем.

Поиск решения

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

Подтвержденный ответ

Проблема связана с компонентом HtmlHelpViewer, который имеет серьезный дизайнерский недостаток. Использование собственной реализации обработчика для TApplication.OnHelp может помочь решить проблему. Пример кода:

class function THelpWindowManager.ApplicationHelp(Command: Word; Data: THelpEventData; var CallHelp: Boolean): Boolean;
begin
  CallHelp := False;
  Result := True;
  case Command of
  HELP_CONTEXT, HELP_CONTEXTPOPUP:
    HtmlHelp(GetDesktopWindow, Application.HelpFile, HH_HELP_CONTEXT, Data);
  end;
end;

Этот код следует поместить в класс и назначить его обработчиком TApplication.OnHelp при старте приложения.

Анализ проблемы HtmlHelpViewer

Компонент HtmlHelpViewer использует команду HH_INITIALIZE, которая настраивает HTML Help на выполнение в том же потоке, что и вызывающее приложение. Когда вызывается ShowModal, это вызывает DisableTaskWindows, который отключает окна в вызывающем потоке. Поскольку окно помощи было создано в основном потоке приложения из-за команды HH_INITIALIZE, оно становится отключенным.

Заключение

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

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

В статье рассматривается проблема с функционированием модального окна помощи в приложениях, созданных с использованием Delphi XE2, которая заключается в невозможности закрыть окно помощи до закрытия модального окна приложения.


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

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




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


:: Главная :: Help файлы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 15:41:27/0.0037879943847656/0