Вниз
Скачать: CL | DM;

Чем можно скрыть окно ToolTip?   Найти похожие ветки 

 
Семен Кевларвестов   (2008-04-08 14:18) [0]

Доброго дня!

Есть всплывающее окошко. Отображающееся в событии TPopUpMenu.onPopUp , которое желательно бы скрывать после того как оно отобразилось, скажем при любой активности мыши (движение, нажатие кнопок). Чем это можно сделать в глобальном масштабе? (Конечно, можно на все компоненты в события onMouseMove раскидать команду на скрытие, но это не интересно.). Может есть какое то сообщение, коее можно отлавливать в форме или еще что-то в таком духе?


 
clickmaker ©   (2008-04-08 15:50) [1]


> Есть всплывающее окошко

какого класса?


 
Семен Кевларвестов   (2008-04-08 16:19) [2]

В конечном счете создается 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);


 
Kolan ©   (2008-04-08 16:31) [3]

> Чем можно скрыть окно ToolTip


> Отображающееся в событии TPopUpMenu.onPopUp

Я думал что при onPopUp отображается само меню.


 
Семен Кевларвестов   (2008-04-08 16:39) [4]

Ну да, там определяется окончательный вид popup, что скрыто, что открыто, и относительно какого пункта меню отображается этот туллтип.


 
Семеныч   (2008-04-08 16:42) [5]

> Сабж

Можно попробовать Application.OnMessage, но не уверен. Из вопроса неясно, отображается ли TollTip, когда меню уже показано. Если да, то в это время сообщения мыши, насколько помню, получает само меню и Application.OnMessage может не сработать.

Но почему бы не показывать ToolTip в другом событии (например, в OnMouseUp правой кнопки), а в OnPopup, наоборот, скрывать?

> Kolan ©   (08.04.08 16:31) [3]

В обработчике OnPopup можно отбразить даже розового слона, было бы желание. В данном случае отображается ToolTip, что тоже не запрещено.


 
Семен Кевларвестов   (2008-04-09 01:34) [6]

Тултип нужно отображать вместе с Попапменю. Т.к. в  сообщени и тул типа дается объяснение почему те или иные команды недоступны. А при любом действии мыши желательно этот тултип скрыть. В самом TPopupMenu обработчиков для событий не нашел, в каждый пункт меню вставлять - относительно долго, да и негибко.

Поэтому и интересует может есть какая-то другая возможность как-то эти события отработать? На уровне формы или самого Тултипа. Может там как-то с флагами нужно поиграться при создании?

Устроила бы вомзмжность отработать событие OnMouseMove формы, при включенном PopUpMenu.


 
Семеныч   (2008-04-09 02:51) [7]

Проверил - да, как и предполагалось, при показанном меню 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. Что и требовалось отловить.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.008 c
2-1207419208
AndrewG
2008-04-05 22:13
2008.05.04
Копирование


2-1207536622
Andr
2008-04-07 06:50
2008.05.04
Компилятор требует не существующий .dcu


2-1207633373
F@T@L_Err0r
2008-04-08 09:42
2008.05.04
Копирование папки


2-1207644188
Ri2008
2008-04-08 12:43
2008.05.04
0x0004


10-1144210627
alk
2006-04-05 08:17
2008.05.04
Сохранение изменений на сервере




   Наверх