Использование всплывающих подсказок 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 - выводимый текст
|