![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| x_byte |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 27.1.2004 Репутация: нет Всего: 1 |
Нужно отследить нажатие СРЕДНЕЙ кнопки мыши по ссылке в webbrowser и на это событие открыть новое окно с переходом по этой ссылкой!
|
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
Напиши обработчик события.
WM_MBUTTONDBLCLK - ДВОЙНОЙ ЩЕЛЧОК СРЕДНЕЙ КНОПКОЙ МЫШИ В КЛИЕНТСКОЙ ЧАСТИ ОБЛАСТИ ОКНА WM_MBUTTONDOWN - НАЖАТИЕ СРЕДНЕЙ КНОПКОЙ МЫШИ В КЛИЕНТСКОЙ ЧАСТИ ОБЛАСТИ ОКНА WM_MBUTTONUP - ОТПУСКАНИЕ СРЕДНЕЙ КНОПКОЙ МЫШИ В КЛИЕНТСКОЙ ЧАСТИ ОБЛАСТИ ОКНА WM_NCMBUTTONDBLCLK - ДВОЙНОЙ ЩЕЛЧОК СРЕДНЕЙ КНОПКОЙ МЫШИ ВНЕ КЛИЕНТСКОЙ ЧАСТИ ОБЛАСТИ ОКНА WM_NCMBUTTONDOWN - НАЖАТИЕ СРЕДНЕЙ КНОПКОЙ МЫШИ ВНЕ КЛИЕНТСКОЙ ЧАСТИ ОБЛАСТИ ОКНА WM_NCMBUTTONUP - ОТПУСКАНИЕ СРЕДНЕЙ КНОПКОЙ МЫШИ В КЛИЕНТСКОЙ ЧАСТИ ОБЛАСТИ ОКНА Выбирай какое тебе нужно. -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| x_byte |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 27.1.2004 Репутация: нет Всего: 1 |
Albinos_x, а можно по подробнее, я начинающий!
....если не затруднит! |
|||
|
||||
| Vex |
|
||||||
![]() кацапосрачмученiкъ ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3103 Регистрация: 28.3.2002 Где: strawberry fields Репутация: 1 Всего: 88 |
В общем я думаю надо сделать так:
При WM_MBUTTONDOWN (нажатие средней кнопки), определять изменился ли статусбар в нашем браузере, если изменился, то открывать новое окно с браузером и пихать туда текст изменившейся строки состояния, перед этим надо ее проверить на содержание 'http://'. Тут есть две проблемы. 1. Есть товарищи, которые на своих страницах вручную меняют статус бар 2. Как отловить сообщение посланное именно контролу TWebBrowser? тут надо делать потомок от TWebBrowser и переопределять эту функцию, чтобы не вызывался "крестик" с прокруткой. Или, хоть убейте не знаю, можно ли отловить сообщение формой, но посланное ее потомку? (если да, то напишите кто-то плиз код) Проблема номер два. Ну не получается у меня вытянуть текст этой строки состояния, есть функция, преобразования WideStringToString, но вылетает run-time error, может я что-то не так делаю, с какими параметрами ее надо вызывать?
И еще: Почему этот код работает, хотя не должен, ИМХО.
Так кстати тоже работает, это наверное в TWebBrowser какой-то WideString спецефический
А еще, наверное, это можно сделать использовав Events TWebBrowser, но какие??? З.Ы. Профи, помогите, мне и самому интересно как это надо сделать по людски -------------------- Слава Україні. |
||||||
|
|||||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
Для поимки сообщения:
... private { Private declarations } procedure WMMouseSrButton(var ButtonMouse : WM_MBUTTONDOWN); message WM_MBUTTONDOWN; .... implementation ... procedure TForm1.WMMouseSrButton(var ButtonMouse : WM_MBUTTONDOWN); begin // здесь делаешь, то что тебе нужно end; ... Прости, дальше помочь не могу, с Браузером почти не работал и делфи под рукой нет, чтобы попробовать. -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| x_byte |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 27.1.2004 Репутация: нет Всего: 1 |
Albinos_x, выдаёт ошибку...мол WM_MBUTTONDOWN is not a type identifier...
Vex, если выдерать адрес ссылки из статус бара, то ни к чему хорошему это не приведёт...я уже через это прошёл! Несколько проблем ты осветил, но самую главную нет! Во время загрузги страницы статус бар отображает что-то типа "Открытие страницы http://.....", а кто из нас будет ждать полной загрузки, чтобы нажать на нужную нам ссылку? Да никто, а если выдирать ссылку из статус бара, то мы пойдём примяком на http://Открытие страницы http://... Значит этот вариант нам не подходит!
Есть такое событие в webbrowser как OnStatusTextChange:
|
||||
|
|||||
| Vex |
|
|||
![]() кацапосрачмученiкъ ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3103 Регистрация: 28.3.2002 Где: strawberry fields Репутация: 1 Всего: 88 |
Это будет работать только непосредственно на форме, при клике на браузере ничего не будет происходить. x_byte, можно еще отлавливать изменение указателя мыши -------------------- Слава Україні. |
|||
|
||||
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Чтобы отловить сообщение, подмени WinowProc:
Но чтобы всё это заработало, в OnCreate формы поставь такую строчку:
PS: хоть мышь у меня и пятикнопочная, но на данный момент средней нет. Так что проверял для правой кнопки (вместо WM_MBUTTONDOWN было WM_RBUTTONDOWN)... Это сообщение отредактировал(а) p0s0l - 9.7.2004, 15:38 -------------------- С уважением, г-н Посол. |
||||
|
|||||
| Vex |
|
|||
![]() кацапосрачмученiкъ ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3103 Регистрация: 28.3.2002 Где: strawberry fields Репутация: 1 Всего: 88 |
p0s0l, спасибо
З.Ы. 2p0s0l: Я наверное пропустил очень большой кусок материала по Делфи, не подскажешь, статью, где можно очень подробно прочитать о работе с сообщениями. -------------------- Слава Україні. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Vex, моя библия - это MSDN - там же в подробности описаны все сообщения, их параметры и назначение...
К сожалению, книг не знаю (не читал ниодной), так что лучше обращайся сюда, задавай вопрос (в отдельной теме - правила, сам понимаешь...), и я (и не только я, а все мы) с радостью тебе поможем в освоении Delphi! Это я тебе обещаю! -------------------- С уважением, г-н Посол. |
|||
|
||||
| x_byte |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 27.1.2004 Репутация: нет Всего: 1 |
p0s0l
Вот в этом месте возникает проблема...у меня в программе при создании нового окна создаётся каждый раз новое окно webbrowser...что тогда писать в FormCreate...я использую массив wb[1..1000] типа TWebBrowser...и при создании нового окна содаётся компонент wb[pc]...где pc:=pc+1; после каждого создания! |
||||
|
|||||
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Так... Тогда сложнее... У тебя, как я понял, изначально есть 1 браузер, а потом уже плодятся новые. Тогда на OnFormCreate поставь подмену WndProc этого первого браузера, а остальные будут так:
Тогда засунь эту строчку в место, где создаётся новый TWebBrowser. Будет типа:
Т.е. как видишь, вместо одного OldWebProc, стало несколько, причем в оконной функции надо еще узнать адрес старой оконной функции... Эх, если сразу вспомнить, что у тебя будет несколько окон, то написал бы другой вариант - написать свой класс с обработчиком сообщения:
В данном примере перехватывается правая кнопка мыши, при открытии нового окна в PageControl1 создаётся новая страница со своим браузером... Т.е. создавай не TWebBrowser, а TMyWebBrowser... Это сообщение отредактировал(а) p0s0l - 10.7.2004, 12:13 -------------------- С уважением, г-н Посол. |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |