Visual Basic 6. Руководство разработчика

       

Создание


Internet-совместимых элементов управления

С приходом эры Интернет и объединения рабочего стола с Web, что демонст­рируют Active Desktop и последняя версия Internet Explorer, средства управления ActiveX должны обладать возможностью подсоединения к Интернет и загрузки информации с HTTP-серверов. Независимо от того, как много информации можно получить с помощью имеющихся средств, на сервере всегда остается новейшая информация. Интересная, и во многих случаях необходимая, возможность, которую можно добавить к элементам управления - соединение с HTTP и загрузка информации по запросу.

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

UserControl_AsyncRead Target, AsyncType [, PropertyName]

Строка

Target определяет адрес, по которому находятся данные. Это URL удаленного HTTP-сервера или путь к файлу на локальном или сетевом диске. Например, URL - http://www.servername.corn/Updates/Latest.txt, путь к локальному файлу - file://m:\Software\Updates\Latest.txt.

Тип файла для загрузки определяется аргументом AsyncType, значения которого перечислены в табл 21.5.

Таблица 21.5. Возможные значения аргумента AsyncType метода AsyncRead

Константа

Описание

vbAsyncTypeFile

vbAsyncTypeByteArray

vbAsyncTypePicture

Данные находятся в файле, который можно будет открыть с помощью Visual Basic

Данные в виде массива байтов. Приложение должно обрабатывать элементы массива

Данные — объект

Picture (изображение)

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




и другими свойствами, подгружаемыми параллельно. Параметр PropertyName — произвольное имя. Его единственная функция — служить идентификатором загружаемых данных.

Когда данные запрашиваются методом AsyncRead, управление возвращается приложению, продолжающему обработку других задач. Загрузка требует времени, поэтому метод AsyncRead выполняется как асинхронная операция. Когда загрузка завершается, происходит событие AsyncReadComplete. Код обработчика события AsyncReadComplete имеет следующий вид.

Sub UserControl_AsyncReadComplete(PropertyValue As AsyncProperty)

Аргумент

PropertyValue является объектом, свойства которого описаны в табл. 21.6.

Таблица 21.6. Свойства объекта AsyncProperty

Константа

Описание

Value

PropertyName

AsyncType

Переменная, содержащая результат асинхронной загрузки.

Имя свойства, определяемое последним аргументом метода AsyncRead.

Целочисленное значение, определяющее тип данных, в свойстве Value. Принимает такие же значения, как и аргумент AsyncType метода AsyncRead.

Событие AsyncReadComplete происходит даже в случае, если во время передачи возникает ошибка. Если загрузка не завершилась успешно, то при обращении к свойству Value объекта AsyncProperty происходит ошибка исполнения. Необходимо включать оператор On Error в код обработчика события AsyncReadComplete, что­бы перехватить ошибки при загрузке.

Свойство Value является фактическим значением загружаемого свойства. Если тип запрошенных данных — VbAsyncTypeFile, то свойство Value — имя временного файла, который Visual Basic создает на диске в папке Temp. Для работы с таким файлом используются стандартные функции ввода/вывода. Если тип запрошенных данных - VbAsyncType Picture, то свойство Value является объектом Picture, содер­жащим битовое представление. Можно присвоить свойство Value свойству Picture элемента управления (или объекту UserControl) или преобразовать битовое представление с помощью метода PaintPicture. Если тип запрошенных данных — VbAsyncTypeByteArray, то свойство Value



является массивом байтов.

Прекратить асинхронную загрузку данных можно с помощью метода CancelAsyncRead. Метод CancelAsyncRead имеет следующий синтаксис.

UserControl.CancelAsyncRead PropertyName

PropertyName — это имя загружаемого свойства (последний аргумент метода AsyncRead). Если PropertyName не был передан при последнем вызове метода AsyncRead, то его выполнение отменяется.

VB6 в действии: разработка элемента управления

Rates


Асинхронная разгрузка значений свойства из Интернет демонстрируется в проекте Rates (Курсы обмена валюты) (рис. 21.12). Rates Control Demo имеет гра­фический интерфейс, содержащий элемент управления ListBox, в котором отобра­жаются последние курсы валюты Rates Control Demo обеспечивает методы поиска курсов различных валют, чтобы элемент управления мог остаться скрытым.



Рис. 21.12. Rates Control Demo: загрузка и вывод данных из Интернет с HTTP-сервера


Содержание раздела