Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
1-48603
AlexPul
2003-09-03 13:02
2003.09.15
Кодировка в консольных приложениях


14-48760
Polevi
2003-08-26 15:52
2003.09.15
рисунки


3-48471
Nikkkkk
2003-08-22 17:48
2003.09.15
Опять вопрос по TQuery (и по синтаксису запросов)


3-48415
Алексей Петухов
2003-08-25 09:28
2003.09.15
Инсталяция BDE


6-48667
ws
2003-07-11 11:16
2003.09.15
Помогите с ошибками сокетов, плиз!