Содержание материала

 

Если подсказка длинная, то удобно ее разместить в две или более строк.

Code:

procedure TForm1.FormCreate(Sender: TObject);

begin

Button1.Hint := 'Only one string';

Button2.Hint := 'There will be' + #13#10 + 'two strings';

Form1.ShowHint := true;

end;

 

 

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

 

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

 

Необходимо создать соответствующую компоненту которая показывает "быструю подсказку" (Hints) с более чем одной
строкой. Компонента наследуется от TComponent и называется TMHint. Hint-текст можно задавать следующим образом:
"Строка 1@Строка 2@Строка 3". Символ '@' используется как разделитель строк. Если Вам нравится другой символ -
измените свойство Separator. Свойство Active указывает на активность (TRUE) или неактивность (FALSE)
"многострочности"


Code:

unit MHint;

{©Drkb }

 

interface

 

uses

SysUtils, WinTypes, WinProcs, Messages,

Classes, Graphics, Controls, Forms, Dialogs;

 

type

TMHint = class(TComponent)

private

   ScreenSize: Integer;

   FActive: Boolean;

   FSeparator: Char;

   FOnShowHint: TShowHintEvent;

protected

   procedure SetActive(Value: Boolean);

   procedure SetSeparator(Value: char);

   procedure NewHintInfo(var HintStr: string;

     var CanShow: Boolean;

     var HintInfo: THintInfo);

public

   constructor Create(AOwner: TComponent); override;

published

   property Active: Boolean

     read FActive write SetActive;

   property Separator: Char

     read FSeparator write SetSeparator;

end;

 

procedure Register;

 

implementation

 

constructor TMHint.Create(AOwner: TComponent);

 

begin

inherited Create(AOwner);

FActive := True;

FSeparator := '@';

Application.OnShowHint := NewHintInfo;

ScreenSize := GetSystemMetrics(SM_CYSCREEN);

end;

 

procedure TMHint.SetActive(Value: Boolean);

 

begin

FActive := Value;

end;

 

procedure TMHint.SetSeparator(Value: Char);

 

begin

FSeparator := Value;

end;

 

procedure TMHint.NewHintInfo(var HintStr: string;

var CanShow: Boolean;

var HintInfo: THintInfo);

 

var

I: Byte;

 

begin

if FActive then

   begin

     I := Pos(FSeparator, HintStr);

     while I > 0 do

       begin

         HintStr[I] := #13;

         I := Pos(FSeparator, HintStr);

       end;

     if HintInfo.HintPos.Y+10 > ScreenSize then

       HintInfo.HintPos.Y := ScreenSize-11;

   end;

end;

 

procedure Register;

 

begin

RegisterComponents('MyComponents', [TMHint]);

end;

 

end.

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить