Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2007, 13:16   #1
Kren
Пользователь
 
Регистрация: 11.01.2007
Сообщений: 17
По умолчанию Зашёл то... не зашёл то... (WebBrowser)

Есть некая сеть на оптиковолокне в городе, есть сервер с фильмами, музыкой, софтом, и т.д., вообщим пользуется спросом, вход на сервертакже как по сети, т.е. адрес типа \\domen, но так как сервер пользуется спросом, то всё чаще стала случаться ситуация, когда сервер выдаёт типа:"Достигнут предел пользователей, зайдите позже", и тут появилась идея у меня, сделать так называемую стучалку, в чём смысл программы, запускаешь программу и она после нажатия пуск, ну или ENTER(вообщим это не важно), начинает пытаться зайти на сервер, если сервер выдаёт ошибку типа зайдите позже, то программа через 15 сек. опять пробует зайти, и так далее... если же зашла, то выдать звуковое сообщение, и остаться на сервере.

Решил я это делать через webbrowser (delphi v 7.0), браузер всё создал, осталось именно самое важное, счётчик и условие это я задам без проблем, возник вопрос а как сделать чтобы он понимал когда защёл когда нет, изначально я хотел через Try Except End; но не получилось, т.е. он не понимает, вот пример:

Код:
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
IF key = VK_RETURN then begin
Try
WebBrowser1.Navigate(ComboBox1.Text);
Except
Showmessage ('Test');
end;
end;
end;
Т.е. если веббраузер выдаёт ошибку то должно выдаться сообщение "test", но этого не происходит при попытке зайти на полный сервак, он просто белую страничку оставляет и всё, поэтому смысла делать дальше через Try Except End я не увидел, и решил спросить у вас

Заранее спасибо за помощь
Kren вне форума Ответить с цитированием
Старый 11.01.2007, 19:35   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Проверяй наличие фразы "Достигнут предел пользователей, зайдите позже" в тексте WebBrowser...
А если пров тебя с этой "стучалкой" вычислит, может принять меры...
mihali4 вне форума Ответить с цитированием
Старый 11.01.2007, 20:56   #3
cando
 
Регистрация: 07.01.2007
Сообщений: 3
По умолчанию

а никакой ошибки и не происходит браузер коректно переходит по другому адресу вот и отслеживай куда его кидануло
нк на крайняк проверяй тот ли это штмл файл который нужен
cando вне форума Ответить с цитированием
Старый 12.01.2007, 04:42   #4
Kren
Пользователь
 
Регистрация: 11.01.2007
Сообщений: 17
По умолчанию Спасибо, но...

Не вы не много не понели видать, адрес набирается сетевой то есть \\domen и реагирует он как с сетью, т.е. никакого html нет! Вот скрин, тока в скрине пример ошибки что адрес не найден, вот именно также выскакивает ошибка о привышение лимита, вот и получается что как в html поиск не устроишь, и что как ошибку он не считает, т.е. WebBrowser отправил запрос, получил ответ, и считает что всё, его работа выполнена и на эту ошибку не реагирует.

Какие ещё есть идии???
Изображения
Тип файла: jpg error.jpg (20.3 Кб, 148 просмотров)
Kren вне форума Ответить с цитированием
Старый 12.01.2007, 16:10   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
WebBrowser отправил запрос, получил ответ
На приведенной картинке можно разобрать, что никаким веб-браузером там и не пахнет...
О чем речь вообще?
Где ответ, полученный веб-браузером?
mihali4 вне форума Ответить с цитированием
Старый 12.01.2007, 16:58   #6
Kren
Пользователь
 
Регистрация: 11.01.2007
Сообщений: 17
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
На приведенной картинке можно разобрать, что никаким веб-браузером там и не пахнет...
О чем речь вообще?
Где ответ, полученный веб-браузером?
Блин, То что выше это просто пример как выскакивает ошибка! Точна также выходит ошибка и о лимите и никакого html там нет!!!

В скрине в новом, сама форма, форму я накидал, сделал слегка, но делать дальше пока смысла не вижу, так как основную задачу не могу сделать!!!
А смысл как я уже говорил что программа должна каждые 10 сек пытаться зайти, вслучае удачи программа остаётся на странице и выдаёт некий звук! И вот тут проблема, как научить понимать программу ошибки, WebBrowser считает что своё дело он выполнил, типа отправил запрос, ответ получил и всё и пох что там в ответе, вот и возникает вопрос как программу научить понимать ошибку!

Вот если что код, может поможет:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ToolWin, OleCtrls, SHDocVw, StdCtrls,inifiles, jpeg,
  ExtCtrls;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    ToolBar2: TToolBar;
    ComboBox1: TComboBox;
    ProgressBar1: TProgressBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    StatusBar1: TStatusBar;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    GroupBox1: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Memo1: TMemo;
    Label2: TLabel;
    Button4: TButton;
    Button5: TButton;
    Image1: TImage;
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure WebBrowser1ProgressChange(Sender: TObject; Progress,
      ProgressMax: Integer);
    procedure WebBrowser1StatusTextChange(Sender: TObject;
      const Text: WideString);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Win:TIniFile;
  warn:string;
implementation

