    262	Использование гнезд 

    Глава 11. Создание приложений для Internet 

    Visual Basic можно использовать для создания приложений-клиентов, которые 
позволяют осуществлять доступ к Internet. Эти приложения могут предоставлять 
ряд возможностей для пользователей Web, включая просмотр Web-страниц, участие 
в сеансах конференций и перемещение файлов между компьютерами, которые 
работают под разными операционными системами. 
    В этой главе описывается создание приложений-клиентов, которые 
обеспечивают эти возможности. Здесь также показано, как установить и управлять 
приложением Personal Web-Server, чтобы можно было легко тестировать 
создаваемые приложения-клиенты. 

    11.1. Использование гнезд 

    Гнездо (socket) — двунаправленный логический терминал (выход), через 
который два приложения или процесса могут обмениваться данными. Например, 
гнезда используются для реализации приложений конференций. 
    Ниже представлены некоторые подробности архитектуры гнезд и показано, как, 
используя гнезда, организовать связь между серверами и клиентами. 
    Гнезда обеспечивают механизм сетевой межпроцессной связи для TCP/IP и 
Internet. Серверы и клиенты гнезда реализуются с использованием элемента 
управления Winsock. 

    11.1.1. Функции гнезд 

    Гнездо имеет следующие три существенных функции: 
    •   интерфейс, к которому привязывается гнездо (специфицируется адресом IP); 
    •   номер порта, на который гнездо будет передавать данные или с которого 
оно будет принимать данные; 
    •   тип гнезда (stream или datagram соответственно протоколам TCP и UDP). 
    Основное различие между типами гнезд stream и datagram — их состояние 
соединения. Тип stream (поток), или TCP, — состояние, основанное на 
соединении. Оно подобно телефонной транзакции, в которой, прежде чем может 
осуществляться разговор, пользователь должен установить соединение. 
    Тип гнезда datagram, или UDP, — состояние связи без соединения. Оно 
подобно радиопередаче, в том смысле, что явное, один-к-одному, соединение 
между сервером и клиентом не устанавливается. 
    В этом случае сервер прослушивает на определенном известном порте все 
установленные сетевые интерфейсы, а клиент инициирует связь из определенного 
интерфейса, используя любой доступный порт. 

    11.1.2. Применения гнезд 

    Обычно гнезда используются для создания приложений следующих типов: 
    •   приложения-клиенты, которые собирают информацию пользователя перед 
передачей ее центральному серверу; 
    •   приложения-серверы, которые функционируют как центральный пункт сбора 
данных от нескольких пользователей; 
    •   приложения для организации конференций. 


    Глава 11. Создание приложений для Internet 263 


    11.1.3. Элемент управления Winsock 

    Элемент управления Winsock, невидимый для пользователя, обеспечивает 
простой доступ к сетевым сервисам TCP и UDP. Он может использоваться 
разработчиками в Microsoft Access, Visual Basic, Visual С ++ или Visual 
FoxPro. Применяя его при написании приложений клиент/сервер, не требуется 
понимать подробности организации TCP или вызывать модули Winsock API низкого 
уровня. Устанавливая свойства и вызывая методы элемента управления Winsock, 
можно легко соединяться с удаленной машиной и обмениваться данными в обоих направлениях. 

    Рис. 11.1. Элемент управления Winsock в форме. 


    Выбор протокола 

    Тип применяемого протокола определяется характеристиками создаваемого 
приложения. Например, в выборе подходящего протокола связи помогут ответы на 
следующие вопросы: 
    1. Требуется ли в приложении уведомление или подтверждение от сервера или 
клиента при приеме или передаче данных? Если да, то следует выбрать протокол 
TCP, который требует установления явного соединения. 
    2. Будут ли передаваться большие массивы данных (например, графические 
образы или звуковые файлы)? После установления соединения протокол TCP 
контролирует его и гарантирует целостность данных. Такой тип соединения, 
однако, отбирает много системных и сетевых ресурсов и поэтому более дорог. 
    3. Будут ли данные передаваться порциями или только за один сеанс? 
Например, если это всего лишь сообщение другому компьютеру о завершении 
некоторых операций, то, вероятно, можно удовлетвориться протоколом UDP. 
Протокол UDP больше подходит для передачи небольших объемов данных. 

    Общий порядок работы с TCP 

    Протокол TCP (Transfer Control Protocol) позволяет создавать и 
поддерживать соединение с удаленным компьютером. Используя это соединение, оба 
компьютера могут адресовать данные между собой. Если создается 
приложение-клиент, необходимо знать имя компьютера-сервера или адрес IP 
(свойство RemoteHost), а также порт (свойство RemotePort), который оно будет 
"прослушивать". Затем вызывается метод Connect. 
    Если создается приложение-сервер, устанавливается порт прослушивания 
(свойство Local-Port) и вызывается метод Listen. Когда компьютер-клиент 
запрашивает соединение, происходит событие ConnectionRequest. Для установления 
соединения внутри процедуры события ConnectionRequest вызывается метод Accept. 
    После того как соединение установлено, любой из компьютеров может 
передавать и получать данные. Чтобы передать данные, вызывается метод 
SendData. Всякий раз при 


    264	Использование гнезд 

получении данных происходит событие DataArrival. Для отбора данных следует 
внутри процедуры события DataArrival вызвать метод GetData. 

    Общий порядок работы с UDP 

    UDP (User Datagram Protocol) — протокол без соединения. В отличие от 
операций TCP компьютеры не устанавливают соединение. Кроме того, приложение 
UDP может быть как клиентом, так и сервером. 
    Чтобы передать данные, сначала нужно установить свойство LocalPort 
компьютера-клиента. Затем компьютер-сервер должен только установить в свойстве 
RemoteHost адрес Internet компьютера-клиента, а в свойстве RemotePort — тот же 
порт, что и в свойстве LocalPort компьютера-клиента, и вызвать метод SendData, 
чтобы начать передавать сообщения. На компьютере-клиенте посланные сообщения 
принимаются с помощью метода GetData внутри процедуры события DataArrival. 
    Добавление элемента управления Winsock к проекту 
    Если элемента управления Winsock еще нет на панели элементов, его можно 
добавить к проекту через окно диалога Components: 
    1. В меню Project выбрать Components. 
    2. На вкладке Controls выбрать Microsoft Winsock Control 5.0 и нажать ОК. 

    11.1.4. Базовые операции с элементом управления Winsock 

    Ниже представлены методы, свойства и события, используемые для соединения 
