Показывать кнопку с вопросительным знаком справки (biHelp) в не диалоговой форме? - PullRequest
3 голосов
/ 08 февраля 2012

Есть ли способ сделать так, чтобы кнопка вопросительного знака справки была видна в форме, не являющейся диалогом в Delphi 2010?

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

Я смотрел на переопределение процедуры CreateParams, но я не уверен, какой код вставить в нее, чтобы заставить кнопку отображаться?

Пол

Ответы [ 2 ]

6 голосов
/ 08 февраля 2012

Согласно MSDN, это не специфичное для Delphi ограничение, а накладывается WinAPI.Как вы, возможно, знаете, вопросительный знак справки включается стилем WS_EX_CONTEXTHELP, который нельзя комбинировать со стилями WS_MAXIMIZEBOX и WS_MINIMIZEBOX.Таким образом, вы можете иметь не диалоговую форму и отображать знак вопроса, при условии, что форма не имеет кнопок максимизации и минимизации в заголовке.Если вам также нужны кнопки «Развернуть» и «Свернуть», то я думаю, что вы должны создать подкласс окна и предоставить настраиваемую неклиентскую краску (рисование знака вопроса самостоятельно) и неклиентную обработку теста на попадание.

0 голосов
/ 09 февраля 2012

Вам нужна кнопка справки в верхней (не захватывающей) области, не являющейся клиентом, немодального окна, которое появляется рядом с максимизировать и свернуть?

Используйте TJvCaptionButton (входит в JEDI VCL) в вашей форме, поместите растровое изображение вопросительного знака справки на кнопке управления и откройте справку для конкретной страницы из целочисленного контекста справки, например это:

Application.HelpContext(aHelpContext);

Поскольку он рисует в не-клиентской области окна, вы можете столкнуться со странным поведением в некоторых настройках темы Windows; Я не думаю, что Jedi JvCaptionButtons выглядят достаточно родными на Win7 с включенным Aero, например.

Обновление В связанном ниже вопросе в комментариях упоминается перевод формы в режим помощи, подобный этому, предоставленный DavidH:

  SendMessage(Handle, WM_SYSCOMMAND, SC_CONTEXTHELP, 0);

конец;

...