![]() |
|
|
#1
|
||||
|
||||
|
Здравствуйте.
Проблема: Имеется "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% работает.
|