Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Zoom в TWebBrowser (обработка мыши)


TechnoDreamer ©   (2010-06-17 02:28:00) 

Хочу сделать зум в TWebBrowser как в IE с использованием ctrl+, ctrl- и ctrl-скролл.
Про .OleObject.Document.Body.Style.Zoom знаю. Реализовать через меню или другие контролы легко, а вот как обработать именно с использованием клавы\мышки учитывая отсутсвие соответсвующих событий -  не знаю.


Anatoly Podgoretsky   (2010-06-18 10:21:00) [1]

У посторонних компонентов есть своя собственная поддержка, форумы, почему бы у авторов не спросить, а что это ваши компоненты не работают?


TechnoDreamer   (2010-06-18 02:02:00) [2]


> Просто тебе нужно всего лишь проверить, что мышь находится
> непосредственно
> над окном браузера, в котором отображена страница.


оки, так и сделаю.


TechnoDreamer   (2010-06-18 02:00:00) [3]

хм, действительно, хотя я отлавливаю только с нажатым ctrl, т.е. обычный скролл работает нормально (проверил).

P.S. После некоторых экпериментов выяснилось, что событие не вызывается только на котролах у которых есть свои события onMouseWheel, например у tcxDBTreeList.

А как то можно проверить, есть фокус у TWebBrowser или нет?


Германн   (2010-06-18 01:51:00) [4]


> В общем сделал через отлов сообщения WM_MOUSEWHEEL, надеюсь
> это правильное решение...

Не думаю, что оно по-настоящему грамотное. Ведь на форме может быть более одного контрола, который должен реагировать на колесо мыши.


Германн   (2010-06-18 01:48:00) [5]


> Ну типа activecontol<>nil

А причем тут ActiveControl? Я не придираюсь. Просто тебе нужно всего лишь проверить, что мышь находится непосредственно
над окном браузера, в котором отображена страница.
А фокус и ActiveControl имеют отношение только к клавиатуре.


TechnoDreamer   (2010-06-18 01:47:00) [6]

Сорри, оказывается на обычных контролах всё работает (только таких в проекте не присутсвует), видать событие каким-то образом перехватывают DevExpress'овские контролы.
В общем сделал через отлов сообщения WM_MOUSEWHEEL, надеюсь это правильное решение...


TechnoDreamer   (2010-06-18 01:42:00) [7]

Ну типа activecontol<>nil... короче когда фокус в каком-нибуть контроле, думаю вы поняли, не придирайтесь к словам :-)


Германн   (2010-06-18 01:33:00) [8]


> Тогда ламерский вопрос, как обрабатывать onMouseWheelDown
> когда фокус не на форме. У меня это событии вызавается только
> при старте программы, стоит кликнуть по любому контролу
> на форме и события больше не будет.

Это как это "фокус не на форме"?


TechnoDreamer   (2010-06-18 01:07:00) [9]

Тогда ламерский вопрос, как обрабатывать onMouseWheelDownкогда фокус не на форме. У меня это событии вызавается только при старте программы, стоит кликнуть по любому контролу на форме и события больше не будет.


Andy BitOff   (2010-06-17 10:21:00) [10]


> ArchAL   (17.06.10 10:15) [1]

Надо бы еще проверить, чтобы мышь находилась непосредственно над окном браузера, в котором отображена страница.


ArchAL   (2010-06-17 10:15:00) [11]

Всё довольно просто:
1. Создаёшь глобальную переменную, например  ZoomSize:real;
2. Обрабатываешь событие   onMouseWheelDown (либо Up) для формы.
3. Пишешь внутри код  
  if (ssCTRl in Shift) then
  begin
    ZoomSize:=ZoomSize-0.1;
    MainBrowser.OleObject.Document.Body.Style.Zoom:=ZoomSize;
  end;

Для Up  соответственно +0.1
4. Не забудь задать первоначальное значение для ZoomSizeравное 1


Наверх

Титульная страница Поиск, карта сайта Написать письмо