При движении по списку TListBox содержимое каждой строки
показывается с помощью Hint-а. Код поддерживает обработку
нескольких TListBox на форме.
{Вставляем в раздел private вашей формы:}
SaveHintHidePause: Integer;
SaveHintPause: Integer;
procedure ShowHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
{Вставляем где нибудь после implementation:}
procedure TForm1.ShowHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
var
ListRect, FormRect: TRect;
begin
with HintInfo do
begin
if HintControl.ClassType = TListBox then
// Проверяем находимся ли мы над ListBox'ом.
with HintControl as TListBox do
begin
if (ItemAtPos(CursorPos, true) <> -1) and
// Проверяем есть ли под курсором пункт ListBox'а.
(Canvas.TextWidth(items.Strings[ItemAtPos(CursorPos, true)]) >
// Проверяем помешается ли этот элемент в ListBox.
ItemRect(ItemAtPos(CursorPos, true)).Right - 2) then
begin
HintStr := items.Strings[ItemAtPos(CursorPos, true)];
// Устанавливаем текст hint'а в значение пункта, над которым находится курсор.
ListRect := ClientRect;
ListRect.Top := ListRect.Top + (ItemAtPos(CursorPos, true) - TopIndex) * ItemHeight;
ListRect.Bottom := ListRect.Top + ItemHeight;
CursorRect := ListRect;
GetWindowRect(Handle, FormRect);
// Определяем координаты текущей формы,
HintInfo.HintPos := Point(ListRect.Left + FormRect.Left + 1,
// чтобы задать координаты hint'а
ListRect.Top + FormRect.Top - 1);
// т.к. HintInfo.HintPos задаётся относительно экрана.
end;
end;
end;
end;
{В обработчике FormActivate формы прописываем:}
Application.OnShowHint := ShowHint;
// Переназначаем процедуру показа hint'ов.
SaveHintHidePause := Application.HintHidePause;
// Сохраняем значения HintHidePause и HintPause в специально добавленных
полях формы,
SaveHintPause := Application.HintPause;
// так Ваша форма не нарушит настроек параметров hint'а программы если они
отличаются от стандартных.
Application.HintHidePause := 5000;
Application.HintPause := 300;
{В обработчике FormDeactivate формы прописываем:}
Application.HintHidePause := SaveHintHidePause;
// Восстанавливаем начальные значения.
Application.HintPause := SaveHintPause;
Во всех ListBox'ах, в которых необходимо отображать
подсказки, устанавливаем свойство ShowHint в True.
Источник: www.delphikingdom.ru
|