{$R *.dfm}

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
try
WebBrowser1.GoBack;
Except
showmessage ('Ошибка при попытке перейти назад!'+#13#13+'Возможные причины:'+#13+'1. Это первая ваша страница, и перейти назад просто некуда!'+#13'2. Сервер по какой-то причине стал не доступен!');
end;
end;

procedure TForm1.ToolButton2Click(Sender: TObject);
begin
WebBrowser1.Stop;
end;

procedure TForm1.ToolButton3Click(Sender: TObject);
begin
Try
WebBrowser1.Refresh;
Except
showmessage ('Ошибка при попытке обновить страницу!'+#13#13+'Возможные причины:'+#13+'1. Вы не находетесь не наодном из адресов, и обновлять просто нечего!'+#13'2. Сервер по какой-то причине стал не доступен!');
end;
end;

procedure TForm1.ToolButton4Click(Sender: TObject);
begin
Try
WebBrowser1.GoForward;
Except
showmessage ('Ошибка при попытке перейти вперёд!'+#13#13+'Возможные причины:'+#13+'1. Это последняя новая страница, и перейти вперёд просто некуда!'+#13'2. Сервер по какой-то причине стал не доступен!');
end;
end;

procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
IF key = VK_RETURN then
WebBrowser1.Navigate(ComboBox1.Text);
end;

procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress,
  ProgressMax: Integer);
begin
ProgressBar1.Max:=ProgressMax;
ProgressBar1.Position:=Progress;
end;

procedure TForm1.WebBrowser1StatusTextChange(Sender: TObject;
  const Text: WideString);
begin
StatusBar1.SimpleText:=Text;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
PageControl1.Visible:=False;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
PageControl1.Visible:=True;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
AnimateWindow(Handle, 1000, AW_HIDE or AW_BLEND);
end;

end.
Веделенная процедура является как раз WebBrowser, и она отвичает за переход, если написать в той процедуре:
Код:
begin
IF key = VK_RETURN then begin
Try
WebBrowser1.Navigate(ComboBox1.Text);
Except
showmessage ('Error, ошибка');
end;
end; end;
Изображения
Тип файла: jpg Без-имени-2.jpg (10.6 Кб, 137 просмотров)
Kren вне форума Ответить с цитированием
Старый 12.01.2007, 16:59   #7
Kren
Пользователь
 
Регистрация: 11.01.2007
Сообщений: 17
По умолчанию

ПРОДОЛЖЕНИЕ:
То получается что в случае ошибки выполнения WebBrowser должна выдаться моя собственная ошибка с текстом "Error, ошибка", т.е. если бы это выдалось то было бы мне счастье и писал бы я уже цикл с условием, но вот проблема WebBrowser, то что выдаётся ошибка о лимите не считает своей ошибкой, т.е. он информацию отправил, он ответ получил, всё какого чёрта ещё вы типа от него хотите, ВОТ И ВОЗНИКАЕТ ВОПРОС КАК ЛОВИТЬ НУ ИЛИ РАСПОЗНАВАТЬ ОШИБКИ, ПО СУТИ ДЕЛА ЧТО ОШИБКА О НЕПРАВИЛЬНОМ АДРЕСЕ(КАК В ПЕРВОМ СКРИНЕ), ЧТО ОШИБКА О ЛИМИТЕ, ЕСЛИ СКАЖИТЕ КАК ВЫЛОВИТЬ ОДНУ ОШИБКУ, ТО ТОГДА И ДРУГУЮ ПО ТОМУ ЖЕ ПРИНЦИПУ!

P.S. для тех кто вообще нифига не понял что я хочу, изменю условия, допустим я делаю программу-браузер(только по сетевым адресам \\domen), и если человек, ввёл к примеру сетевой адрес \\10.1.1.1\test , а такого адреса нет то ему выдастся просто ошибка(ошибка от винды) о том что нет адреса, вот и представьте что мне надо выловить эту ошибку и пользователя переслать примеру тогда на адрес своей машины \\10.1.4.2, вот и вопрос как выловить эту ошибку
Kren вне форума Ответить с цитированием
Старый 13.01.2007, 05:21   #8
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Процедура подключается к серверу каждые 15 секунд. Если подключение выполнено успешно - показывает сообщение и останавливается.
Код:
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
IF key = VK_RETURN then
Repeat
WebBrowser1.Navigate(ComboBox1.Text);
Sleep(900000); // Ожидание 15 секунд
Until WebBrowser1.LocationURL = ComboBox1.Text;
ShowMessage('Подключение выполнено');
WebBrowser1.Navigate('')
end;
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 13.01.2007, 08:35   #9
Kren
Пользователь
 
Регистрация: 11.01.2007
Сообщений: 17
По умолчанию Не проканало

TO Aver попробывал как вы говорите, нифига не канает, виснит просто полностью и всё.
Kren вне форума Ответить с цитированием
Старый 13.01.2007, 15:24   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
IF key = VK_RETURN then
Repeat
WebBrowser1.Navigate(ComboBox1.Text );
Зацикленная процедура. Где выход, по какому условию?
Добавляем begin/end:
Цитата:
IF key = VK_RETURN then
Repeat
begin
WebBrowser1.Navigate(ComboBox1.Text );
Sleep(900000); // Ожидание 15 секунд
end Until WebBrowser1.LocationURL <> ComboBox1.Text;
ShowMessage('Подключение выполнено');
WebBrowser1.Navigate('')

Последний раз редактировалось mihali4; 13.01.2007 в 15:53.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
webBrowser MaslCS Компоненты Delphi 23 08.05.2010 22:05
WebBrowser Killbrum Помощь студентам 2 09.06.2008 19:42
WebBrowser JakSon Работа с сетью в Delphi 2 03.05.2008 01:05
Webbrowser Stanislav Общие вопросы Delphi 1 18.11.2007 11:51