серверов и клиентов через элемент управления Winsock, а также показано, как 
создавать между двумя компьютерами соединение равноправных узлов. 
    Программирование сервера при использовании элемента управления Winsock 
предполагает выполнение следующих шагов: 
    1. Используя свойство Protocol, специфицировать протокол, который сервер 
будет использовать при взаимодействии с клиентами. 
    2. Используя свойство LocalPort, специфицировать порт, через который 
сервер будет взаимодействовать с клиентами. 
    3. Используя метод Listen, установить способ прослушивания входящих 
запросов соединений от клиентов. 
    4. Используя событие ConnectionRequest, запрограммировать действия по 
принятию или отклонению запросов соединений. 
    Дополнительную информацию относительно этого процесса см. ниже, в разделе 
"Программирование сервера Winsock". 
    Процедура программирования клиента при использовании элемента управления 
Winsock в целом аналогична программированию сервера: 
    1. Используя свойство RemoteHost, специфицировать имя удаленной машины, с 
которой клиент будет поддерживать связь. 
    2. Используя свойство RemotePort, специфицировать порт удаленной машины, 
через который клиент будет сообщаться с удаленной машиной. 
    3. Используя метод Connect, инициировать соединение между клиентом и 
удаленной машиной. 
    Дополнительную информацию относительно этого процесса см. в разделе 
"Программирование клиента Winsock". 


    Глава 11. Создание приложений для Internet	265 

    После установления связи между клиентом и сервером между ними могут 
передаваться данные. Процедура передачи данных требует следующих шагов: 
    1. Использовать метод SendData в клиенте и сервере для передачи данных на 
другой компьютер. 
    2. Использовать метод GetData в процедуре события DataArrival в клиенте и 
сервере для приема данных из другого компьютера. 
    Информацию относительно передачи данных между клиентом и сервером см. в 
разделе "Прием и передача данных". 

    Программирование приложения равноправных узлов 

    Более простой подход к написанию приложения с использованием гнезд 
заключается в создании приложения равноправных узлов, так как приложение 
равноправных узлов не требует явного соединения. 
    Для программирования первого входа-выхода: 
    1. Используя свойство RemoteHost, специфицировать имя удаленной машины, с 
которой первый вход-выход будет поддерживать связь. 
    2. Используя свойство RemotePort, специфицировать порт на удаленной 
машине, через который первый вход-выход будет поддерживать связь с удаленной машиной. 
    3. Используя метод Bind, соединить локальный порт с удаленным портом, 
используя локальный адрес Internet Protocol (IP). 
    Для программирования второго входа-выхода требуются следующие шаги: 
    1. Используя свойство RemoteHost, специфицировать имя удаленной машины, с 
которой будет сообщаться второй вход-выход. 
    2. Используя свойство RemotePort, специфицировать порт на удаленной 
машине, через который второй вход-выход будет поддерживать связь с удаленной машиной. 
    3. Методом Bind соединить локальный порт с удаленным портом, используя 
локальный адрес IP. 

    11.1.5. Программирование сервера Winsock 

    При создании приложения-сервера с элементом управления Winsock элемент 
управления настраивается для прослушивания на обозначенном порте сообщений от 
клиентов. Когда клиент делает запрос соединения, сервер может принять запрос и 
установить соединение. 

    Установка свойства Protocol 

    При создании сервера Winsock вначале необходимо определить тип сервера. 
Тип сервера устанавливается во время разработки или в период выполнения в 
свойстве Protocol. Значение по умолчанию для этого свойства — TCP. 

    Установка свойства Local Port и вызов метода Listen 

    После определения типа сервера для свойства LocalPort устанавливается 
некоторое целое число и вызывается метод Listen. Это может быть выполнено в 
событии Form_Load, как показано в следующем примере: 

    Private  Form_Load() 
    tcpServer.LocalPort = 1001 
    tcpServer.Listen End Sub 


    Глава 11. Создание приложений для Internet	265 

    После установления связи между клиентом и сервером между ними могут 
передаваться данные. Процедура передачи данных требует следующих шагов: 
    1. Использовать метод SendData в клиенте и сервере для передачи данных на 
другой компьютер. 
    2. Использовать метод GetData в процедуре события DataArrival в клиенте и 
сервере для приема данных из другого компьютера. 
    Информацию относительно передачи данных между клиентом и сервером см. в 
разделе "Прием и передача данных". 

    Программирование приложения равноправных узлов 

    Более простой подход к написанию приложения с использованием гнезд 
заключается в создании приложения равноправных узлов, так как приложение 
равноправных узлов не требует явного соединения. 
    Для программирования первого входа-выхода: 
    1. Используя свойство RemoteHost, специфицировать имя удаленной машины, с 
которой первый вход-выход будет поддерживать связь. 
    2. Используя свойство RemotePort, специфицировать порт на удаленной 
машине, через который первый вход-выход будет поддерживать связь с удаленной машиной. 
    3. Используя метод Bind, соединить локальный порт с удаленным портом, 
используя локальный адрес Internet Protocol (IP). 
    Для программирования второго входа-выхода требуются следующие шаги: 
    1. Используя свойство RemoteHost, специфицировать имя удаленной машины, с 
которой будет сообщаться второй вход-выход. 
    2. Используя свойство RemotePort, специфицировать порт на удаленной 
машине, через который второй вход-выход будет поддерживать связь с удаленной машиной. 
    3. Методом Bind соединить локальный порт с удаленным портом, используя 
локальный адрес IP. 

    11.1.5. Программирование сервера Winsock 

    При создании приложения-сервера с элементом управления Winsock элемент 
управления настраивается для прослушивания на обозначенном порте сообщений от 
клиентов. Когда клиент делает запрос соединения, сервер может принять запрос и 
установить соединение. 

    Установка свойства Protocol 

    При создании сервера Winsock вначале необходимо определить тип сервера. 
Тип сервера устанавливается во время разработки или в период выполнения в 
свойстве Protocol. Значение по умолчанию для этого свойства — TCP. 

    Установка свойства Local Port и вызов метода Listen 

    После определения типа сервера для свойства LocalPort устанавливается 
некоторое целое число и вызывается метод Listen. Это может быть выполнено в 
событии Form_Load, как показано в следующем примере: 

    Private  Form_Load() 
    tcpServer.LocalPort = 1001 
    tcpServer.Listen End Sub 


    Глава 11. Создание приложений для Internet	267 

    Отбор данных 

    Для получения данных с удаленного компьютера в процедуре обработки события 
используется метод GetData элемента управления Winsock, в котором отбираются 
данные, кэширо-ванные элементом управления. 

    Синтаксис метода GetData: o6be«m.GetData данные, [тип,] [тах_длина] 

    Переменная данные имеет тип Variant, но, обеспечивая параметр тип, можно 
специфицировать формат, в котором требуется получить данные. Параметр 
тах_длина определяет максимальный объем данных, которые могут быть загружены в 
переменную данные. 
    В следующем фрагменте для получения данных используется событие DataArrival: 

    Private  Sub Winsockl_DataArrival   (ByVal  bytesTotal  As  Long) 
    Dim  strData  As   String 
    Winsockl.GetData   strData,   vbString 
    '   Внести  полученные  данные   в   текстовое   поле 
    txtDisplay  =  txtDisplay   &   strData End  Sub 

    Параметр bytesTotal процедуры события DataArrival указывает количество 
отбираемых байт. 

    11.2. Установление соединений FTP и HTTP в Internet 

    Протокол передачи файлов (FTP — File Transfer Protocol) и Протокол 
передачи гипертекста (HTTP — Hypertext Transfer Protocol) — два наиболее 
широко используемых в Internet протокола. FTP позволяет пользователям находить 
и принимать по сети Internet файлы всех типов, независимо от различий в 
операционных системах. Аналогично, HTTP позволяет пользователям находить, 
просматривать и загружать с любой удаленной машины документы HTML. 
    В этом разделе описывается использование элемента управления Internet 
Transfer для реализации в приложении-клиенте соединения FTP и HTTP. Здесь 
также показано, как программировать асинхронные и синхронные соединения. 

    11.2.1. Элемент управления Internet Transfer 

    В Visual Basic функциональные возможности FTP и HTTP реализуются с 
использованием элемента управления Internet Transfer. Этот элемент управления 
соединяет клиента с любым сервером, который поддерживает один из этих 
протоколов, и отбирает файлы, используя методы OpenURL или Execute. 
    Функции сервера обычно обеспечиваются таким приложением, как Microsoft 
Internet Information Server или Personal Web-Server. 
    Если элемента управления Internet Transfer еще нет на панели элементов, 
подключить его к проекту можно через окно диалога Components (рис. 11.2). 

    11.2.2. Базовые операции с элементом управления Internet Transfer 

    Ниже представлены основные методы, свойства и события элемента управления 
Internet Transfer, используемые для реализации в клиенте функций FTP и HTTP. 

    Примечание: Серверы FTP и HTTP прослушивают сообщения от клиентов. Обычно 
в этих серверах порт 21 назначают для входящих данных через FTP и используют 
другой порт для исходящих данных. Порт 80 используется для входящих и 
исходящих данных для HTTP. 


    268 Установление соединений FTP и HTTP в Internet 


    Jl 
    ±J 

    Рис. 11.2. Элемент управления Internet Transfer в форме. 


    Методы OpenilRL и Execute 

    Для переноса данных с сервера в приложение-клиент используется либо метод 
OpenURL, либо метод Execute. 
    Метод OpenURL — синхронный вызов, который открывает и возвращает документ, 
специфицированный пользователем, через протокол FTP или HTTP. Возвращенные 
данные могут отбираться как строковые или двоичные данные. Метод OpenURL — 
намного проще в программировании, чем метод Execute. 
    Метод Execute — асинхронный запрос к удаленному серверу. Статус 
асинхронной операции обычно обеспечивается в событии StateChanged элемента 
управления Internet Transfer. Метод Execute обеспечивает клиенту возможность 
выполнить широкий интервал файловых операций, таких, как передача, загрузка, 
удаление данных и прием распечаток каталогов. Метод Execute поддерживает такие 
команды HTTP, как GET, HEAD, POST и PUT, и также поддерживает такие команды 
FTP, как GET, PUT, SEND и DELETE. Хотя Execute обеспечивает больше 
функциональных возможностей, чем OpenURL, он более сложен в программировании. 
    Программирование асинхронных операций клиента включает следующие шаги: 
    1. Используя свойство AccessType, установить ссылку на допустимый сервер. 
    2. Используя метод Execute, начать передачу данных. 
    3. Используя событие StateChanged, в событии StateChanged 
проконтролировать состояние соединения элемента управления. 
    4. Обработать ошибки, используя свойства ResponseCode и Responselnfo. 
    5. Методом GetChunk отобрать данные из буфера элемента управления. 
    6. Используя свойство StillExecuting, активировать асинхронную обработку. 
    7. Используя метод Cancel, остановить передачу данных, если пользователь 
хочет прервать операцию до ее завершения. 
    В асинхронном режиме клиент вводит запрос, но продолжает выполнять свою 
обработку, пока не возвращается ответ. Клиент может вводить несколько запросов 
и может обрабатывать их в любом порядке, в котором они возвращаются. 
Асинхронная связь независима от сети, и клиенты могут вводить запросы, даже 
если в сети или удаленной системе возникают проблемы. Информацию относительно 
программирования клиента для асинхронной работы см. в разделе 
"Программирование асинхронных операций". 


    Глава 11. Создание приложений для Internet 269 

    Программирование синхронных операций клиента предполагает выполнение 
следующих базовых шагов: 
    1. Используя свойство AccessType, установить ссылку на сервер. 
    2. Используя метод OpenURL, начать перенос данных. 
    Информацию относительно программирования клиентов для выполнения 
синхронных операций см. в разделе "Программирование синхронных операций". 

    11.2.3. Программирование асинхронных операций 


    Установка свойства AccessType 

    Чтобы специфицировать, как должен осуществляться доступ к серверу — 
непосредственно или через полномочный (proxy) сервер, вначале необходимо 
установить свойство AccessType элемента управления Internet Transfer. В 
следующем фрагменте кода показано, как установить свойство AccessType, 
используя константу icUseDefault. Для обращения к Internet через эту константу 
используются умолчательные установки системного реестра. 

    Inetl.Accesstype   =   icUseDefault 


    Использование метода Execute 

    После установки способа доступа к серверу методом Execute инициируется 
запрос данных. Синтаксис метода Execute: 

    объект.Execute url, операция, данные, заголовки Установки параметра 
операция для протокола HTTP: 

    Элемент 

    Описание 

    объект 

    Объектное выражение, содержащее ссылку на элемент управления Internet Transfer. 

    url 

    Необязательный. Строка, содержащая URL, с которым элемент управления 
Internet Transfer должен соединиться. Если URL не специфицирован, берется 
значение из свойства URL элемента управления. 
    операция 

    Необязательный. Строка, содержащая тип (команду) выполняемой операции 
(перечень команд см. ниже). 
    данные 

    Необязательный. Строка, специфицирующая данные для операций (см. ниже). 
    заголовки 

    Необязательный. Строка, специфицирующая дополнительные заголовки, 
передаваемые на удаленный сервер. Формат — имя_заголовка: значение_заголовка vbCrLf. 
    Установки параметра операция для протокола FTP: 

    Операция	Описание 

    GET	Отбор данных из URL, специфицированного свойством URL. 
    HEAD	Передача заголовков запроса. 
    POST	Передача данных на сервер. Данные определяются параметром данные. 
Здесь содержимое параметра данные отличается от содержимого для команды GET, 
для которой в параметре данные специфицируются дополнительные инструкции. 
    PUT	Операция записи. Имя заменяемой страницы содержится в параметре данные. 


    270 Установление соединений FTP и HTTP в Internet 


    Примечание: Для протокола FTP используется единственная строка, содержащая 
URL, а также имена операций и их параметры в параметре операция. Иными 
словами, параметры "данные" и "заголовки" здесь не используются. Параметры 
операций разделяются пробелами. Таким образом, синтаксис операции для FTP 
следующий: имя_операции файл1 файл2. 

    Например, в следующем фрагменте в методе Execute со специфицированного URL 
выполняется прием двух файлов: 

    Inetl.Execute   "FTP://ftp.microsoft.com",   _ "GET   Filel.txt   C:\Temp\File2.txt" 

    Операция	Описание 

    CD filel	Переход к директории, специфицированной в filel. 

    COUP	Переход к директории уровнем выше. Эквивалентно "CD.." 

    CLOSE	Закрыть текущее соединение FTP. 

    DELETE filel	Удалить файл filel. 

    DIR filel	Поиск filel (допускаются символы подстановки, но синтаксис их 
диктует удаленный сервер). Если параметр filel не указан, возвращается вся 
текущая рабочая директория. Для получения непосредственно данных используется 
метод GetChunk. 

    GET filel file2	Принять файл filel и создать новый локальный файл /7/е2. 

    LS filel	Поиск файла filel (допускаются символы подстановки, но синтаксис 
их диктует удаленный сервер). Для получения непосредственно данных 
используется метод GetChunk. 

    MKDIR/7/e?	Создать директорию filel. Успех операции зависит от привилегий 
пользователя на удаленном сервере. 

    PUT filel file2	Копировать локальный файл filel в удаленное расположение, 
специфицированное в file2. 

    PWD	Вернуть имя текущей директории. Для получения непосредственно данных 
используется метод GetChunk. 

    QUIT	Завершает сеанс пользователя. 

    RECV filel file2	Принять удаленный файл filel и создать новый локальный 
файл /»7е2. Эквивалентно GET. 

    RENAME filel file2	Переименовать файл filel в Ш2. Успех операции зависит 
от привилегий пользователя на удаленном сервере. 

    RMDIR filel	Удалить директорию filel. Успех операции зависит от привилегий 
пользователя на удаленном сервере. 

    SEND filel file2	Копировать локальный файл filel в удаленное расположение, 
специфицированное в file2. Эквивалентно PUT. 

    SIZE filel	Вернуть размер директории filel. 

    В следующем фрагменте кода метод Execute используется для получения 
листинга каталога с сервера FTP: 

    Inetl.Execute "ftp://ftp.microsoft.com", "DIR" 


    Использование события StateChanged 

    Для управления загрузкой данных и обеспечения механизма обработки ошибок 
необходимо внести программный код в процедуру события StateChanged. 


    Глава 11. Создание приложений для Internet	271 

    Определять момент отбора данных можно, проводя проверку состояния 
icResponseComp-leted в событии StateChanged. Затем для приема данных 
используется метод GetChunk. 
    В следующем фрагменте для тестирования состояния icResponseCompleted 
используется оператор Select Case: 

    Private   Sub   Inetl_StateChanged(ByVal   State   as   Integer) Select   Case 
    Case  icResponseCompleted '    Копировать   данные  методом  GetChunk Case 
 icError 
    Inetl.Cancel 
    '   Сообщить   пользователю  об  ошибке  и  завершить 
    '   асинхронную  операцию End  Select End  Sub 

    Использование метода GetChunk 

    После наступления состояния icResponseCompleted методом GetChunk можно 
переместить данные из буфера элемента управления в расположение-адресат. Для 
этого можно включить программный код в строке icResponseCompleted оператора 
Case, как показано в следующем примере: 

    Case   icResponseCompleted Dim  s  As   String '   Получить   порцию 
данных s   =   Inetl.GetChunk(1024) Do  While   Len (s)    >   0 
    txtOutput  =   txtOutput   &   s 
    s   =   Inetl.GetChunk(1024) Loop 


    Свойство StillExecuting 

    Наконец, с помощью свойства StillExecuting нужно проверить состояние 
элемента управления Internet Transfer. Когда элемент управления занят 
обработкой, например загрузкой файла из Internet, это свойство возвращает True 
и элемент управления не отвечает на другие запросы. 
    В следующем примере показано использование функции DoEvents для передачи 
управления операционной системе, с тем чтобы в очередь на обработку могли быть 
поставлены другие события: 

    Inetl.Execute   ...   '   Здесь   -   выполнить   операцию метода  Execute 
While  Inetl.StillExecuting 
    DoEvents Wend '   Операция   завершена 


    Отмена асинхронной обработки 

    Одним из преимуществ асинхронной обработки является то, что пользователь 
может прервать операцию до ее завершения. Эту возможность можно обеспечить 
рядом способов. Например, пользователь может щелкнуть кнопку Отмена в 
не-модальной форме или нажать клавишу < Esc >. Независимо от способа для 
завершения операции в приложении нужно использовать метод Cancel элемента 
управления Internet Transfer. 


    272	Установление соединений FTP и HTTP в Internet 

    В следующем фрагменте кода для завершения асинхронной операции 
пользователем используется событие Click командной кнопки: 

    Private   Sub   cmdCancel_Click() 
    If   Inetl.StillExecuting  Then INetl.Cancel 
    End   If End  Sub 


    11.2.4. Программирование синхронных операций 

    Программирование синхронной загрузки включает установку типа доступа и 
вызов метода OpenURL. 

    Синтаксис метода OpenURL: объек-m.OpenURL strURL[, тип_данного] 

    Параметр strURL — любой допустимый URL FTP или HTTP. Если специфицировано 
