Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как прервать выполненеи проги 
:(
    Опции темы
razumsap
Дата 7.3.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Привет всем. Вопрос может и глупый но я чёт с ним уже долго борюсь.

Написал программу  с использованием встроенного webbrowser-а, когда грзится страничка в нём кнопка закрыть не работает
может из-за этого куска - полной загрузки странички
Код

   while pg <> k do
   Application.ProcessMessages;


и всё же как программно прервать и корректно выйти из программы.
PM MAIL ICQ   Вверх
kemiisto
Дата 7.3.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Цитата(razumsap @  7.3.2008,  12:09 Найти цитируемый пост)
может из-за этого куска - полной загрузки странички


Интересно конечно, что такое 
Код

pg
 и 
Код

k
, но не думаю, что из-за 
Код

Application.ProcessMessages
 не будет работать кнопка закрыть. Скорее, наоборот....



--------------------
PM MAIL WWW GTalk Jabber   Вверх
Christoph
Дата 7.3.2008, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



тебе надо выйти из цикла? break, exit


--------------------
user posted image
PM MAIL ICQ   Вверх
aalexstorm
Дата 10.3.2008, 15:20 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



if условие then break - завершение цикла.
Application.Terminate - завершение приложения.
PM MAIL   Вверх
Serjone
Дата 11.3.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



у меня возможно подобная проблема. Использую indy, при отправке запроса на php страницу при отключенном интернете, программа перестает закрываться стандартными методами, приходится юзать halt для аварийного завершения.
PM MAIL   Вверх
razumsap
Дата 11.3.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Пивет, может я не праильно выразился, но дело происходит так 
Запускается сайт 
дожидается полная загрузка странички вот такой процедурой

Код

pg:integer;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
   CurWebrowser: IWebBrowser;
   TopWebBrowser: IWebBrowser;
   Document: OleVariant;
   WindowName: string;

  HTMLDocument: IHTMLDocument2;
  PersistFile: IPersistFile;
  state:integer;

 begin
   CurWebrowser := pDisp as IWebBrowser;
   TopWebBrowser := (Sender as TWebBrowser).DefaultInterface;

   if CurWebrowser = TopWebBrowser then
   pg:=pg+1;
 end;


и чтоб программа дожидалась полной загрузки сайта стоит условие 

   while pg <> k do
   Application.ProcessMessages;

(K-тожпеременная типа intrger)

Дело в том что прога работает правильно, но от начала и ло конца, а вот я не могу её прервать во время её работы (остановить  выполнение действий самого браузера, он продолжает работать дальше)
Я даж прикрепил кноку и обработчик по её остановке (как мне посоветовали выше)

Код

procedure TForm1.BitBtn2Click(Sender: TObject);
var i:integer;
begin
webbrowser1.Stop;
Application.Terminate;

end;


но ничего не происходит прога работает дальше, что делать? как её тормознуть (прогу или скорее правильно сказать работу WebBrowsera)
PM MAIL ICQ   Вверх
ama_kid
Дата 11.3.2008, 13:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Цитата(razumsap @  11.3.2008,  12:52 Найти цитируемый пост)
и чтоб программа дожидалась полной загрузки сайта стоит условие 
   while pg <> k do
   Application.ProcessMessages;

Имхо надо выкинуть это и будет тебе щастье... Обработчик WebBrowser1DocumentComplete вызывется только когда документ загружен, поэтому тебе надо не его прерывать, а работу WebBrowser'a, что и делается командой Stop...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
razumsap
Дата 1.4.2008, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Цитата(ama_kid @ 11.3.2008,  13:47)
Цитата(razumsap @  11.3.2008,  12:52 Найти цитируемый пост)
и чтоб программа дожидалась полной загрузки сайта стоит условие 
   while pg <> k do
   Application.ProcessMessages;

Имхо надо выкинуть это и будет тебе щастье... Обработчик WebBrowser1DocumentComplete вызывется только когда документ загружен, поэтому тебе надо не его прерывать, а работу WebBrowser'a, что и делается командой Stop...

Привет. Сделал как ты и сказал, но вот проблема, после выполнения ниже идущего кода

webbrowser1.Stop;
Application.Terminate;

прога возвращается в предыдущюю процедуру где опятьь таки выполняется код

   while pg <> k do
   Application.ProcessMessages;

почему webbrowser1.Stop; не остановил весь процесс, не пойму?
PM MAIL ICQ   Вверх
MadCoder
Дата 1.4.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: нет
Всего: 2



Цитата(razumsap @ 1.4.2008,  08:57)
Цитата(ama_kid @ 11.3.2008,  13:47)
Цитата(razumsap @  11.3.2008,  12:52 Найти цитируемый пост)
и чтоб программа дожидалась полной загрузки сайта стоит условие 
   while pg <> k do
   Application.ProcessMessages;

Имхо надо выкинуть это и будет тебе щастье... Обработчик WebBrowser1DocumentComplete вызывется только когда документ загружен, поэтому тебе надо не его прерывать, а работу WebBrowser'a, что и делается командой Stop...

Привет. Сделал как ты и сказал, но вот проблема, после выполнения ниже идущего кода

webbrowser1.Stop;
Application.Terminate;

прога возвращается в предыдущюю процедуру где опятьь таки выполняется код

   while pg <> k do
   Application.ProcessMessages;

почему webbrowser1.Stop; не остановил весь процесс, не пойму?

А если так написать:
Код

while (pg <> k) and (Stop=False) do
   Application.ProcessMessages;

А на выключение проги написать:
Код

Stop:=True;

PM WWW ICQ   Вверх
razumsap
Дата 1.4.2008, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Цитата(MadCoder @ 1.4.2008,  10:28)
Цитата(razumsap @ 1.4.2008,  08:57)
Цитата(ama_kid @ 11.3.2008,  13:47)
Цитата(razumsap @  11.3.2008,  12:52 Найти цитируемый пост)
и чтоб программа дожидалась полной загрузки сайта стоит условие 
   while pg <> k do
   Application.ProcessMessages;

Имхо надо выкинуть это и будет тебе щастье... Обработчик WebBrowser1DocumentComplete вызывется только когда документ загружен, поэтому тебе надо не его прерывать, а работу WebBrowser'a, что и делается командой Stop...

Привет. Сделал как ты и сказал, но вот проблема, после выполнения ниже идущего кода

webbrowser1.Stop;
Application.Terminate;

прога возвращается в предыдущюю процедуру где опятьь таки выполняется код

   while pg <> k do
   Application.ProcessMessages;

почему webbrowser1.Stop; не остановил весь процесс, не пойму?

А если так написать:
Код

while (pg <> k) and (Stop=False) do
   Application.ProcessMessages;

А на выключение проги написать:
Код

Stop:=True;

Вот нарыл помогло, кстате тут на форуме smile
TerminateProcess( GetCurrentProcess, 0 );
PM MAIL ICQ   Вверх
Alexeis
Дата 1.4.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



razumsap, ну если нужно жестоко убить, то проще всего Halt smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
razumsap
Дата 3.4.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Цитата(Alexeis @ 1.4.2008,  10:57)
razumsap, ну если нужно жестоко убить, то проще всего Halt smile

Жестоко не надо, но вот это деяние    Application.ProcessMessages;
в цикле

   while pg <> k do
   Application.ProcessMessages;

не дает ничего сделать енто не подошло - согласенsmile
TerminateProcess( GetCurrentProcess, 0 );

написал так
Код

webbrowser1.Stop;
Application.ProcessMessages;
Application.Terminate;

но работа браузера останавливается, если не выполняется вы шеуказанный цикл.

Вобщем фигня, пока забросил эту часть smile 
PM MAIL ICQ   Вверх
Alexeis
Дата 3.4.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Application.Terminate; выполняет всего навсего PostQuitMessage(0); 
Т.е. пока не будет обработано сообщение ничего закроется. 

Чтобы убить webbrowser1, можно попробовать освободить интерфейс COM объекта, после чего, если ссылок не осталось можно смело все уничтожать. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
imageman
Дата 3.4.2008, 18:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.9.2004

Репутация: нет
Всего: 1



PS.

а 
Код

 while pg <> k do
   Application.ProcessMessages;

не грузит намертво процессор? 

может лучше так
 while pg <> k do begin
   Application.ProcessMessages;
   sleep(50);
 end;

только мне не нравятся такие комбинации. Может лучше таймер поставить с периодичностью 100 мсек?
PM MAIL   Вверх
MetalFan
Дата 3.4.2008, 22:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



вообще без нужды и осознанности применение ProcessMessages - зло! )


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
razumsap
Дата 7.4.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Цитата(imageman @ 3.4.2008,  18:40)
PS.

