Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

форум | следующая ветвь »

Хинт'ы [Delphi, Windows]


RusSun ©   (2010-03-04 17:44:00) 

Доброе время суток.
Вот такой код:

program Project1;

uses
 windows,
 kol;

{$R *.res}
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.

Вопрос: если будет добавлена вторая форма, то
посказки всё равно останутся на первой форме.
Можно сделать так чтобы подсказки появлялись над своими формами?


RusSun   (2010-03-05 13:51:00) [1]

2Barloggg Спасибо, просто думал может есть другой вариант.


Barloggg   (2010-03-05 11:33:00) [2]

ну, создай второй HintWnd.
а то у тебя он создается вот так:
> HintWnd:=CreateWindowEx(0,TOOLTIPS_CLASS,nil,0,CW_USEDEFAULT,
> CW_USEDEFAULT,CW_US EDEFAULT,CW_USEDEFAULT,form.GetWindowHandle,
> 0,HInstance,nil);

ну вот тут и видно, что он прикреплен к конкретной форме.
> form.GetWindowHandle


Наверх

Титульная страница Поиск, карта сайта Написать письмо