имя файла, будет загружен файл. Если специфицировано имя каталога, будет 
загружен листинг каталога. 
    Параметр тип_данного определяет тип возвращаемых данных — строковый 
(icString) или двоичный (icByteArray). 
    В следующем фрагменте метод OpenURL используется для загрузки в текстовое 
поле с сервера Internet листинга каталога Microsoft FTP: 

    Dim  s  As   String 
    s   =   Inetl.OpenURL("ftp://ftp.microsoft. com",   icString) 
    txtListing.Text   =   s 

    Информацию относительно установки свойства AccessType см. в разделе 
"Программирование асинхронных операций". 

    11.2.5. Использование элемента управления WebBrowser 

    Элемент управления WebBrowser позволяет создавать средства просмотра для 
работы с файлами HTML или загрузки элементов управления ActiveX. 
    Элемент управления WebBrowser — in-process сервер СОМ. Он должен 
применяться внутри некоторого другого процесса, но в него можно загружать 
документы Автоматики. Элемент управления WebBrowser реализует гиперссылки и 
предоставляет объекты-классы СОМ, которые могут использоваться другими компонентами. 
    Элемент управления WebBrowser придает приложению-клиенту возможности 
просмотра документов, поиска и загрузки. Он позволяет пользователям 
просматривать узлы World Wide Web и папки в локальной файловой системе или сети. 
    Элемент управления WebBrowser поддерживает навигацию посредством 
гиперссылок и перехода по URL. Элемент управления поддерживает список 
хронологии, который позволяет пользователям перемещаться вперед и назад по 
ранее посещенным сетевым узлам, папкам и документам. 
    Элемент управления WebBrowser включает поддержку работы с документами 
HTML. Он также является контейнером для документов ActiveX и может загружать 
любой документ ActiveX. 
    Внутри элемента управления WebBrowser могут быть открыты и оперативно 
отредактированы интенсивно форматированные документы, такие, как электронная 
таблица Microsoft Excel или документ Microsoft Word. 


    Глава 11. Создание приложений для Internet	273 

    11.2.6. Применение элемента управления WebBrowser 
    Некоторые из возможных применений элемента управления WebBrowser: 
    •   осуществление навигации и просмотр документов HTML в World Wide Web 
или внутренних сетях; 
    •   предоставление универсального окна, в котором пользователи могут 
редактировать все типы документов ActiveX; 
    •   создание настроенного приложения Web. 

    Добавление элемента управления WebBrowser к проекту Visual Basic 

    Если элемента управления WebBrowser еще нет на панели элементов, его можно 
подключить к проекту в окне Components. В этом окне нужно выбрать элемент 
Microsoft Internet Controls. 

    Примечание: Первоначально при размещении элемента управления в форме он не 
имеет никакого видимого интерфейса, который должен быть построен 
разработчиком. Элемент управления WebBrowser обеспечивает лишь 
функциональность средства просмотра. 


    11.2.7. Основные операции с WebBrowser 

    Ниже представлены методы, свойства и события элемента управления 
WebBrowser, которые можно использовать для создания средства просмотра Web. 
Процедура активирования этих возможностей включает следующие шаги: 
    1. В методе Navigate специфицировать требуемый ресурс для доступа. Ресурс 
должен быть указан в формате URL. 
    2. Разместить в элементе управления WebBrowser требуемые элементы 
управления и в событии NavigateComplete вывести в этих элементах управления 
имя и URL ресурса, используя свойства LocationURL и LocationName. 
    3. Используя методы GoBack, GoForward, GoSearch и GoHome элемента 
управления, запрограммировать процедуры навигации к узлам, включенным в списке 
History (хронология). 
    4. Используя свойство Busy, определить, находится ли элемент управления 
WebBrowser в процессе навигации к новому расположению или в процессе загрузки 
файла. С помощью метода Stop дать возможность отменить навигацию или загрузку 
до ее завершения. 
    5. С помощью методов Refresh и Refresh2 запрограммировать быструю 
перезагрузку страницы, которая уже была показана. 
    6. Если выполняется загрузка из Web-страницы, используя события 
DownloadBegin, ProgressChange и DownloadComplete, показать на экране прогресс 
операции загрузки в строке состояния. 

    11.2.8. Программирование навигации в WebBrowser 

    Большая часть работы при создании средства просмотра Web заключается в 
организации переходов от одной Web-страницы к следующей. 
    Вначале для клиента необходимо специфицировать начальную страницу. Обычно 
это делается в событии Form_Load с помощью метода Navigate. 
    В следующем фрагменте кода показано использование метода Navigate для 
перехода по URL: 

    Private   Form_Load() 
    WebBrowser.Navigate _ 
    URL:="http://directoryl/pagel.htm" End Sub 
    'О Зак. 136 


    274	Установление соединений FTP и HTTP в Internet 

    Далее нужно вывести на экран URL и имя узла, к которому выполнен переход. 
Обычно это делается в событии NavigationComplete. 
    В следующем фрагменте URL помещается в поле со списком на форме, а имя 
страницы выводится во второй панели строки состояния: 

    Private  Sub  wb_NavigateComplete(ByVal  URL As   String) 
    cboURL  =  WebBrowserl.LocationURL 
    sbMain.Panels(2)   =  WebBrowserl.LocationName End  Sub 


    Программирование кнопок навигации 

    Следующий шаг — добавить программный код для кнопок Назад, Вперед, Стоп и 
Обновить. Процедура здесь одинакова для всех четырех кнопок. Командные кнопки 
необходимо поместить в форму или панель инструментов и в событии Click для 
каждой кнопки внести оператор, который вызывает соответствующий метод. 
    В следующем примере метод GoBack используется в событии Click кнопки Назад: 

    Private   Sub   cmdGoBack_Click() 
    WebBrowserl.GoBack End  Sub 


    Остановка навигации 

    Для остановки навигации используется свойство Busy и метод Stop. 
    В следующем фрагменте кода показано, как программировать командную кнопку 
с помощью конструкции If...Then для определения состояния элемента управления 
WebBrowser и останова операции, если он занят: 

    Private   Sub   cmdStop_Click() If  WebBrowserl.Busy  Then 
WebBrowserl.Stop WebBrowserl.GoBack End   If End  Sub 


    Перезагрузка страницы 

    Чтобы перезагрузить страницу, которая уже была показана, можно 
использовать метод Refresh или метод Refresh2. 
    Метод Refresh перезагружает страницу, которая в данный момент выведена на 
экран, отбирая данные из кэша компьютера клиента. Метод Refresh2 принимает 
параметр, определяющий уровень регенерации, которую нужно выполнить. При 
использовании метода Refresh2 страница может регенерироваться из кэша или с 
сервера, откуда она была загружена первоначально. 
    В следующем примере кода метод Refresh используется для перезагрузки 
страницы, в данный момент отображаемой средством просмотра: 

    Private   cmdRefresh_Click() 
    WbBrowserl.Refresh End  Sub 


    Отображение прогресса загрузки 

    Если в приложении реализуются возможности загрузки данных, то, используя 
события DownloadBegin, ProgressChange и DownLoadComplete, можно дать 
пользователю информацию относительно процесса загрузки. 


    Глава 11. Создание приложений для Internet	275 

    Сначала для инициализации строки прогресса программируется событие 
DownloadBegin (используются элементы управления ProgressBar и StatusBar): 

    Private  Sub WebBrowserl__DownloadBegin () 
    '   Инициализировать   ProgressBar 
    pbMain.Move   sbMain.Panels(1).Left,    10,   _ 
    sbMain.Panels(1).Width,   sbMain.Height   -   10 
    pbMain.Value   =   0 
    pbMain.Min   =   0 
    pbMain.Max  =   100 
    pbMain.Visible   =  True End  Sub 

    Затем в событии ProgressChange вычисляется статус прогресса и это значение 
выводится на экран. Например: 

    Private   Sub  wb_ProgressChange(ByVal   Progress  As   Long,   _ 
    ByVal   ProgressMax  As   Long) '   Изменить   состояние   ProgressBar If  
 Progress   <>   -1   And  ProgressMax   <>   0   Then 
    pbMain.Value  =  Progress   *   100   /   ProgressMax End   If End  Sub 

    Используя событие DownloadComplete, можно сообщить пользователю о 
завершении загрузки. В следующем фрагменте по завершении загрузки строка 
прогресса установкой свойства Visible в False скрывается: 

    Private   Sub  WebBrowserl_DownloadComplete() '   Скрыть   ProgressBar 
    pbMain.Visible   =   False End  Sub 


    11.3. Использование Автоматики с Internet Explorer 

    С помощью элемента управления WebBrowser можно управлять всеми аспектами 
интерфейса средства просмотра. Однако в некоторых ситуациях, возможно, 
выгодней будет создать экземпляр Internet Explorer, чтобы избежать процедур 
программирования элемента управления. 
    Ниже представлен объект InternetExplorer и показано использование его 
через механизмы Автоматики. Так как объект InternetExplorer очень похож по 
функциональным возможностям на элемент управления WebBrowser, здесь 
описываются дополнительные черты объекта InternetExplorer. 

    11.3.1. Объект InternetExplorer 

    В Visual Basic можно создавать экземпляр Internet Explorer и использовать 
его как компонент ActiveX. Internet Explorer имеет объектную модель, методы и 
свойства которой предоставляются для использования другими приложениями. 
    Объект InternetExplorer реализован как in-process класс (на базе DLL) 
Компонентной Объектной Модели. 

    Свойства объекта InternetExplorer 

    Internet Explorer поддерживает те же свойства и методы, что и элемент 
управления WebBrowser, наряду с несколькими, которые WebBrowser не 
поддерживает. Почти все эти дополнительные свойства относятся к 
пользовательскому интерфейсу. 


    276 Работа с Personal Web-Server 

    В следующей таблице приведены дополнительные свойства, поддерживаемые 
объектом InternetExplorer: 

    Свойство	Описание 

    FullName	Определяет полностью квалифицированный путь исполняемого файла, 
который содержит приложение Internet Explorer. 
    FullScreen	Указывает, является ли режим окна Internet Explorer 
полноэкранным или нормальным.                                                                                                     ! 
    MenuBar	Определяет видимость строки меню Internet Explorer. 
    Name	Возвращает имя Internet Explorer Microsoft. 
    StatusBar	Определяет видимость строки состояния Internet Explorer. 
    StatusText	Устанавливает или возвращает текст для строки состояния. 
    Toolbar	Определяет видимость панели инструментов Internet Explorer.                 | 
    Объект InternetExplorer также поддерживает метод Quit. 
    Информацию относительно базовых методов, свойств и событий, доступных для 
объекта InternetExplorer, см. в разделах "Основные операции с WebBrowser" и 
"Программирование навигации в WebBrowser". 
    Чтобы Internet Explorer можно было использовать как компонент ActiveX, к 
проекту Visual Basic необходимо добавить ссылку на компонент Microsoft 
Internet Controls. Это можно сделать в окне диалога References (команда 
References меню Project). 
    После установления ссылки объект InternetExplorer можно использовать точно 
так же, как и любой другой объект в Visual Basic: устанавливать или возвращать 
свойства и вызывать методы объекта InternetExplorer. 
    В следующем фрагменте кода создается объектная переменная и экземпляр 
Internet Explorer: 

    Dim  browser  As   InternetExplorer 
    Set  browser  =  CreateObject("InternetExplorer.Application") 

    Как и другие компоненты ActiveX, при запуске объект Internet Explorer 
является невидимым. Чтобы сделать его видимым, необходимо установить в True 
свойство Visible. 
    В следующем примере выполняется навигация к узлу Web www.Microsoft.com: 

    browser.Visible   =   True 
    browser.Navigate   "http://www.Microsoft.com" 

    Этот и предыдущий код можно внести либо в процедуру Sub Main() 
стандартного модуля проекта, либо в процедуру события элемента управления в 
форме, например, кнопки. 

    11.4. Работа с Personal Web-Server 

    Microsoft Personal Web-Server для Windows 95 превращает любой компьютер 
Windows 95 в Web-сервер и позволяет выполнять простую публикацию личных 
Web-страниц. Простой в установке и управлении, Personal Web-Server (PWS) 
упрощает совместное использование информации в корпоративных внутренних сетях, 
а также в Internet. PWS оптимизирован для разработки, тестирования и 
развертывания Web-приложений. 
    Personal Web-Server предназначен для использования на рабочей станции, и 
для его эксплуатации не предъявляется всех системных требований полного 
сервера Web. Personal Web-Server доступен из ряда источников — он поставляется 
с Windows 95 и может быть загружен через Internet. 


    Глава 11. Создание приложений для Internet	277 


    11.4.1. Конфигурирование Personal Web-Server 

    Для тестирования Personal Web-Server имеется несколько сценариев. 
Тестировать Personal Web-Server можно, когда он: 
    •	соединен с Internet; 
    •	соединен с внутренней сетью; 
    •	находится в автономной конфигурации. 

    Конфигурирование Personal Web-Server для автономного компьютера 

    Специальный случай установки и тестирования Personal Web-Server — 
выполнение его на автономном компьютере. Это позволяет тестировать приложения 
для Internet, даже если компьютер не соединен с Internet или внутренней сетью. 
    Для выполнения описываемой ниже процедуры нужно иметь сетевой адаптер, 
сетевые драйверы и TCP/IP, установленные на компьютере, который будет работать 
в автономном режиме. Перед запуском процедуры необходимо установить Personal Web-Server. 
    Примечание: Эту процедуру не рекомендуется выполнять, если компьютер 
соединен с сетью, так как это обусловит проблемы для данного компьютера и 
других компьютеров в сети. 

    Конфигурирование сетевых установок 

    Перед запуском этой процедуры следует закрыть все открытые приложения. 
Изменения установок обретут силу после перезапуска компьютера. 
    Примечание: В скобках — названия компонентов интерфейса локализованной 
версии Windows 95. 
    1. Открыть Control Panel (Панель управления) и дважды щелкнуть пиктограмму 
Network (Сеть). 
    2. В окне диалога Network открыть вкладку Configuration (Конфигурация). 
Выбрать компонент TCP/IP для сетевого адаптера, установленного на компьютере, 
и затем щелкнуть кнопку Properties (Свойства) (рис. 11.3.). 
    3. После завершения Шага 2 открывается окно диалога TCP/IP Properties 
(Свойства: TCP/IP). Чтобы назначить IP адрес компьютеру, открыть вкладку IP 
Address. Далее: 
    а)  Записать текущие установки, чтобы можно было вернуть компьютер к 
оригинальному состоянию. 
    6) Выбрать опцию Specify an IP address (Указать адрес IP явным образом). 
    в) Ввести в разделы поля определенный адрес IP (например, 123.45.6.78). 
    г)   Оставить поле Subnet Mask (Маска подсети) пустым; значение будет 
назначено автоматически (рис. 11.4). 
    4. Чтобы сделать автономный компьютер сервером WINS (Windows Integrated 
Name Server), открыть вкладку WINS Configuration (Конфигурация WINS). Далее: 
    а)  Записать текущие установки, чтобы можно было вернуть компьютер к 
оригинальному состоянию. 
    б)  Выбрать опцию Enable WINS Resolution (Включить распознавание WINS). 
    в)  В полях ввести Primary WINS Server (Главный сервер WINS) и Secondary 
WINS Server (Второй сервер WINS) тот же адрес, что и в Шаге Зв (123.45.6.78). 
    г)   Поле Scope ID (Код области) оставить пустым. 
    д) Щелкнуть ОК, чтобы подтвердить изменения установок (рис. 11.5). 


    278 Работа с Personal Web-Server 

    Рис. 11.3. Экран окна диалога Network. 
    Рис. 11.4. Установки окна диалога TCP/IP Properties для шага 3. 


    Глава 11. Создание приложений для Internet 279 


    Рис. 11.5. Установки окна диалога окна TCP/IP Properties для шага 4. 
    Рис. 11.6. Установки окна диалога TCP/IP Properties для шага 5. 


    280 Пример: Создание приложения для работы в Internet 

    5. Если требуется обеспечить возможность при тестировании приложений на 
автономном компьютере использовать имена компьютеров вместо адресов IP, 
следует также изменить установки конфигурации DNS. Чтобы изменить эти 
установки, нужно открыть вкладку DNS Configuration (Конфигурация DNS). Далее: 
    а)  Записать текущие установки, чтобы можно было вернуть компьютер к 
оригинальному состоянию. 
    б) Выбрать опцию Enable DNS (Включить DNS). 
    в) Ввести имя компьютера в поле Host (Главный компьютер). 
    г)   Оставить остальные поля пустыми (рис. 11.6). 
    6. Нажать ОК, чтобы закрыть окно диалога Network (Сеть), и далее нажать 
Yes на запрос о перезапуске компьютера. 

    11.4.2. Запуск Personal Web-Server 

    1. Открыть Control Panel, дважды щелкнуть пиктограмму Personal Web-Server 
и удостовериться, что Personal Web-Server, службы FTP и HTTP работают. 
    2. Открыть вкладку Startup и удостовериться, что Personal Web-Server 
запущен. Если нет — щелкнуть кнопку Start. 
    3. Открыть вкладку Services и удостовериться, что статус службы FTP — 
Running. Если нет — выбрать FTP из списка Services и щелкнуть кнопку Start. 
    4. На вкладке Services удостовериться, что статус службы HTTP — Running. 
Если нет — выбрать HTTP из списка Services и щелкнуть кнопку Start. 

    11.5. Пример: Создание приложения для работы в Internet 

    В следующем примере реализуются положения и методы, рассмотренные в 
разделах главы. 

    11.5.1. Формирование с использованием 


    WebBrowser приложения — средства просмотра 

    На первом этапе создается новый проект, элементы пользовательского 
интерфейса — панель инструментов, строка состояния — и обеспечиваются 
возможности навигации в Web. В строке состояния также выводится строка 
прогресса (рис. 11.7). 
    1. Создать новый проект Standard EXE. 
    2. В основной форме добавить элементы управления Toolbar, ImageList, 
Statusbar и Prog-ressBar. Все эти элементы управления содержатся в компоненте 
Microsoft Windows Common Controls 5.0, который необходимо подключить к проекту. 
    3. Для элемента управления ProgressBar свойство Visible установить в False. 
    4. Добавить к форме элемент управления WebBrowser. Этот элемент управления 
содержится в компоненте Microsoft Internet Controls. 

    Проектирование панели инструментов 

    1. Через страницу свойств (окно диалога Property Pages) элемента 
управления Toolbar расположить в панели инструментов пять функциональных 
командных кнопок. Перед этим создать с левого края панели инструментов 
кнопку-заполнитель (стиль tbrPlaceholder) шириной, достаточной для размещения 
в панели инструментов поля со списком. 


    Глава 11. Создание приложений для Internet 281 


    Рис. 11.7. Компоненты пользовательского интерфейса окна WebBrowser. 

    2. Добавить к панели инструментов поле со списком, в которое пользователи 
