Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как выводить hint при движении мыши над списком

Delphi , Синтаксис , Hint подсказки

Как выводить hint при движении мыши над списком

В Windows, в частности в Delphi, используются Hint для полного отображения не умещающихся строк. Достаточно к такой строке поднести мышь, и всплывает подсказка с полным текстом на том же месте. Как это реализовать показано ниже.

Code:

...
public
HintRow: Integer;
HintString: String;
procedure OnShowHint(var HintStr: string;
   var CanShow: Boolean; var HintInfo: THintInfo);
...
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.HintPause := 100;
Application.HintHidePause := 30000;
 
ListBox1.Items.Add('It is a long row');
ListBox1.Items.Add('It is a very long row');
ListBox1.Items.Add('And it is a very very long row');
 
ListBox1.Items.Add('But this row if longer then other rows');
ListBox1.Items.Add('It was not truth, because this row is so long, that I do not know, what' + #13#10 +
   'will do the program with this row. Do You know it? I think that it will be' + #13#10 +
   'very interesting to look at this row. But if it will be longer and longer,' + #13#10 +
   'what will be? Look!!!');
ListBox1.Items.Add('Short row');
ListBox1.Items.Add('123');
 
HintRow := -1;
Application.OnShowHint := OnShowHint;
 
ListBox1.ShowHint := true;
end;
 
procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
ItemNum: Integer;
begin
ItemNum := ListBox1.ItemAtPos(Point(X, Y), True);
if (ItemNum <> HintRow) then begin
   HintRow := ItemNum;
   Application.CancelHint;
   if HintRow > -1 then begin
     HintString := ListBox1.Items[ItemNum];
     if (ListBox1.Canvas.TextWidth(HintString) <= ListBox1.ClientWidth)
 
       then HintString := '';
   end else HintString := '';
end;
end;
 
procedure TForm1.OnShowHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
begin
if not (HintInfo.HintControl is TListBox) then Exit;
with HintInfo.HintControl as TListBox do begin
   HintInfo.HintPos := ListBox1.ClientToScreen(Point(-1,
 
     ListBox1.ItemRect(HintRow).Top - 3));
   HintStr := HintString;
end;
end;

Автор советов: Даниил Карапетян

e-mail: delphi4all@narod.ru

Автор справки: Алексей Денисов

e-mail: aleksey@sch103.krasnoyarsk.su

Код демонстрирует, как отображать подсказку (tooltip) в Delphi при наведении мыши на элемент списка с текстом, который превышает длину отображаемого текста в списке. Подсказка будет отображать полный текст элемента, а не только его обрезанный вариант.

Обзор кода:

  1. В обработчике события FormCreate устанавливаются свойства Application.HintPause и Application.HintHidePause, чтобы контролировать задержку между отображением и скрытием подсказок.
  2. Элементы списка добавляются с различными длинами для демонстрации необходимости подсказок.
  3. В переменной HintRow хранится текущий наведенный элемент.
  4. В обработчике события OnShowHint устанавливается строка подсказки в полный текст текущего наведенного элемента. Если ширина текста превышает клиентскую ширину списка, вместо этого отображается пустая строка.

В обработчике события ListBox1MouseMove:

  1. Получается номер элемента по позиции мыши с помощью метода ListBox1.ItemAtPos.
  2. Если текущий наведенный элемент изменился, обновляется переменная HintRow.
  3. Устанавливается строка подсказки в полный текст нового элемента или пустая строка, если ширина текста превышает клиентскую ширину списка.

Обработчик события OnShowHint настраивает позицию и строку подсказки для отображения:

  1. Проверяется, является ли контроллер подсказки списком (в этом случае - ListBox1).
  2. Позиция подсказки устанавливается в верхнем-левом углу прямоугольника наведенного элемента, смещенной на 3 пикселя для избежания покрытия текста элемента.
  3. Строка подсказки устанавливается в полный текст наведенного элемента.

В целом, этот код предоставляет основное реализацию отображения подсказок в Delphi при наведении мыши на элементы списка с текстами, превышающими длину отображаемого текста. Он обрабатывает случаи, когда ширина текста превышает клиентскую ширину списка, и adjusts позицию подсказки соответственно.

В статье описывается, как выводить hint-информацию при движении мыши над списком в программе на языке Delphi для Windows.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Hint подсказки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:06:09/0.0056171417236328/1