Вот, что надыбал (извините за опечатки, т. к. голова не очень-то варит):
| Цитата | Hint в выпадающем списке ComboBox
В приктике программирования довольно часто встречаются читуации, когда информация, предназначенная для отображения в имеющемся компоненте, не помещается по длине. Обычно это имеет место при работе с базами данных. В таких случаях выручает всплывающие подсказки (свойство Hint). Но в некоторых случаях даже таккая возможность не спасает. К таким ситуациям можно отнести работу с выпадающим списком в DBComboBox.
Представьте, что размер поля увеличился, а изменить ширину DBComboBox на форме, по тем или иным причинам, нет возможности. Конечно, можно увеличить ширину выпадающего списка Но выглядит это не всегда красива, да и не делает чести разработчику.
В демонстрационном примере в выпадающем списке появляется вспоывающая подсказка для стрки, не помещающейся по длине.
При работе с Hint нужно помнить, что попытки использования ToolTip из API - бесполезная затея, т. к. Delphi их игнорирует. Для этих целей в Delphi предусмотрен класс THintWindow.
В своем компоненте объявите FHint:
| Код | type TVSComboBox = class (TCustomComboBox) ... private FHint: THintWindow; ... protected procedure WMCTLCOLORLISTBOX(var Message: TMessage); message WM_CTLCOLORLISTBOX; ...
|
и не забудьте выполнить инициализацию компонента в конструкторе:
| Код | ... begin inherited Create(AOwner); FHint:=THintWindow.Create(Self); ...
|
Чтобы получить информацию об активной строке в выпадающем списке ComboBox, перехватите сообщение WM_CTLCOLORLISTBOX. В процедуре сообщения проанализируйте строку и, если ее длина больше ширины выпадающего списка, передайте "длинную" строку в FHint и активизируйте его:
| Код | FHint.ActivateHint(TextRC, Items[ItemIndex]);
|
где TextRC - прямоугольник для строки подсказки; Items[ItemIndex] - "длинная" строка из списка.
Если активная строка в выпадающем списке "короткая - спрячьте FHint:
Для получения более подробной информации о классе THintWindow обратитесь к справке Delphi.
|
|