Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Вниз

Balloon Tooltip   Найти похожие ветки 

 
DmitryG.   (2008-11-27 23:25) [0]

При ошибочном вводе необходимо показать хинт.
Наваял класс для показа Balloon Tooltip. Сам хинт появляется, но появляется внизу Control"a. Может как нибудь можно указать, что бы он показывался всегда сверху?
Причем мне не нравится что для показа я его рисую на экране и он не привязан к самому контролу...


unit BalloonToolTip;

interface

uses Windows, Messages, Controls, Commctrl;

type
 TToolTipIcon = (tiNone, tiInformation, tiWarning, tiError);

 TBalloonToolTip = class
 private
   hToolTip      : THandle;
   ToolTipInfo   : TToolInfo;

   procedure SetVisible(const Value: boolean);

 public
   procedure CreateToolTip(  
         const Control : TWinControl; const Icon  : TToolTipIcon;
         const Title   : String; const Text : String;
         const AlwaysView : boolean = False);
   procedure DeleteToolTip;

   destructor Destroy; override;

   property Visible : boolean  write SetVisible;
   property Handle : THandle   read  hToolTip;
 end;

implementation

{ TBalloonToolTip }

procedure TBalloonToolTip.DeleteToolTip;
begin
 CloseWindow(hToolTip);
end;

destructor TBalloonToolTip.Destroy;
begin
 DeleteToolTip;
 inherited;
end;

procedure TBalloonToolTip.CreateToolTip(
   const Control   : TWinControl;
   const Icon        : TToolTipIcon;
   const Title, Text : String;
   const AlwaysView  : boolean);
var
 Rect    : TRect;
 p       : TPoint;
begin
 //Создаем окно
 hToolTip := CreateWindow("Tooltips_Class32", nil,
                           TTS_ALWAYSTIP or TTS_BALLOON,
                           0, 0, 0, 0, Control.Handle, 0, 0, nil
                         );
 if  (hToolTip = 0) or
     (Control.Handle = 0) or
     (not GetClientRect(Control.Handle, Rect)) then exit;
 //Устанавливаем параметры
 SetWindowPos(hToolTip, HWND_TOPMOST, 0, 0, 0, 0,
   SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE
 );

 ToolTipInfo.cbSize    := SizeOf(TToolInfo);
 ToolTipInfo.uFlags    := TTF_SUBCLASS;
 ToolTipInfo.hInst     := hInstance;
 ToolTipInfo.hwnd      := Control.Handle;
 ToolTipInfo.Rect      := Rect;
 ToolTipInfo.lpszText  := PAnsiChar(Text);

 if AlwaysView then
   ToolTipInfo.uFlags := ToolTipInfo.uFlags or TTF_TRACK;

 //Настраиваем окно
 SendMessage(hToolTip, TTM_ADDTOOL, 1, Integer(@ToolTipInfo));
 SendMessage(hToolTip, TTM_SETTITLEA,  Integer(Icon), Integer(PAnsiChar(Title)));

 p.X := Control.Width div 2;
 p.Y := 0;
 p := Control.ClientToScreen(p);
 SendMessage(hToolTip, TTM_TRACKPOSITION, 1, MAKELONG(p.x, p.y));

 Visible := AlwaysView;
end;

procedure TBalloonToolTip.SetVisible(const Value: boolean);
begin
 SendMessage(hToolTip, TTM_TRACKACTIVATE, integer(Value), Integer(@ToolTipInfo));
end;

end.


 
KilkennyCat ©   (2008-11-27 23:43) [1]


> Наваял класс для показа Balloon Tooltip.


ну тогда ты сам и ответить можешь.


 
DmitryG.   (2008-11-27 23:54) [2]

Оригинальный ответ :-)


 
DmitryG.   (2008-11-28 00:06) [3]

Просто если бы можно было обойтись как нибудь без TTM_TRACKPOSITION, а просто активировать добавленный хинт, то было бы замечательно, но первая мысль которая мне пришла в голову сделать ShowWindow(...) не прошла, теперь вот думаю покапать в сторону RelayWindow c последующей посылкой сообщения WM_MOUSEMOVE например (если я все правильно понял конечно). Поэтому был был благодарен, если бы кто подсказал может есть простой способ показать хинт...


 
KSergey ©   (2008-11-28 14:57) [4]

Шибко не вникал, но

>  //Устанавливаем параметры
>  SetWindowPos(hToolTip, HWND_TOPMOST, 0, 0, 0, 0,
>    SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE

> ToolTipInfo.Rect      := Rect;

почему нули и чего в Rect? Может тама прописать ту позицию, которая нужна?


 
DmitryG.   (2008-12-02 10:31) [5]

Нули, не на что не влияют...
А Rect получаем GetClientRect(Control.Handle, Rect)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.005 c
15-1255496803
И. Павел
2009-10-14 09:06
2009.12.13
Компоненты для смены скинов.


11-1208885318
=BuckLr=
2008-04-22 21:28
2009.12.13
LZO, чтоб его...


15-1255348813
Virgo_Style
2009-10-12 16:00
2009.12.13
ZoneAlarm Pro завтра (13-го) будут бесплатно раздавать


2-1256646632
maxerstats
2009-10-27 15:30
2009.12.13
Изменить цвет выделеных строк в listbox е без закразки их...


15-1255593046
картман
2009-10-15 11:50
2009.12.13
Букварь по теорверу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский