Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.08.2015, 14:08
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
Восклицание 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  
Старый 16.08.2015, 16:49
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

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  
Старый 16.08.2015, 17:15
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

В справке с флагами не разобрался. Спасибо. 100% работает.
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter