Как да накарате превъртането на колелото да работи в TWebBroiwser

. без да поставя фокуса на мишката върху него?

с WebBrowser.DefaultInterface.Application като IOleObject направете DoVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser, 0, WebBrowser.Handle, WebBrowser.ClientRect);

>това може да се направи с обичайния SetFocusСъмнявам се.

>Превъртането в браузъра трябва да работи БЕЗ фокус върху негоЕ, съжалявам, затова отговорих на грешния въпрос.

Не, не го изразих точно. Като цяло въпросът е отворен -Как да накарам колелцето да работи в TWebBroiwser, без да има фокус върху входа?

>>Превъртането в браузъра трябва да работи БЕЗ фокусиране върху него. Виждали ли сте това някъде? аз не

Хванете скролера и преместете документа по следния начин:

Doc:= WebBrowser1.Document като IHTMLDocument2; Тяло:= Doc.Body като DispHTMLBody; Body.doScroll("DOWN");// НАГОРЕ, СТРАНИЦА НАДОЛУ, ОТГОРЕ, ОТДЪЛ и т.н.

> виждал ли си това някъде I-noЗдравейте! Превъртането работи във всички прозорци, просто трябва да поставите мишката върху него и дори ако прозорецът е напълно чужд и неактивен, но областта, която може да се превърта, се вижда на екрана, тогава превъртането работи там! Вярно, че в IE също не се върти без фокус сега, но го смятам за грешка или в тази версия на IE или Windows или дърва за мишка, защото по-рано в IE винаги работеше без фокус.

> Хванете колелото за превъртане и преместете документа по следния начин:Хванах свитъка, но можете ли да ми кажете малко повече? Типове документи и тяло? И какво още трябва да декларирате, за да се компилират тези три реда?

Здравейте! Превъртането работи във всички прозорци, просто трябва да поставите мишката върху него и дори ако прозорецът е напълно чужд и неактивен, но областта, която може да се превърта, се вижда на екрана, тогава превъртането е тамработи!Възможно е някакъв необичаен драйвер за мишка да работи за вас. Разбира се, драйверът може да хване прозореца под мишката GetWindowFromPoint и да изпрати WM_MOUSEWHEEL там, но MSDN казва, че трябва да бъде изпратен до прозореца с фокус.Съобщението WM_MOUSEWHEEL се изпраща към прозореца за фокусиране, когато колелцето на мишката се завърти.

> Хванете колелото и преместете документа по следния начин:Все пак бих опитал просто да изпратя прихванатото съобщение до браузъра. Иначе трябва да вземеш zDelta от wParam - за да знаеш колко и в коя посока да въртиш, както и fwKeys (виж сам как работи колелото при натискане на Shift или Ctrl).

> Може би имате необичаен драйвер за мишка > така става.Нищо необичайно - Genius Optical, включен драйвер, най-често срещаният. Сега пробвах пак - прозореца на Outlook Express е неактивен и е под IE, но частично изпълзява, пусна мишката - върти се. Ако активирате Outlook, така че IE да стане неактивен и частично да пълзи надолу, тогава преместването на мишката до него и превъртането с колелцето кара прозореца на IE да се активира и превърта.

И така искам като в Outlooke Expresse - мишката пусната надолу и без фокус и дори скролиране на активността си работи правилно. (без драйвер на мишката това, разбира се, не работи).

> Все пак бих опитал просто да изпратя прихванатото съобщение > браузър.

Мона пример? Не съм много добър в това.

Имам мишка Genius NetScroll+, драйвер от W2K, работи съвсем различно. И вашият "нищо необичайно - най-често срещаният" драйвер вероятно също седи в тавата. :))

>Пример за Мона? Не съм много добър в това. Мона. TMainForm = class(TForm) . procedure ApplicationMessage(var Msg: tagMSG; varОбработено: Boolean); . край;

procedure TMainForm.ApplicationMessage(var Msg: tagMSG; var Handled: Boolean); започнете if (Msg.message = WM_MOUSEWHEEL) след това започнете Msg.hwnd := GetWindow(GetWindow(WebBrowser.Handle, GW_CHILD), GW_CHILD); край; край;

процедура TMainForm.FormCreate(Подател: TObject); започнете Application.OnMessage := ApplicationMessage; край;

GetWindow се извиква два пъти, за да получи прозорец от класа InternetExplorer_Server като резултат, тестван с IE6, може да е различен с други версии. Може би е по-добре да напишете цикъл. Или може би е по-логично да използвате WindowFromPoint.

Моето колело работи по различен начин - само прозорецът, който има фокус, се превърта, а прозорецът на WebBrowser се превърта само ако имафокус и мишката е върху него. Ако искате прозорецът на WebBrowser да се превърта дори когато мишката е извън него, тогава трябва да промените координатите на мишката, предадени в параметъра lParam.

> И вашият "нищо необичайно - най-често срещаният" драйвер > вероятно все още седи в тавата. :))Седи, да. Всички гении седят там като :) Той също не просто седи, а движи очите си зад курсора на мишката.

Благодаря за примера, ще го пробвам.

Но като цяло ме убедихте, че без фокус това не е съвсем нормално. Експериментирах тук и се оказа, че прехвърля фокуса към браузъра автоматично само ако започнат да въртят колелото върху него. Оказа се добра алтернатива - ако колелото не се върти, фокусът не скача никъде, но ако се завърти, тогава се превключва на браузъра. Не идеален, но доста използваем.

>Всички гении седят там като :) моят гений работи добре със стандартния драйвер, наречен PS/2 съвместима мишка. и ничии очидвижи се :)

> Но като цяло ме убедихте, че без фокус това не е съвсем нормално. Всъщност нямах такава цел. всъщност дори ми се струва, че превъртането точно на прозореца, над който в момента се намира курсора, е по-удобно. но ето нещо - оказва се, че колелото се държи различно в зависимост от водача. и въпросът е дали функцията, от която разработчикът бърза, ще доведе до някакъв проблем за потребителя само защото потребителят има различна мишка/драйвер?

> Ще доведе ли функцията, към която разработчикът бърза, до някои > дали потребителят има проблеми само защото има различна мишка/драйвер?Ето и аз се замислих и реших, че е по-добре да не рискувам.