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

Отображение полных строк списка при перемещении мыши по списку

Delphi , Компоненты и Классы , Списки

Отображение полных строк списка при перемещении мыши по списку

Автор: Serzs

Внимание! Вы изменили положение мыши. Для того, чтобы изменения вступили в силу, необходимо перезагрузить компьютер.

Текст формы примера:


object MainForm: TMainForm
Left = 7
Top = 121
Width = 200
Height = 157
Hint = '34534535'
Caption = 'Long hints'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.name = 'MS Sans Serif'
Font.Style = []
ShowHint = True
OnCreate = FormCreate
PixelsPerInch = 120
TextHeight = 16
object ListBox1: TListBox
Left = 12
Top = 12
Width = 165
Height = 97
Hint = '1|2'
ItemHeight = 16
Items.Strings = (
'1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'A1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'1234567890'
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'ABCD')
ParentShowHint = False
ShowHint = True
TabOrder = 0
OnMouseMove = ListBox1MouseMove
end
end

Текст модуля:


unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TMainForm = class(TForm)
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
  private
    { Private declarations }
    FHintRow : Integer; // Номер строки в списке, на которую указывает мышь
  public
    { Public declarations }
    // Обработчик подсказок
    procedure OnShowHint(var HintStr: string; var CanShow: Boolean;
    var HintInfo: THintInfo);
end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.FormCreate(Sender: TObject);
begin
  FHintRow := -1;
  Application.OnShowHint := OnShowHint; // Установка обработчика
end;

procedure TMainForm.OnShowHint(var HintStr: string; var CanShow: Boolean;
var HintInfo: THintInfo);
var
  Pos: TPoint;
begin
  with HintInfo do
    // Проверка на нужный объект
    if HintControl is TListBox then
      with HintControl as TListBox do
      begin
        Pos.X := 0;
        Pos.Y := ListBox1.Tag;
        HintPos := ListBox1.ClientToScreen(Pos);
        HintStr := ListBox1.Hint;
      end;
end;

procedure TMainForm.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
  MousePos : TPoint;
  ItemPos : TRect;
  RowWidth,
  ItemNum : Integer;
  FHint : string;
begin
  MousePos.X := X;
  MousePos.Y := Y;
  // Определение номера строки в списке
  ItemNum := ListBox1.ItemAtPos(MousePos, True);

  // Проверка на перемещение мыши на другую строку
  if (ItemNum <> FHintRow) then
  begin
    FHintRow := ItemNum;
    // Проверка на наличие элементов в списке
    if ItemNum <> -1 then
    begin
      ItemPos := ListBox1.ItemRect(ItemNum);

      Application.CancelHint; // Снять текущую подсказку
      ListBox1.Tag := ItemPos.Top; // Запоминаем позицию строки по вертикали

      FHint := ListBox1.Items[ItemNum];

      // Проверка на ширину строки
      RowWidth := ListBox1.Canvas.TextWidth( FHint );
      if (RowWidth > ListBox1.ClientWidth) then
        FHint := FHint + '|'
      else
        FHint := '';

      ListBox1.Hint := FHint;
    end
    else
    begin
      ListBox1.Hint := '';
      Application.CancelHint;
      ListBox1.Tag := -1;
    end;
  end
end;

end.

Текст проекта:


program PrjHint;

uses
  Forms,
  Main in 'Main.pas' {MainForm};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);

  Application.ShowHint := True;
  Application.HintPause := 100;
  Application.HintHidePause := 999999;

  Application.Run;
end.

Это проект Delphi, который отображает полный текст каждого элемента в списке, когда мышка перемещается над ним. Проект состоит из основной формы с списком и модуля, содержащего реализацию.

Вот подробное описание того, что код делает:

  1. В основной форме есть два процедуры: FormCreate и ListBox1MouseMove. FormCreate вызывается при создании формы и настраивает некоторые начальные значения для строки подсказки.
  2. ListBox1MouseMove вызывается каждый раз, когда мышка перемещается над списком. Она рассчитывает номер строки элемента, над которым находится мышка, и если он отличается от предыдущего номера строки, обновляет текст подсказки, чтобы отображать полный текст новой строки.
  3. Текст подсказки обновляется вызовом Application.CancelHint для отмены любых существующих подсказок, установкой свойства тега списка на верхнюю позицию новой строки и обновлением текста подсказки самой.

Модуль содержит типовое объявление основной формы, а также процедуры для обработки создания и перемещения мыши над списком. Процедура OnShowHint вызывается каждый раз, когда нужна подсказка, и проверяет, является ли контроль, который спровоцировал подсказку, списком, и если да, обновляет текст подсказки соответственно.

Проект также содержит некоторые дополнительные настройки для приложения, такие как настройка свойства "Показать подсказку" на true и указание времени паузы между подсказками.

В целом, этот код обеспечивает способ отображения полного текста каждого элемента в списке, когда мышка перемещается над ним, что может быть полезно для предоставления дополнительной информации о каждом элементе.

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


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

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




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


:: Главная :: Списки ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-10-08 18:33:47/0.0040390491485596/0