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

Использование всплывающих подсказок HINTS

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

Использование всплывающих подсказок HINTS

Оформил: DeeCo

Aвтор: Serzs

  • 1.Отображение полных строк списка при перемещении мыши по списку
  • 2.Свои собственные hint-ы для генерации сообщений об ошибках от конкретных компонент на форме
1.Отображение полных строк списка при перемещении мыши по списку
Предположим, у нас есть список строк, причем все строки или некоторые не влазят по ширине. Пользоваться прокруткой не всегда удобно. Возможно использование другого варианта. Мышкой проводим по списку и, если строка не влазит по ширине, то появляется Hint, содержащий текущую строку целиком, причем прямо поверх самой строки! Идея подходит ? Тогда это можно реализовать, например, так ...
Текст формы примера :

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.

Автор: Сергей Королев

2.Свои собственные hint-ы для генерации сообщений об ошибках от конкретных компонент на форме.

Download Hint.zip

Файл Hint.pas содержит несколько функций, реализующих cоздание собственных "подсказок" типа Hint-ов. Использовать их очень удобно в качестве конкретного сообщения об ошибке с указанием какой именно компонент на форме и вызвал эту ошибку. Hint-ы выводятся белым на красном фоне и позиционируются возле указанного компонента

procedure ShowErrorHintEx(AControl: TWinControl; const Hint: string);
AControl - компонент, к которому "подвешивается" hint
  Hint - выводимый текст

Использование всплывающих подсказок HINTS: реализация отображения полных строк списка при перемещении мыши по списку и создания собственных hint-ов для генерации сообщений об ошибках от конкретных компонент на форме.


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

Получайте свежие новости и обновления по 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 13:24:14/0.005795955657959/1