Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.29;
Скачать: CL | DM;

Вниз

в TWebBrowser после открытия документа нужно иметь возможность ср   Найти похожие ветки 

 
Е-Моё имя ©   (2003-07-28 11:43) [0]

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


 
Vlad Oshin ©   (2003-07-28 11:54) [1]

ScrollBy


 
Vlad Oshin ©   (2003-07-28 11:58) [2]

обшибочка :) Послать надо сообщение, что-то типа WM_Scroll


 
Е-Моё имя ©   (2003-07-28 12:04) [3]

WM_VSCROLL что ли?
а где взять хэндл скроллбара браузера?


 
Е-Моё имя ©   (2003-07-28 14:08) [4]

неужто никто не сталкивался с такой задачей? ((((


 
nikkie ©   (2003-07-28 16:13) [5]

если я правильно понял проблему, то наверное фокус там не стоит


 
Е-Моё имя ©   (2003-07-28 17:06) [6]

совершенно ДА
если поставить туда фокус одноименным методом, браузер начинает обрабатывать нажатия клавы, а вот прокручивать колесом не дает все равно
только после клика в документе.


 
nikkie ©   (2003-07-28 17:58) [7]

У меня таких проблем с TWebBrowser не наблюдается. Попробуй сделать маленький тестовый проект, может это наведенный эффект. Какая у тебя версия IE?


 
Е-Моё имя ©   (2003-07-28 18:48) [8]

6-я версия
делаю загрузку из строки
HTMLDocument.Write(PSafeArray(TVarData(V).VArray));
кручу колесом в окне - эффекта нет
пока не ткнешь, не прокручиваецца


 
Е-Моё имя ©   (2003-07-28 19:00) [9]

делал тестовый проект - без разницы, после загрузки или со страницы, или вручную из строки - не ловит колесо(


 
nikkie ©   (2003-07-28 21:22) [10]

новый проект, на форме WebBrowser и Button.
procedure TForm1.Button1Click(Sender: TObject);
var
Doc: Variant;
begin
WebBrowser1.Navigate("about:blank");
WebBrowser1.SetFocus;
Doc := WebBrowser1.DefaultInterface.Document;
Doc.Write("abc<BR>abc<BR>abc<BR>abc<BR>abc<BR>abc<BR>abc<BR>abc<BR>abc<BR>abc<BR>abc<BR>");
end;

скролируется нормально. IE6.


 
Е-Моё имя ©   (2003-07-29 11:56) [11]

методом проб и ошибок выяснено:
при таком раскладе
WEBBROWSER1.Navigate("about:blank");
while WEBBROWSER1.ReadyState<>READYSTATE_COMPLETE do
( "about:blank") методом проб и ошибок выяснено:
при таком раскладе
WEBBROWSER1.Navigate("about:blank");
while WEBBROWSER1.ReadyState<>READYSTATE_COMPLETE do
Application.ProcessMessages;
WebBrowser1.SetFocus;
не работает

при таком
WEBBROWSER1.Navigate("about:blank");
WebBrowser1.SetFocus;
while WEBBROWSER1.ReadyState<>READYSTATE_COMPLETE do
Application.ProcessMessages;

работает как надо...

еще бы кто объяснил, почему ТАК?


 
nikkie ©   (2003-07-29 15:16) [12]

Раньше встречал подобный эффект, но не с WebBrowser, а когда непосредственно хостировался MSHTML-документ. Писалось это тогда на C++/ATL, осталось ощущение, что проблема состоит в отсутствии активации ActiveX документа. Такой эффект с WebBrowser увидел впервые, когда попробовал приведенный код. Причем перенос строчки WebBrowser1.SetFocus проблемы полностью не решает, поскольку после повторного вызова этого кода, ни стрелками, ни колесом текст не скроллируется.

Все решилось, когда заменил WebBrowser на EmbeddedWB ( http://www.euromind.com/iedelphi/ ) - у него есть метод SetFocusToDoc. Вот, собственно, и исходник этого метода, который и подтвержает мое ощущение про активацию.

procedure TEmbeddedWb.SetFocusToDoc;
begin
if Document <> nil then
with {$IFDEF VER120}Application_{$ELSE}Application{$ENDIF} as IOleobject do
( OLEIVERB_UIACTIVATE, nil, Self, 0, Handle, GetClientRect)
Раньше встречал подобный эффект, но не с WebBrowser, а когда непосредственно хостировался MSHTML-документ. Писалось это тогда на C++/ATL, осталось ощущение, что проблема состоит в отсутствии активации ActiveX документа. Такой эффект с WebBrowser увидел впервые, когда попробовал приведенный код. Причем перенос строчки WebBrowser1.SetFocus проблемы полностью не решает, поскольку после повторного вызова этого кода, ни стрелками, ни колесом текст не скроллируется.

Все решилось, когда заменил WebBrowser на EmbeddedWB ( http://www.euromind.com/iedelphi/ ) - у него есть метод SetFocusToDoc. Вот, собственно, и исходник этого метода, который и подтвержает мое ощущение про активацию.

procedure TEmbeddedWb.SetFocusToDoc;
begin
if Document <> nil then
with {$IFDEF VER120}Application_{$ELSE}Application{$ENDIF} as IOleobject do
DoVerb(OLEIVERB_UIACTIVATE, nil, Self, 0, Handle, GetClientRect);
end;


 
Е-Моё имя ©   (2003-07-29 15:39) [13]

>>проблемы полностью не решает
да, у меня это работало только в тестовом проекте

щас пытаюсь адаптировать этот код к своему приложению
о результатах сообщу)


 
Е-Моё имя ©   (2003-07-29 18:28) [14]

не получается адаптировать...
надо ставить EmbeddedWB...


 
Е-Моё имя ©   (2003-07-30 17:16) [15]

думал сделать не создавая наследника - так не получается
наследника сделал, добавил обработку - все нормально, Embedded пока можно не ставить ;)

спасибо за помощь!



Страницы: 1 вся ветка

Текущий архив: 2003.09.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
14-96419
ZeroDivide
2003-09-10 11:22
2003.09.29
Все. Бросаю курить. Прямо вот сейчас(11:22). Ни одной сигареты.


1-96168
scorpi
2003-09-16 12:54
2003.09.29
События объекта


3-96147
Agent_03
2003-09-08 11:59
2003.09.29
Как прописать в BDE Administrator путь к сетевой базе?


14-96441
SergeySEM
2003-09-10 11:25
2003.09.29
Please Help


1-96276
Сергей Непочатов
2003-09-15 10:38
2003.09.29
Найти открыт ли рабочий лист Excel