• Авторизация


Delphi [Msg on THintWindow] 18-11-2007 17:30 к комментариям - к полной версии - понравилось!


Добрый день!
Подскажите пожалуйста. Как перехватывать сообщения, посланные классу THintWindow.

Он просто никак не реагирует на перехватчик.
Мой (нерабочий) код:

TMsgHint = class(THintWindow)
private
procedure WMNCMOUSEMOVE(var message: TMessage); message WM_NCMOUSEMOVE;
end;

...

Procedure TMsgHint.WMNCMOUSEMOVE(var message: TMessage);
begin
Beep; //По идее, должно пикать когда мышь над хинтом. Ан нет..
end;
вверх^ к полной версии понравилось! в evernote
Комментарии (22):
livemask2 18-11-2007-20:34 удалить
?

Так всё-таки можно прехватить хинтовые сообщения?
Пример можно? =)
Нет_я 18-11-2007-20:38 удалить
Livemask, помница мы создавали собственные объекты на программировании. делали свои процедуры, веселились над стандартными компонентами... но это было так давно...
TLС v.0.7.31c
livemask2 18-11-2007-20:44 удалить
Нет_я, А я вобще нигде не учился. Всё самостоятельно из учебников.
Если я не ошибаюсь, override - перекрывает всякие там родительские методы.
А что мне перекрыть в моём случае?
livemask2 18-11-2007-20:45 удалить
Нет_я, а с хинтами вы баловались? Это, ведь, особый класс.
Нет_я 18-11-2007-20:46 удалить

Livemask, давай меряться письками- я тоже учился из учебников, а они были еще больше учебнее чем твои учебники!



TMsgHint.WMNCMOUSEMOVE я думаю это перекрывать


TLС v.0.7.31c
Нет_я 18-11-2007-20:47 удалить
Livemask: Нет_я, а с хинтами вы баловались? Это, ведь, особый класс.


какая разница, любой класс можно перекрывать


TLС v.0.7.31c
livemask2 18-11-2007-20:49 удалить
Исходное сообщение Нет_я:
Livemask, давай меряться письками- я тоже учился из учебников, а они были еще больше учебнее чем твои учебники!
TMsgHint.WMNCMOUSEMOVE я думаю это перекрывать
TLС v.0.7.31c

Письками? Ну если письками, то давай =)))
Нет_я 18-11-2007-20:50 удалить
Livemask, мою можешь найти в моем фотоальбоме
TLС v.0.7.31c
livemask2 18-11-2007-20:56 удалить
Исходное сообщение Нет_я:
TMsgHint.WMNCMOUSEMOVE я думаю это перекрывать

Эту процедуру я сам создал в попытке перехватить сообщение WM_NCMOUSEMOVE. Как я её перекрою-то?
livemask2 18-11-2007-20:57 удалить
Исходное сообщение Нет_я:
Livemask, мою можешь найти в моем фотоальбоме
TLС v.0.7.31c

Бугага!! =))
livemask2 18-11-2007-20:58 удалить
Может сообщение не правильное?
livemask2 18-11-2007-21:02 удалить
Ну блин..
Попробовал WMMOUSEMOVE - тоже не получается.
Нет_я 18-11-2007-21:08 удалить

Livemask, посмотри на сырцы класса. найди нужную процедурку и перекрой её.


если говорю бред - извини. под вечер мозг не работает и делфы под рукой нет.


TMsgHint.WMNCMOUSEMOVE


это событие при наведении на всплывающую подсказку "бла-бла"? например: label1.hint='блабла'


TLС v.0.7.31c
Нет_я 18-11-2007-21:17 удалить

Livemask,


TMsgHint = class(THintWindow)

private

procedure WMNCMOUSEMOVE(var message: TMessage); Override; message WM_NCMOUSEMOVE;

end;



Procedure TMsgHint.WMNCMOUSEMOVE(var message: TMessage);

begin

Beep; //По идее, должно пикать когда мышь над хинтом. Ан нет..

end;


TLС v.0.7.31c
livemask2 19-11-2007-00:01 удалить
хм.. сейчас попробую =)
livemask2 19-11-2007-00:06 удалить
Нет. В родительском классе нет такого метода, чтобы его перекрыть.
По-моему нужно перекрывать WndProc и там уже разбирать сообщения. Верно?
Да, точно..
А таким способом - никак не получится.
Нет_я 19-11-2007-00:15 удалить

Livemask, мой девиз был таков:


нет в этом классе - ищи в предке


никогда не подводил))


Эхх... погрузился я в эти web-технологии и совсем забыл прекрасный Дельфи. Насыпал мне соль на рану. Теперь ставить буду...палюбому


TLС v.0.7.31c
borisiq 19-11-2007-02:12 удалить
Если внимательно посмотреть исходники THintWindow, то можно увидеть, что она передаёт все сообщения мыши лежащиму под ней окну. Т.е. при обработке сообщения WM_NCHITTEST возвращается константа HTTRANSPARENT - говорит о том, что сообщения от движеня мыши и нажатия её кнопок будут передаваться нижележащиму окну.
code:

procedure THintWindow.WMNCHitTest(var Message: TWMNCHitTest);
begin
Message.Result := HTTRANSPARENT;
end;


Если мне не изменяет мой склероз и MSDN.
livemask2 19-11-2007-02:15 удалить
borisiq, а у меня нет низлежащего окна. У меня получается родитель - само приложение (TApplication).
Мне нужно перехватывать сообщения приложения?
borisiq 19-11-2007-02:23 удалить
Исходное сообщение Livemask
borisiq, а у меня нет низлежащего окна. У меня получается родитель - само приложение (TApplication).
Мне нужно перехватывать сообщения приложения?

Я же не знаю что ты там пишешь.
Можно попробовать создать обычную форму и вызывать поверх неё хинт. Перехватывать сообщения мыши этой формы и смотреть, будут ли ей передаваться сообщения когда мышь ползает по хинту.
livemask2 19-11-2007-02:47 удалить
borisiq, спасибо! Вроде бы получилось=))


Комментарии (22): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Delphi [Msg on THintWindow] | community_coding - Сообщество программистов | Лента друзей community_coding / Полная версия Добавить в друзья Страницы: раньше»