Как показать подсказки в стиле Vista в Delphi? - PullRequest
8 голосов
/ 18 ноября 2008

При проверке ввода я использую всплывающие подсказки вместо окон сообщений. Моя проблема в том, что в Vista они имеют старый стиль XP с закругленными углами, а не более новый, более прямоугольный вид.

Я пытался создать их с помощью CreateWindowEx и tooltips_class32 или показывать связанную всплывающую подсказку Edit с использованием SendMessageW и EM_SHOWBALLOONTIP, результат тот же. То же самое в Visual Studio и C # приводит к всплывающей подсказке в стиле Vista.

Вы можете увидеть пример подсказки, которая мне нужна, когда вы переключаете Caps Lock во время редактирования пароля, как та, что при входе в Windows.

Ответы [ 3 ]

16 голосов
/ 18 ноября 2008

Если вы используете Delphi 2009, то добавить подсказки достаточно просто, хотя документация скудная. (сюрприз, сюрприз)

  • Оставьте TBalloonHint на форме
  • При необходимости добавьте TImageList, содержащий значки.
  • Свяжите TIMageList с TBalloonHint
  • Установите для свойства CustomHint формы значение TBalloonHint
  • Убедитесь, что ShowHint и ParentCustomHint установлены в true для ваших элементов управления.

Этот следующий бит очень неочевиден :

  • Отформатируйте свойство «Подсказка» вашего элемента управления как «Заголовок | Подсказка | ImageIndex»

Вы сделали. Это не на 100% похоже на Vista, возможно, из-за выбора шрифта. Но это довольно близко.

Delphi 2009
(источник: codegear.com ) ,

3 голосов
/ 18 ноября 2008

Как можно прочитать в Руководство для обозревателей Delphi 2009 каждый компонент VCL теперь имеет свойство CustomHint. Может быть установлено для любого потомка TCustomHint.

Обязательно включите подсказки с шарами в Vista, иначе они не будут отображаться.

2 голосов
/ 18 ноября 2008

TCustomHint в Delphi 2009 имеет четыре защищенные перегрузки ShowHint, которые при вызове позволяют размещать TCustomHint по требованию и в определенных местах:

procedure ShowHint; overload;
procedure ShowHint(Point: TPoint); overload;
procedure ShowHint(Rect: TRect); overload;
procedure ShowHint(Control: TControl); overload;

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

Примечание. Измените свойство Title в TCustomHint, чтобы изменить отображаемый текст, если только вы не используете ShowHint, который принимает TControl в качестве аргумента. В этом случае он получает его из свойства Hint элемента управления (и помещает его в свойство Title в TCustomHint).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...