смогут вводить новые URL и в котором будут храниться более ранние URL. 
Добавить для поля со списком соответствующую надпись. 
    3. Добавить к элементу управления ImageList графические образы для 
пиктограмм кнопок. Ассоциировать Toolbar с элементом управления ImageList 
(вкладка General страницы свойств элемента управления Toolbar). 

    Рис. 11.8. Добавление пиктограмм для кнопок панели инструментов. 


    282 Пример: Создание приложения для работы в Internet 

    Назначение элементов управления панели инструментов: 

    Элемент управления	Назначение 

    Кнопка "Стоп"	Остановка асинхронной операции Web-Browser. 
    Кнопка "Назад"	Перейти к предыдущей странице, показанной в средстве 
просмотра Web. 
    Кнопка "Вперед"	Перейти к следующей странице по хронологии. 
    Кнопка "Начальная страница"	Перейти к начальной странице, 
специфицированной в системном реестре. 
    Кнопка "Поиск"	Перейти к странице поиска в Web, специфицированной в 
системном реестре. 

    Проектирование строки состояния 

    1. Установить для свойства AutoSize первой панели значение sbrContent. Это 
позволит регулировать размер панели, основываясь на размере выводимого текста, 
но с минимальной шириной, специфицированной свойством MinimumWidth. В этой 
панели будет выводиться элемент управления ProgressBar. 
    2. Вставить вторую панель, в которой будет выводиться заголовок текущей 
страницы, отображаемой в средстве просмотра. Установить для свойства AutoSize 
значение sbrSpring, чтобы размер базировался на доступной ширине строки состояния. 

    11.5.2. Программирование приложения 

    Следующий шаг — написание для приложения исходного программного кода. 
Здесь же показан вывод в панели строки состояния строки прогресса операции и 
активирование других окон приложения. 

    Примечание: В приводимом примере не описываются процедуры обработки 
ошибок. Однако при выполнении многих из операций, выполняемых приложением, 
могут происходить сбои, например при переходе по недостоверному URL Поэтому 
для надежной работы в таких приложениях необходимо обеспечить обработку ошибок. 


    Инициализация элемента управления WebBrowser 

    1. Добавить программный код перехода к начальной странице: 
    а)  Объявить строковую переменную уровня формы, которая будет содержать 
имя начальной страницы. 
    6) В событии Form_Load в операторе с функцией GetSetting извлечь 
умолчательную начальную страницу из системного реестра. Значения параметров 
оператора перечислены в следующей таблице: 

    Параметр	Значение 

    appname	lAwareApp 
    section	Startup 
    key	StartPage 
    default	HomePage.HTML в каталоге приложения (см	App.Path). 

    в) Используя метод Navigate объекта WebBrowser, вывести начальную страницу 
на экран. 
    г)   В событии Form_Unload, используя оператор SaveSetting, сохранить имя 
начальной страницы в системном реестре. 


    Глава 11. Создание приложений для Internet	283 

    2. Смасштабировать элемент управления WebBrowser в соответствии с размером формы: 
    а) Добавить процедуру обработки для события Form_Resize. 
    б) Настроить размер элемента управления WebBrowser так, чтобы он заполнил 
полотно формы между элементом управления Toolbar и элементом управления StatusBar. 

    Программирование навигации в WebBrowser 

    1. Добавить код для обработки URL в поле со списком: 
    а)  Внести код в процедуру обработки события KeyPress поля со списком. 
    б) Если значение KeyPress — возврат каретки (значение ASCII 13) и текст в 
поле редактирования поля со списком не пустая строка, использовать метод 
Navigate элемента управления WebBrowser для вывода специфицированного URL и 
метод Addltem — для добавления URL к списку. 
    в) Добавить процедуру обработки события Click поля со списком. 
    г)   Выполнить навигацию к URL, выбранному в поле со списком. 
    2. Запрограммировать кнопки навигации: 
    а) Если средство просмотра занято обработкой (свойство Busy), в событии 
ButtonClick панели инструментов для кнопки Стоп остановить текущую операцию и 
вернуться к предыдущему URL 
    б) В событии ButtonClick для кнопки Назад вызвать метод GoBack объекта 
WebBrowser. Используя соответствующие методы, повторить этот шаг для кнопок 
Вперед, Начальная страница и Поиск. 
    В следующем примере показана обработка нажатий кнопок панели инструментов: 

    Private Sub tlbWeb_ ButtonClick(ByVal Button As Button) Select Case 
Button.Key Case "Back" 
    ' Выполнение перехода к предыдущей странице Case "Forward" 
    ' Переход к следующей странице хронологии Case Else 
    ' Обработка других случаев End Select End Sub 


    Программирование элемента управления ProgressBar 

    1. Сделать ProgressBar подчиненным элемента управления Statusbar. Это 
позволит выводить элемент управления ProgressBar поверх элемента управления 
StatusBar и располагать его, основываясь на координатах элемента управления StatusBar: 
    а) Добавить к проекту стандартный модуль. 
    6) В стандартном модуле добавить оператор объявления для SetParent API. 
Так как это функция Win32, для написания правильного оператора Declare можно 
использовать API Text Viewer, который поставляется с Visual Basic (см. главу 6 
"Работа с библиотеками динамической компоновки"). 
    в) В событии Form_Load, используя SetParent API, установить в качестве 
родителя окна элемента управления ProgressBar окно элемента управления StatusBar. 


    284 Пример: Создание приложения для работы в Internet 

    2. В течение операции загрузки отображать и изменять элемент управления ProgressBar: 
    а) Добавить процедуру обработки для события DownloadBegin элемента 
управления WebBrowser. 
    б) Инициализировать элемент управления ProgressBar минимальным значением 
0, максимальным значением 100 и начальным значением 0. 
    в) Заполнить элементом управления ProgressBar первую панель элемента 
управления StatusBar и установить его свойство Visible в True. 
    3. По окончании загрузки скрыть элемент управления ProgressBar: 
    а) Добавить процедуру обработки для события DownloadComplete элемента 
управления WebBrowser. 
    б) Установить в False свойство Visible элемента управления ProgressBar. 
    4. Изменение элемента управления ProgressBar в течение операции загрузки: 
    а) Добавить процедуру обработки для события ProgressChange элемента 
управления WebBrowser. 
    6) Если параметр Progress — не -1 и параметр ProgressMax — не 0, 
установить свойство Value элемента управления ProgressBar равным проценту 
выполнения операции. 

    Примечание: Процент выполнения вычисляется, как значение Progress, 
деленное на MaxProgress и умноженное на 100. 

