Страница 1 из 1

Полностью свой Hint

Добавлено: 01 июн 2005, 09:09
Alexie D.
Хай!

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

Добавлено: 01 июн 2005, 11:38
Лелик_1044
Что ты хочешь от хинта?

Многострочный, скашеный, какой-то формы?

Добавлено: 01 июн 2005, 11:57
LAngel
У класса TApplication есть событие OnShowHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo), которое можно обрабатывать. Если в HintInfo поменять свойство HintWindowClass, то будет создаваться не стандартный THintWindow, а любой другой. Конечно, целесообразнее делать класс наследник THintWindow.
Например:

Код: Выделить всё

type
...
  TMyHintWindow = class(THintWindow)
  protected
    procedure Paint; Override;
  public
    procedure ActivateHint(Rect: TRect; const AHint: string); override;
  end;
...
implementation
procedure TMyHintWindow.ActivateHint(Rect: TRect; const AHint: string);
begin
  Canvas.Font.Color := Screen.HintFont.Color;
  Rect.Right := Rect.Left + Canvas.TextWidth(AHint);
  if Canvas.TextWidth(AHint) < Application.Icon.Width
  then Rect.Right := Rect.Left + Application.Icon.Width
  else Rect.Right := Rect.Left + Canvas.TextWidth(AHint);
  Rect.Bottom := Rect.Top + Canvas.TextHeight(AHint) + Application.Icon.Height;
  inherited;
end;
procedure  TMyHintWindow.Paint;
begin
  inherited;
  Canvas.Draw((ClientRect.Right-ClientRect.Left-Application.Icon.Width) div 2,
              (ClientRect.Bottom-Application.Icon.Height), Application.Icon);
end;
Ну и не забыть про OnShowHint:

Код: Выделить всё

type
  TForm1 = class(TForm)
...
    procedure ApplicationHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo);
    procedure FormCreate(Sender: TObject);
...
procedure TForm1.ApplicationHint(var HintStr: String;
  var CanShow: Boolean; var HintInfo: THintInfo);
begin
  HintInfo.HintWindowClass := TMyHintWindow;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnShowHint := ApplicationHint;
end;

Добавлено: 02 июн 2005, 05:25
Alexie D.
LAngel, С П А С И Б О!!! то что нужно!