|
#1
|
||||
|
||||
Hint WinApi
Здравствуйте.
Проблема: Имеется "Static" в нижнем правом углу окна(он привязан к нему). Если навести курсор на Static, появляется подсказка. Все нормально. Но стоит изменить размер окна, следовательно положение Static'a меняется, то подсказка не появляется над Static'om , а остается на старом месте. Подскажите как исправить, как переместить на новую позицию? Код:
procedure AddTool(Wnd: HWND; Text: String; Center: Boolean); var ti: TOOLINFO; begin ZeroMemory(@ti, SizeOf(TOOLINFO)); ti.cbSize:=SizeOf(TOOLINFO); if Center then ti.uFlags:=TTF_SUBCLASS or TTF_CENTERTIP else ti.uFlags:= TTF_SUBCLASS; ti.hwnd:= Wnd; ti.lpszText:=PChar(Text); GetClientRect(Wnd, ti.Rect); SendMessage(FToolTip, TTM_ADDTOOL, 0, LPARAM(@ti)); end; В WM_Create Код:
FToolTip:=CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, nil, //TTS_BALLOON or WS_POPUP or TTS_NOPREFIX or TTS_ALWAYSTIP, 0, 0, 0, 0, 0, 0, HInstance, nil); AddTool(LBTime, 'бла-бла', False); Есть кто живой? Последний раз редактировалось Stalker2-42, 16.08.2015 в 15:15. |
#2
|
||||
|
||||
rect не нужен с TTF_IDISHWND
Код:
unit Unit1; interface uses CommCtrl, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormResize(Sender: TObject); private { Private declarations } public { Public declarations } hToolTip: THandle; hStatic: THandle; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var t: TToolInfo; begin hToolTip:=CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, nil, WS_POPUP or TTS_ALWAYSTIP, 0, 0, 0, 0, Handle, 0, HInstance, nil); hStatic:=CreateWindow('STATIC', 'CreateWindow', WS_CHILD or WS_VISIBLE or SS_NOTIFY, ClientWidth-100, ClientHeight-25, 100, 25, Handle, 0, HInstance, nil); ZeroMemory(@t, SizeOf(TToolInfo)); t.cbSize:=SizeOf(TToolInfo); t.uFlags:=TTF_IDISHWND or TTF_SUBCLASS; t.uId:=hStatic; t.lpszText:='CreateWindow'; SendMessage(hToolTip, TTM_ADDTOOL, 0, LPARAM(@t)); end; procedure TForm1.FormResize(Sender: TObject); begin SetWindowPos(hStatic, 0, ClientWidth-100, ClientHeight-25, 0, 0, SWP_NOSIZE or SWP_NOZORDER); end; end. 100% работает. Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Stalker2-42 (16.08.2015)
|
#3
|
||||
|
||||
В справке с флагами не разобрался. Спасибо. 100% работает.
|