Текущий архив: 2003.09.15;
Скачать: CL | DM;
Вниз
Как заставить работать прокрутку колесом в TWebBroiwser... Найти похожие ветки
← →
lipskiy © (2003-08-30 21:40) [0]...не ставя в него мышью фокус ввода?
← →
lipskiy © (2003-09-01 18:23) [1]ОЧЕНЬ НАДА!!!!!
ПЛИИИИИИЗ!!!!!
← →
nikkie © (2003-09-01 19:16) [2]
with WebBrowser.DefaultInterface.Application as IOleObject do
DoVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser, 0, WebBrowser.Handle, WebBrowser.ClientRect);
← →
Song © (2003-09-01 20:51) [3]Кстати, [2] nikkie © (01.09.03 19:16), у тебя в клиенте скрол не работает без фокуса ввода.
Например, щелкаю по закладке (фокус на корешке), кручу колесо, скрола нет. Но как только щелкну в любое пустое место на страничке, после этого скрол появляется (фокус переключается).
← →
nikkie © (2003-09-01 20:59) [4]>Song
ок, учту...
← →
lipskiy © (2003-09-01 22:29) [5]
> nikkie © (01.09.03 19:16) [2]
Что-то не пойму.
Вставил твой код в OnNavyComplete, работать то работает, но выходит банальная автопередача фокуса браузеру, это можно и обычным SetFocus сделать. Мне это не годится. У меня TreeView, при клике на котором загружается новая страница в браузер, при этом фокус с TreeView не должен уходить, чтобы можно было навигировать по нему клавой, но прокрутка в браузере должна срабатывать БЕЗ наличия на нем фокуса.
Или я неверно использовал приведенный код? Куда его надо было вставить?
← →
nikkie © (2003-09-01 23:14) [6]>это можно и обычным SetFocus сделать
вот это я сомневаюсь.
>прокрутка в браузере должна срабатывать БЕЗ наличия на нем фокуса
ну извини, значит, я не на тот вопрос отвечал...
← →
lipskiy © (2003-09-01 23:19) [7]Да ничего, я сам неточно сформулировал.
В общем вопрос открыт -
Как заставить работать прокрутку колесом в TWebBroiwser без наличия фокуса ввода на нем?
← →
Е-Моё имя © (2003-09-02 09:55) [8]>>прокрутка в браузере должна срабатывать БЕЗ наличия на нем фокуса.
ты такое где-нить видел? я-нет
← →
nikkie © (2003-09-02 12:13) [9]>ты такое где-нить видел? я-нет
я тоже такого не видел, но если автору сильно хочется... перехватывать сообщение WM_MOUSEWHEEL, переадресовывать другому окну. к WebBrowser это, конечно, никакого отношения не имеет.
← →
int64 (2003-09-02 12:30) [10]Лови прокрутку колеса и перемащай документ так:
Doc:= WebBrowser1.Document as IHTMLDocument2;
Body:= Doc.Body as DispHTMLBody;
Body.doScroll("DOWN");// UP, PAGEDOWN, TOP, BUTTOM итд
← →
lipskiy © (2003-09-02 20:44) [11]
> ты такое где-нить видел? я-нет
Здрасте! Прокрутка же работает во всех окнах, стоит только над ней мышь поставить, причем даже если окно вообще чужое и неактивное, но область которую можно прокручивать видна на экране - то прокрутка там работает! Правда вот в IE у меня сейчас тоже без фокуса не крутит, но я считаю это багом или данной версии IE или винды или дров мыши, потому что раньше и в IE это всегда работало без фокуса.
> Лови прокрутку колеса и перемащай документ так:
Прокрутку я словил, но вот можно чуть подробнее? Типы Doc и Body? И чего еще объявит надо чтобы эти три строчки компилились?
← →
nikkie © (2003-09-02 22:05) [12]Здрасте! Прокрутка же работает во всех окнах, стоит только над ней мышь поставить, причем даже если окно вообще чужое и неактивное, но область которую можно прокручивать видна на экране - то прокрутка там работает!
Это может у тебя какой-нибудь необычный мышиный драйверочек так работает. Конечно драйвер может отловить окно под мышой GetWindowFromPoint и послать WM_MOUSEWHEEL туда, но MSDN говорит, что посылаться должно в окно с фокусом.
The WM_MOUSEWHEEL message is sent to the focus window when the mouse wheel is rotated.
> Лови прокрутку колеса и перемащай документ так:
Я бы все же попробовал просто послать перехваченное сообщение браузеру. Иначе нужно из wParam доставать zDelta - для того, чтобы знать насколько и в какую сторону крутить, а также fwKeys (посмотри сам, как работает колесо, когда нажат Shift или Ctrl).
← →
lipskiy © (2003-09-02 22:37) [13]
> Это может у тебя какой-нибудь необычный мышиный драйверочек
> так работает.
Ничего необычного - Genius Optical, драйвер в комплекте, самый распространенный. Вот сейчас снова попробовал - окно Outlook Express неактивно и находится под IE но частично вылезает, мышку подвел - крутится. Если активировать Outlook так чтобы IE стал неактивным и частично залез вниз, то перемещение мыши к нему и прокрутка колесом приводит к активации окна IE и прокрутке.
Так вот я хочу как в Outlooke Expresse - мышь подвел и без фокуса и даже активности прокрутка работает исправно. (без драйвера мыши это, ессно, не работает).
> Я бы все же попробовал просто послать перехваченное сообщение
> браузеру.
Примерчик мона? Я не очень силен в этом.
← →
nikkie © (2003-09-02 23:19) [14]У меня мышь Genius NetScroll+, драйвер от W2K, работает совсем по-другому. А твой "ничего необычного - самый распространенный" драйвер небось еще и в трее сидит. :))
>Примерчик мона? Я не очень силен в этом.
мона.
TMainForm = class(TForm)
...
procedure ApplicationMessage(var Msg: tagMSG; var Handled: Boolean);
...
end;
procedure TMainForm.ApplicationMessage(var Msg: tagMSG; var Handled: Boolean);
begin
if (Msg.message = WM_MOUSEWHEEL) then begin
Msg.hwnd :=
GetWindow(GetWindow(WebBrowser.Handle, GW_CHILD), GW_CHILD);
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
Application.OnMessage := ApplicationMessage;
end;
GetWindow вызывается два раза, чтобы получить в результате окно класса InternetExplorer_Server, тестировал с IE6, с другими версиями может быть по-другому. Может быть лучше написать цикл... А может более логично использовать WindowFromPoint.
У меня колесо работает по-другому - скролируется только окно, в котором стоит фокус, причем окно WebBrowser скроллируется, только если в нем стоит фокус и мышь находится над ним. Если хочется, чтобы окно WebBrowser скроллировалось и когда мышь находится за его пределами, то надо подкрутить координаты мыши, передаваемые в параметре lParam.
← →
lipskiy © (2003-09-03 00:20) [15]
> А твой "ничего необычного - самый распространенный" драйвер
> небось еще и в трее сидит. :))
Ну сидит, да. Все джениусы там сидят вроде :) Он еще и не просто сидит, а глазами шевелит за курсором мыши.
За пример спасибо, попробую.
Но вообще вы меня убедили, что без фокуса это не вполне нормально. Я тут поэкспериментировал и получилось передавать фокус браузеру автоматически только если на нем начали крутить колесом. Получилась неплохая альтернатива - если колесом не крутят, то фокус никуда не скачет, ну а уж если покрутили - то перешел на браузер. Не идеально, но вполне юзабельно.
← →
nikkie © (2003-09-03 00:35) [16]>Все джениусы там сидят вроде :)
мой джениус отлично работает со стандартным драйвером, который называется PS/2 Compatible Mouse. и никто глазами не шевелит :)
>Но вообще вы меня убедили, что без фокуса это не вполне нормально.
на самом деле я такой цели не имел. на самом деле мне даже кажется, что скроллирование именно того окна, над которым в данный момент находится курсор - это удобнее. но вот ведь какая штука - получается, что колесо ведет себя по разному в зависимости от драйвера. и вопрос, не приведет ли фича, от которой прется разработчик, к какой-нибудь неприятности у юзера только потому, что у юзера другая мышь/драйвер?
← →
lipskiy © (2003-09-03 09:02) [17]
> не приведет ли фича, от которой прется разработчик, к какой-нибудь
> неприятности у юзера только потому, что у юзера другая мышь/драйвер?
Вот вот, я как раз об этом тоже подумал, поэтому и решил, что лучше не рисковать.
Страницы: 1 вся ветка
Текущий архив: 2003.09.15;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.032 c