а 
Код

 while pg <> k do
   Application.ProcessMessages;

не грузит намертво процессор? 

может лучше так
 while pg <> k do begin
   Application.ProcessMessages;
   sleep(50);
 end;

только мне не нравятся такие комбинации. Может лучше таймер поставить с периодичностью 100 мсек?

Дело в том что pg говорит о загрузке документа (полностью)
Код

 begin
   CurWebrowser := pDisp as IWebBrowser;
   TopWebBrowser := (Sender as TWebBrowser).DefaultInterface;

   if CurWebrowser = TopWebBrowser then
   pg:=pg+1;
 end;


и если у человека очень медленный инет, то задерка 100 или 1000 не поможет:(
и если  ProcessMessages - зло! - то какова альтернатива?
PM MAIL ICQ   Вверх
MetalFan
Дата 7.4.2008, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(razumsap @  7.4.2008,  09:44 Найти цитируемый пост)
Дело в том что pg говорит о загрузке документа (полностью)

а чем OnDocumentComplete не устраивает?




--------------------
There are always someone smarter than you...
PM MAIL   Вверх
razumsap
Дата 8.4.2008, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Цитата(MetalFan @ 7.4.2008,  17:11)
Цитата(razumsap @  7.4.2008,  09:44 Найти цитируемый пост)
Дело в том что pg говорит о загрузке документа (полностью)

а чем OnDocumentComplete не устраивает?

Неустраивает тем, что как показала практика, он срабатывает только один первый раз, затем если браузер обработав событие загружает результат обработки (это касается пхп - где по одному адресу на одной странице выдаются разные результаты) и считает что это тотже документ не дождавшись его загрузки выпоьняет дальнейшие действия в программе.
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1129 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.