-
Доброе время суток. Вот такой код: program Project1;
uses
windows,
kol;
type TOnEvent = procedure( Sender: PObj )of object;
var
form,Button1,
editbox1,editbox2:PControl;
HintWND: HWND;
TI: TToolInfo;
Tips: array[0..3] of PChar = (
'Кнопка Открыть',
'ЭдитБох1',
'ЭдитБох2',
'');
procedure clickbutton1(Dummy:pointer;Sender:PControl; var mouse:TMouseEventData);
begin
showmessage('');
end;
procedure mousemove(Dummy:pointer;Sender: PControl; var Mouse: TMouseEventData );
begin
with TI do
begin
cbSize:=sizeof(TI);
uFlags:=TTF_SUBCLASS;
hWnd:=Sender.GetWindowHandle;
uID:=0;
Rect.Left:=Sender.ClientRect.Left;
Rect.Top:=Sender.ClientRect.Top;
Rect.Right:=Sender.ClientRect.Right;
Rect.Bottom:=Sender.ClientRect.Bottom;
hInst:=HInstance;
lpszText:=Tips[Sender.Tag];
form.StatusText[0]:=Tips[Sender.Tag];
end;
SendMessage(HintWnd,TTM_ADDTOOL,0,DWORD(@TI));
end;
procedure Destr(Dummy:pointer;Sender:PControl);
begin
DestroyWindow(HintWnd);
end;
Begin
form:=NewForm(Applet,'hint'+#39+'s '+#8470).SetSize(330,240).CenterOnParent;
form.StatusText[0]:=pchar('');
form.tag:=3;
Button1:=NewButton(form,'Кнопка').SetSize(120,50);
Button1.CenterOnParent; Button1.Tag:=0;
Button1.OnMouseMove:=TonMouse(MakeMethod(nil,@mousemove));
EditBox1:= NewEditBox(form,[]).SetPosition( 10, 34 ).SetSize( 60, 0 );
EditBox1.Color:=clWhite;
EditBox1.Text :=' 10.00 ';
editbox1.Tag:=1;
EditBox1.OnMouseMove:=TonMouse(MakeMethod(nil,@mousemove));
EditBox2:= NewEditBox(form,[]).SetPosition( 10, 58 ).SetSize( 60, 0 );
EditBox2.Color:=clWhite;
EditBox2.Text :=' 10.01 ';
editbox2.Tag:=2;
EditBox2.OnMouseMove:=TonMouse(MakeMethod(nil,@mousemove));
Button1.OnClick:=TonEvent(MakeMethod(nil,@clickbutton1));
HintWnd:=CreateWindowEx(0,TOOLTIPS_CLASS,nil,0,CW_USEDEFAULT,CW_USEDEFAULT,CW_US EDEFAULT,CW_USEDEFAULT,form.GetWindowHandle,0,HInstance,nil);
form.OnMouseMove:=TonMouse(MakeMethod(nil,@mousemove));
form.OnDestroy:=TonEvent(MakeMethod(nil,@Destr));
Run(form);
end.
Вопрос: если будет добавлена вторая форма, то посказки всё равно останутся на первой форме. Можно сделать так чтобы подсказки появлялись над своими формами?
-
ну, создай второй HintWnd. а то у тебя он создается вот так: > HintWnd:=CreateWindowEx(0,TOOLTIPS_CLASS,nil,0,CW_USEDEFAULT, > CW_USEDEFAULT,CW_US EDEFAULT,CW_USEDEFAULT,form.GetWindowHandle, > 0,HInstance,nil);
ну вот тут и видно, что он прикреплен к конкретной форме. > form.GetWindowHandle
-
2Barloggg Спасибо, просто думал может есть другой вариант.
|