Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Вниз100% узнать что окно TWebBrowser загрузилось Найти похожие ветки
← →
WebSqlNeederr (2007-12-02 18:07) [0]Как 100% узнать что ВСЕ в окне ТВебБровзер загружено? В том числе и ифреймы, которые могут быть внутри страницы.
Раньше я делал вот так в обработчике события OnDownloadComplete
var one:bool;
begin
one:=false;
if one=true then ВСЕ ЗАГРУЖЕНО
ELSE
one:=true;
end;
Но в последнее время случаются в моей программе некоторые глюки, которые заставляют сомневаться в правельности работы данного кода.
Может кто то подскажет как верно? Кто то сталкивался с аналогичным вопросом?
← →
Сергей М. © (2007-12-03 16:25) [1]
> one:=false;
> if one=true then ВСЕ ЗАГРУЖЕНО
Конгениально !
Сам-то ты понял, что ты тут понаписал ?)
← →
MetalFan © (2007-12-04 14:14) [2]простите))) но в ОРЕШНИК!
← →
WebSQLNeederr (2007-12-04 23:24) [3]Удалено модератором
Примечание: Уважаем правила
← →
@!!ex © (2007-12-04 23:32) [4]> [3] WebSQLNeederr (04.12.07 23:24)
Был бы я модер - забанил бы. :(
Сам то понял что написал в [0]?
Если приводишь код сокращенный, то сокращай правильно!!
← →
homm © (2007-12-04 23:38) [5]> [3] WebSQLNeederr (04.12.07 23:24)
> МЛЯ, УМНИКИ!!!!!
У, быстро метелку в руки и подъезды подметать.
← →
sniknik © (2007-12-05 00:30) [6]> Я ведь не отшары это написал.
конечно не "отшары", а от большого ума... со знаком минус.
> Экспериментально опытным путем ДОКАЗАНО
тобой доказано? так это, судя по приведенному коду, совсем не доказательство...
> Но в последнее время случаются в моей программе некоторые глюки, которые заставляют сомневаться в правельности работы данного кода.
только в последнее время... и долго до тебя "доходило"?
код не рабочий изначально
прокомментируй каждую строчку, что, и зачем ты делаешь
> var one:bool;
> begin
> one:=false;
> if one=true then ВСЕ ЗАГРУЖЕНО
> ELSE
> one:=true;
> end;
сам поймешь. возможно. может быть. ну хотя бы половину.
> Если приводишь код сокращенный, то сокращай правильно!!
ни в коем случае! никаких сокращений!
можно упростить программу, типа смоделировать глюк в минимуме кода, но сюда ложить как есть, из программы или модели (и обсуждать тогда модель), но не сокращать выкладывая сюда...
по моему очевидно, чтобы грамотно сократить, выделив место с глюком, надо как минимум представлять где и от чего этот глюк происходит, а раз знает тогда зачем спрашивать? а если не знает то только "as is".
или вот так и получается не код, а кучка неупорядоченных операторов (так еще потом и все вокруг ламеры раз не поняли его "гениального"...).
← →
Германн © (2007-12-05 01:42) [7]
> WebSQLNeederr
Удвоенная "Р" в конце ника звучит очень впечатляюще!
Всё остальное - не заслуживает внимания даже модераторов. Увы Орешник давно не функционирует. :(
← →
@!!ex © (2007-12-05 08:14) [8]> можно упростить программу, типа смоделировать глюк в минимуме
> кода, но сюда ложить как есть, из программы или модели (и
> обсуждать тогда модель), но не сокращать выкладывая сюда...
Тут не могу согласиться.
Вырезать из кода всякий мусор, оставив только значащюю часть, частое явление, и обычно не мещающее найти баг.
Хотя конкретно в данном случае лучше бы все выложил.
← →
sniknik © (2007-12-05 08:57) [9]> оставив только значащюю часть
и какая же часть будет значащая? если, мы условились, автор не знает где и в чем заключается ошибка (тем более ошибка логики). как он ее оставит, именно значащую?
> частое явление
что и удручает.
> и обычно не мещающее найти баг.
ага, после сотни постов, уточняющих вопросов, порожденного этим флуда, и то если автор соизволит таки выдать недостающее в коде и другую сопутствующую информацию, если ктото догадается что написанное означает вовсе не это а ..., и если раздражение отвечающих не заставит их к тому времени бросить ветку, или ее не отправят в потрепаться, т.к. основной вопрос уже никого не интересует, все обсуждают автора, а он огрызается на непонятные ему попытки ему же помочь (когда кошку носом в ее же дерьмо тычут, она тоже не всегда понимает... а что тогда вы хотите от "начинающих" (читай ламеров)? а по другому при такой постановке вопроса/реакции на ответы (типа [3]) и нет желания помогать).
> Тут не могу согласиться.
не согласен? ну вот и попробуй дотянуть ветку до положительного результата, и именно сдесь.
а то двойственность какаято у тебя в суждениях, в общем не согласен, в частностях которые эту общность составляют согласен... типа из анекдота про военных "косинус угла может быть больше 5! не не в этом конкретном случае, тут по задаче >1 к неправильному результату приведет, а вообще может. а для следующей задачи опять не может, но вообще...."
← →
Плохиш © (2007-12-05 09:54) [10]
> Вырезать из кода всякий мусор, оставив только значащюю часть,
> частое явление, и обычно не мещающее найти баг.
Особенно, когда "баг" находиться во "всякий мусор" :-))
← →
@!!ex © (2007-12-05 10:03) [11]> [9] sniknik © (05.12.07 08:57)
Объхясняю, зачем вырезать мусор:var one:bool;
begin
one:=false;
if one=true then begin
Button1.Caption:="1";
Button1.Caption:="2";
Button1.Caption:="3";
Button1.Caption:="4";
Button1.Caption:="5";
Button1.Caption:="6";
end
ELSE
one:=true;
end;
Вот какую пользу даст в данном случае когд присвоения кэпшенов? Никакую. Это происходит уже ПОСЛЕ того, как свершилось/не совершилось действие, о котором сабж. Ну и почему это не вырезать?
Значительно проще разбирать сорсы, где это вырезано, и код будет в 10 строк, вместо 50.
← →
@!!ex © (2007-12-05 10:03) [12]В конкретно данном случае ничего вырезать не надо, т.к. лично я сомневаюсь в способностях автора сделать это корректно.
← →
clickmaker © (2007-12-05 10:41) [13]OnDocumentComplete
← →
sniknik © (2007-12-05 11:01) [14]> Вот какую пользу даст в данном случае когд присвоения кэпшенов? Никакую.
да ну? мы же условились, что автор не знает в чем/где ошибка. почему ты думаешь, что вырезая присвоения он не вырезает и ее? а если вопрос "у меня AV, что делать?", и код с вырезанными присвоениями, только условие (причем тоже в данном случае неправильное), в котором его не может быть в принципе.
к тому же AV, это уже информация по которой чтото можно судить, обычно ограничиваются безликим "не работает/не пашет/не катит/..."
и что вообще тогда можно посоветовать?
> В конкретно данном случае ничего вырезать не надо
вот как раз в конкретном случае приведено достаточно чтобы судить что условие неверное, будет там дополнительный код, который типа неправильно работает или нет...
другое дело, т.к. код явно резанный, то есть сомнения в его достоверности, вообще, т.е. мы по сути обсуждаем не код, а набор операторов данных в случайном порядке (как их здесь составила мысль автора не прогнозируемо...) т.е. обсуждаем бред. чего не было бы при копи пасте (в разумных пределах конечно, всю программу сюда копировать не надо... хотя, если бы автор выделил глюк в отдельную прогу-модель, и уложился бы в приемлемое число строк то почему бы и нет? зато если кто решит проверить он будет проверять не свое решение(по мотивам ошибки) а именно автора).
← →
WebSQLNeederr (2007-12-05 20:18) [15]Господа, попрошу без эмоций.
Почему нравоучение маломальски в чем то разбирающихся делфешников экспонентциально стремится к бесконечности? Вы заметили, что кроме флуда вы "великие спецы" дельного ответа так и не дали.
А вопрос то элементарный: каким образом можно удостовериться, что ВЕСЬ документ загружен? Простой обработчик события OnDownloadComplete не гарантирует, что скажем если туда кинуть showmessage("Загружено"); то сообщение вылетит именно когда ВЕСЬ документ загружен. Дело в том, что я лично опытным путем проверял, что во время загрузки документа этот обработчик запускается минимум два раза. Я сделал несколько эмпирических наблюдений и пришел к выводу (как мне кажется сейчас ошибочному), но обработчик запускается ровно два раза и уже после второго запуска можно с какой то уверенностью говорить, что ВЕСЬ документ загружен. И я вас уверяю, такая модель достаточно хорошо работает с приемлимой долей погрешности.
Однако, как я уже говорил, в одной ситуации вылетает глюк, что в моем случае даже после второго срабатывания обработчика я визуально вижу что еще НЕ ВСЯ страница загружена.
Следовательно я у вас прошу совета - кто сталкивался с аналогичным вопросом. Не посчитайте за трудность помочь бедному "ламеру" разобраться. Только попрошу без нравоучений. Я понимаю, что среди некоторых грамотеев Делфи есть подростки или даже чуть старше и они любят самоутвердиться показав якобы дельту в умственных способностях его и опонента. Я попрошу таких людей найти другое место удовлетворения своих комплексов. Если сказать нечего то очень прошу проигнорируйте ответ.
Я же обращаюсь к спокойным уравновешенным людям, которым не сложно помочь мне разобраться как определить програмно что вся страница документа полностью загружена.
Зараннее благодарен за ваши отзывы.
← →
homm © (2007-12-05 20:38) [16]NavigateComplete2 не то?
← →
Desdechado © (2007-12-05 21:00) [17]Write an OnDocumentComplete event handler to take specific action when a frame or document is fully loaded into the Web browser .For a document without frames, this event occurs once when the document finishes loading. On a document containing multiple frames, this event occurs once for each frame. When the multiple-frame document finishes loading, the Web browser fires the event one final time.
← →
WebSQLNeederr (2007-12-20 09:40) [18]Desdechado, ну это я и так эмпирическим путем как я уже говорил установил. НО какой есть способ 100% узнать что страница загружена? Ведь заранее я не могу знать сколько внутри страницы может быть ифреймов ...
← →
ЮЮ © (2007-12-20 10:35) [19]> Ведь заранее я не могу знать сколько внутри страницы может
> быть ифреймов
А сколько уже загружено (есть на странице) можешь узнать? Если да то алгоритм приерно такой:
firesDocumentComplete := 0; // только не внктрення переменная метода, как var one:bool; в твоём случае :)
в обработчике OnDocumentComplete:
inc(firesDocumentComplete);
if firesDocumentComplete <= <количество фрэймов> then Exit;
//Web browser fires the event one final time.
...
← →
homm © (2007-12-20 10:53) [20]> [18] WebSQLNeederr (20.12.07 09:40)
> НО какой есть способ 100% узнать что страница загружена?
> Ведь заранее я не могу знать сколько внутри страницы может
> быть ифреймов ...
Взглянуть вверх и удивиться…
← →
ЮЮ © (2007-12-20 11:13) [21]> [20] homm © (20.12.07 10:53)
> Взглянуть вверх и удивиться…
Взглянул, потолок - на месте. Однако, не удивился :(
← →
palva © (2007-12-20 12:09) [22]Срабатывание OnDownloadComplete вовсе не означает, что страница загружена. Это всего лишь означает, что загрузка страницы завершена. Если у вас это событие появляется несколько раз, значит загруженная страница снова начала грузиться - мало ли что в ней понаписано, переадресация какая-нибудь.
А по теме есть еще такой способ:
if WebBrowser1.Busy значит еще загружается.
← →
homm © (2007-12-20 12:24) [23]Сделаю вид, что не вижу, как все далют вид, что не видят сказаный мной верный ответ :)
← →
WebSqlNeederr (2007-12-20 14:07) [24]>>А по теме есть еще такой способ:
if WebBrowser1.Busy значит еще загружается.
<<
Да, НО только он ничем конкретно не поможет. Я в обработчик кинул:
if NOT wb1.Busy then begin
showmessage("Zagruzheno !!!");
end;
Но при загрузке окна вылетает два модальных окна с текстом "Zagruzheno !!!"
← →
WebSqlNeederr (2007-12-20 14:10) [25]Ты это имел ввиду? NavigateComplete2?
то есть просто по этому событию оно оповещает что ВСЯ страница загружена?
← →
homm © (2007-12-20 14:22) [26]Ах, нет похоже.
The event can occur before the document is fully downloaded, but when it occurs at least part of the document must be received and a viewer for the document created.
Но в справке я нашел вот это:var
CurDispatch: IDispatch; {save the interface globally }
procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
if CurDispatch = nil then
CurDispatch := pDisp; { save for comparison }
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
if (pDisp = CurDispatch) then
begin
Beep; {the document is loaded, not just a frame }
CurDispatch := nil; {clear the global variable }
end;
end;
← →
WebSqlNeederr (2007-12-20 14:24) [27]>>firesDocumentComplete := 0; // только не внктрення переменная метода, как var one:bool; в твоём случае :)
Ха, так вот почему вы смеялись в начальных постах. Вы просто не поняли ну и я опечатку допустил. РАЗУМЕЕТСЯ я не внутри метода делал var one:bool; Это ГЛОБАЛЬНАЯ переменная!!
← →
homm © (2007-12-20 14:26) [28]Только по моему там баг. Если во время зегрузки страницы нажать отмену, WebBrowser1NavigateComplete2 выстрелит, а WebBrowser1DocumentComplete нет, и следующий WebBrowser1NavigateComplete2 не пройдет проверку, CurDispatch будет указывать на так и не загруженный документ, и Beep; соответствеено тоже никогда не наступить.
← →
palva © (2007-12-20 14:31) [29]Да не над этим они смеялись. Наверно над этим
if one=true then
Дельфийцы всегда над этим смеются.
← →
WebSqlNeederr (2007-12-20 14:32) [30]homm, БЛАГОДАРЮ! В общем риспект тебе.
И вообще всем большое СПАСИБО что уделили внимание моей проблеме. Тему можно закрывать.
← →
homm © (2007-12-20 14:40) [31]> [30] WebSqlNeederr (20.12.07 14:32)
Меня не за что, просто научись пользоваться справкой. Еще обрати внимание на [28]. Мне кажется в NavigateComplete2 нужно убрать проверку и присваивать в любом случае.
← →
sniknik © (2007-12-20 14:45) [32]> Да не над этим они смеялись. Наверно над этим
>if one=true then
> Дельфийцы всегда над этим смеются.
особенно когда прямо перед сравнением стоитone:=false;
живот от смеха надорвешь...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.052 c