![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чем можно скрыть окно ToolTip?
Семен Кевларвестов © (2008-04-08 14:18:00)Доброго дня!
Есть всплывающее окошко. Отображающееся в событии TPopUpMenu.onPopUp , которое желательно бы скрывать после того как оно отобразилось, скажем при любой активности мыши (движение, нажатие кнопок). Чем это можно сделать в глобальном масштабе? (Конечно, можно на все компоненты в события onMouseMove раскидать команду на скрытие, но это не интересно.). Может есть какое то сообщение, коее можно отлавливать в форме или еще что-то в таком духе?
Семеныч (2008-04-09 02:51:00) [1]Проверил - да, как и предполагалось, при показанном меню Application.OnMessage на мышь не реагирует. Значит, остается локальный хук.
var
Hook: HHOOK;
Count: integer; // Счетчик сообщений мыши
function MouseHook(Code, WParam, LParam: integer): integer; stdcall;
begin
Inc(Count);
Form1.Caption := IntToStr(Count);
Result := CallNextHookEx(Hook, Code, WParam, LParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Hook := SetWindowsHookEx(WH_MOUSE, MouseHook, 0, GetCurrentThreadId);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(Hook);
end;
Как и ожидалсь, счетчик сообщений мыши увеличивается даже при показанном PopupMenu. Что и требовалось отловить.
Семен Кевларвестов (2008-04-09 01:34:00) [2]Тултип нужно отображать вместе с Попапменю. Т.к. в сообщени и тул типа дается объяснение почему те или иные команды недоступны. А при любом действии мыши желательно этот тултип скрыть. В самом TPopupMenu обработчиков для событий не нашел, в каждый пункт меню вставлять - относительно долго, да и негибко.
Поэтому и интересует может есть какая-то другая возможность как-то эти события отработать? На уровне формы или самого Тултипа. Может там как-то с флагами нужно поиграться при создании?
Устроила бы вомзмжность отработать событие OnMouseMove формы, при включенном PopUpMenu.
Семеныч (2008-04-08 16:42:00) [3]> Сабж
Можно попробовать Application.OnMessage, но не уверен. Из вопроса неясно, отображается ли TollTip, когда меню уже показано. Если да, то в это время сообщения мыши, насколько помню, получает само меню и Application.OnMessage может не сработать.
Но почему бы не показывать ToolTip в другом событии (например, в OnMouseUp правой кнопки), а в OnPopup, наоборот, скрывать?
> Kolan © (08.04.08 16:31) [3]
В обработчике OnPopup можно отбразить даже розового слона, было бы желание. В данном случае отображается ToolTip, что тоже не запрещено.
Семен Кевларвестов (2008-04-08 16:39:00) [4]Ну да, там определяется окончательный вид popup, что скрыто, что открыто, и относительно какого пункта меню отображается этот туллтип.
Kolan (2008-04-08 16:31:00) [5]> Чем можно скрыть окно ToolTip
> Отображающееся в событии TPopUpMenu.onPopUp
Я думал что при onPopUp отображается само меню.
Семен Кевларвестов (2008-04-08 16:19:00) [6]В конечном счете создается CreateWindow(
TOOLTIPS_CLASS,
'',
WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP,
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
0,
0,
HInstance,
nil);
clickmaker (2008-04-08 15:50:00) [7]
> Есть всплывающее окошко
какого класса?