Создание
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. |
Свойство 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-сервера