Создание собственного окна подсказки - PullRequest
5 голосов
/ 27 января 2011

Я пытаюсь найти способ использовать мою 2-ю форму в качестве окна подсказки для компонента (например, TLabel) в моей 1-й форме.

В данный момент я изучаю использованиеTHintWindow и HintWindowClass, но невозможно напрямую присвоить TForm HintWindowClass.Некоторые примеры, которые я видел до сих пор, используют TBitmap, который затем рисуется на THintWindow.Canvas, что неплохо, но я все же хотел бы использовать какой-то встроенный автоматический механизм.

ДругойРешение, которое пришло мне в голову, состоит в том, чтобы вручную реализовать эту функциональность, используя OnMouseEnter, OnMouseMove и OnMouseLeave события указанного Tlabel.

Если на самом деле есть способ «назначить» TForm дляHintWindowClass, я хотел бы спросить, может ли кто-нибудь предоставить фрагмент кода, иллюстрирующий это.Благодаря.

1 Ответ

12 голосов
/ 27 января 2011

THintWindow является потомком TCustomControl. TForm не является потомком ни одного из этих классов, поэтому вы не можете присвоить TForm класс HintWindowClass. Подсказка окна должна происходить от THintWindow. Все, что вы можете поместить в форму, вы также можете надеть THintWindow. Вам просто нужно создать его экземпляр вручную и назначить его свойство Parent, чтобы оно появилось.

Наиболее близким к визуальному проектированию окна подсказки, вероятно, является создание frame . Сделайте так, чтобы ваш потомок THintWindow создал экземпляр фрейма, а затем переопределил ActivateHintActivateHintData, если вам нужны данные), чтобы переслать текст подсказки и нужный размер в ваш фрейм.

...