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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Alexie D.
Сообщения: 13
Зарегистрирован: 01 апр 2005, 12:12

Хай!

Вообщем хочу сделать полность свой хинт, на данный момент ни чего лучше чем создать форму и ее показывать не придумал, но вот проблема в том что бы ее (форму) во время убирать и показывать может кто знает как или все таки есть компонент который может заменить хинт, но нужно чтобы, там я мог показать картинку свою......
Лелик_1044
Сообщения: 340
Зарегистрирован: 22 ноя 2004, 19:15
Откуда: Минск
Контактная информация:

Что ты хочешь от хинта?

Многострочный, скашеный, какой-то формы?
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

У класса 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;
С уважением, Lost Angel...
Alexie D.
Сообщения: 13
Зарегистрирован: 01 апр 2005, 12:12

LAngel, С П А С И Б О!!! то что нужно!
Ответить