Архитектура Microsoft Windows для разработчиков

         

Атрибуты тэга <OBJECT>


К атрибутам тэга <OBJECT> относятся CLASSID, ID и CODEBASE, а также WIDTH, HEIGHT, ALIGN, HSPACE, VSPACE и BORDER.

CLASSID

Когда элемент управления ActiveX устанавливается на компьютер пользователя, он регистрируется в реестре посредством уникального идентификатора класса. Атрибут CLASSID, содержащий идентификатора класса, — единственный обязательный атрибут тэга <OBJECT>.

Синтаксис Вот синтаксис атрибута CLASSID:

CLASSID = "clsid:12345678-1234-1234-1234-123456789012"

Пример Ниже приведен тэг <OBJECT> для элемента управления Calendar:

<OBJECT

classid="clsid:8E27C92B-1264-101C-8A2F-040224009C02"

>

</OBJECT>

ID

Атрибут ID позволяет обращаться к объекту из кода VBScript.

Пример Этот код иллюстрирует установку атрибута ID элемента управления Calendar:

<OBJECT

classid="clsid:8E27C92B-1264-101C-8A2F-040224009C02"

id=cldCalendar2

>

</OBJECT>

CODEBASE

Атрибут CODEBASE представляет собой указатель ресурса файла, содержащего реализацию объекта.

WIDTH, HEIGHT, ALIGN, HSPACE, VSPACE и BORDER

Эти атрибуты определяют, как объект будет размещен на HTML-странице, задают его размеры и наличие рамки.



Идентификация объектов


Чтобы воспользоваться объектом в сценарии клиентской части, сначала постройте объект, а затем присвойте ему имя для создания событийных процедур и для обращения к свойствам и методам объекта. Синтаксис присвоения имени зависит от типа объекта.





Использование переменных


Как и Visual Basic, VBScript поддерживает использование переменных, а кроме того, — типы данных, область видимости и константы. Переменная — это удобная метка, обозначающая область в памяти компьютера, где Вы можете хранить информацию во время работы сценария. Например, созданная Вами переменная ClickCount покажет, сколько раз пользователь щелкнул объект на данной Web-странице. Где именно в памяти хранится переменная, неважно; имеет значение лишь то, что, обратившись к ней по имени. Вы можете узнать или изменить ее значение.



Использование свойств и методов элементов управления


Обращение к свойствам и вызов методов — самые частые задачи, выполняемые событийными процедурами объектов.



Извлечение идентификатора класса объекта


Visual InterDev и Frontpage 98 автоматически просматривают реестр в поисках идентификатора класса и записывают его в создаваемый тэг <OBJECT>. Вы можете определить ID класса элемента управления вручную, используя одно из перечисленных ниже средств.

Редактор реестра (RegEdit) — позволяет изменять параметры реестра Вашей системы и, в частности, просматривать и копировать значения идентификаторов класса объектов.

Утилита OLE Viewer (01e2View) — входит в состав Win32 Software Development Kit. Командой Copy HTML <объект> Tag to Clipboard меню Object можно скопировать тэг <OBJECT> в буфер обмена, а затем вставить его в HTML- или активную серверную страницу.

> Поиск идентификатора класса управляющего элемента Microsoft Calendar

Запустите Regedit.exe.

Откройте раздел HKEY_CLASSES_ROOT.

В меню Edit выберите команду Find.

В поле Find What наберите Calendar Control 8.0 и нажмите Find Next.

ID класса элемента управления Calendar будет показан в левой части окна в виде открытой папки. Он будет выглядеть примерно так:

{8E27C92B-1264-101C-8A2F-040224009C02}

Закройте редактор реестра.



Java-апплеты


Чтобы присвоить имя Java-апплету, нужно установить атрибут NAME тэга <APPLET>.

Пример Здесь Java-апплету Outline присваивается имя myoutline:

\ <APPLET

CODE=Outline.class

NAME=myoutline

HEIGHT=150

WIDTH=200>

</APPLET>



JavaScript


JavaScript реализован Microsoft под названием JScript. Этот язык подобен С: в его основе лежит Java — язык программирования, разработанный компаниями Sun Microsystems и Netscape. JavaScript поддерживают как Netscape Navigator, так и Internet Explorer.

Примечание Чтобы упростить разработку сценариев, корпорация Microsoft поставляет бесплатный отладчик Microsoft Script Debugger (для работы в Microsoft Internet Explorer). Он позволяет тестировать Web-приложения и поддерживает как JavaScript, так и VBScript.



Языки разработки сценариев


Для разработки Web-приложений можно использовать любой язык создания сценариев, для которого имеется соответствующий интерпретатор. Самые популярные языки создания сценариев — Microsoft VBScript и JavaScript.

VBScript

Подмножество языка Microsoft Visual Basic — Microsoft Visual Basic Scripting Edition (VBScript) — не зависит от регистра символов и совместимо снизу вверх с Visual Basic for Applications. Microsoft Internet Explorer поддерживает VBScript средствами VBScript Interpreter — быстрого кросс-платформенного интерпретатора; лицензию на него бесплатно выдает компания Microsoft. Благодаря широкой популярности Visual Basic во всем мире, изучение VBScript не представляет особого труда.



Элементы управления ActiveX


Чтобы присвоить имя элементу управления ActiveX, Вы устанавливаете атрибут ID тэга <OBJECT>.

Пример В этом коде элементу управления ActiveX Label присваивается имя IblOccupation:

<OBJECT

classid="clsid:99B42120-6EC7-11CF-A6C7-OOAAOOA47DD2"

id=lbl0ccupation>

</OBJECT>



Константы


Константы в VBScript объявляются оператором Const. Вы можете создавать строковые или числовые константы с описательными именами и присваивать им литеральные значения.

Пример Здесь оператор Const применяется для объявления двух констант и присвоения им значений:

Const MYSTRING = "Моя строка" Const MYAGE = 37

Примечание Чтобы отличать константы от переменных, набирайте их имена прописными символами.



Массивы


VBScript поддерживает и массивы. Все они в VBScript индексируются начиная с нуля, то есть индекс первого элемента любого массива — ноль.

Пример Здесь объявляется массив для хранения 11 значений:

Dim Students(10)



Назначить событийную процедуру при создании объекта


В тэге HTML, создающем объект, можно указать имя события и процедуру, вызываемую при его возникновении. Раздел <SCRIPT> с объявлением процедуры должен находиться перед тэгом HTML, определяющим объект.

Этот метод полезен, если Вы хотите, чтобы события нескольких объектов вызывали одну и ту же процедуру. Его средствами Вы можете связать событийные процедуры со стандартными элементами управления HTML.

Пример Здесь процедура ProcessOrder вызывается, когда пользователь щелкает кнопку-переключатель.

<SCRIPT LANGUAGE=VBScript>

Sub ProcessOrder ()

...

End Sub

</SCRIPT>

<INPUT TYPE=RADIO NAME=RadioGroup onClick="ProcessOrder">

Этот метод поддерживают как VBScript, так и JavaScript.



Объект Err


Чтобы обнаружить ошибки времени выполнения, проверяйте свойство Number объекта Err после каждого оператора, который может их вызвать. Если значение свойства Number равно нулю, ошибки нет; ненулевое значение свидетельствует о ее возникновении.

Чтобы получить информацию об ошибке, обратитесь к свойству Description. Когда возникает ошибка, объект Err хранит информацию о ней до тех пор, пока не появится следующая. При успешном выполнении выражения объект Err не очищается, поэтому после возникновения ошибки нужно уничтожить информацию о ней, вызвав метод Clear объекта Err.

Пример Здесь показана общая схема обработки ошибок:

Sub cmdSubmit_OnClick

On Error Resume Next

'Выражение, которое может вызвать ошибку

If Err <> 0 Then

Msgbox "Произошла ошибка. " & Err.Description

Err.Clear

End if

End Sub

Чтобы проверить Ваш код обработки ошибок, можете специально создать ошибочную ситуацию средствами метода Raise объекта Err.

VBScript использует не все возможные номера для идентификации ошибок. Если Вы хотите поверить собственный код, начните нумерацию ошибок в нем с 65535 (максимально допустимое значение) с последующим уменьшением номеров.

Пример Этот код вызовет ошибку с номером 65 000:

Err.Raise 65000

Управление объектами на VBScript

Сценарии позволяют управлять объектами и реагировать на события (рис. 9.2). Прежде чем создать такой сценарий, необходимо идентифицировать объекты на Web-странице, например встроенные элементы управления в формах: кнопки, текстовые поля и т.п. Кроме объектов в формах, на странице могут находиться элементы управления ActiveX и Java-апплеты.

Рис.9.2 Объекты на Web-странице, которыми можно управлять средствами VBScript



Область видимости данных


Область видимости — это часть Web-страницы, в пределах которой можно обращаться к данной переменной. В VBScript используются две области видимости:

локальная и уровня сценария.

Если Вы объявили переменную в процедуре, она имеет локальную область видимости и доступна только внутри данной процедуры. Когда процедура завершается, переменная выходит из области видимости.

Если переменная объявлена вне процедуры, она доступна всем процедурам на Web-странице или, другими словами, имеет область видимости уровня сценария. Такие переменные доступны все время, пока Web-страница отображается в программе просмотра.

Когда переменная объявляется на уровне сценария, она дополнительно может быть объявлена открытой (ключевым словом Public) или закрытой (Private). Переменные, объявленные с помощью ключевого слова Public, доступны всем процедурам всех сценариев страницы. Закрытые переменные доступны только в рамках сценария, где они объявлены. Переменные, объявленные оператором Dim на уровне сценария, доступны всем его процедурам; переменные, объявленные на уровне процедуры, доступны только в ней.

Средствами операторов Dim, Public и Private с пустыми круглыми скобками можно объявить динамические массивы. Фактическая размерность и длина динамического массива в процедуре задается оператором ReDim. Если Вы попытаетесь изменить размерность массива, размер которого явно указан в операторе Private, Public или Dim, возникнет ошибка.

Синтаксис При объявлении переменных используется следующий синтаксис:

Dim имя_переменной[([размерности])]

Public имя_переменной[([размерности])]

Private имя_переменной[([размерности])]

Пример Здесь переменная Х доступна во всех сценариях и соответствующих процедурах проекта, переменная Y — только в текущем сценарии, а переменная Z — лишь в подпрограмме MySub:

<SCRIPT>

Public X

Private Y

MySub()

Dim Z

End Sub

</SCRIPT>

Примечание При объявлении переменных в процедуре выражения с операторами Dim, Public и Private рекомендуется располагать в начале процедуры.


> Использование переменных в VBScript

Откройте Web-узел Exercise9 в Frontpage 98.

Откройте главную страничку в Frontpage Editor.

Поместите точку вставки в форме на Web-странице.

В меню Insert выберите команду Advanced, Script.

Введите в окне кода следующий код VBScript: Option Explicit

Private Y

Sub SetValues()

Dim X

X = 1

Y = 1

End Sub Sub Ch'angeValuesAgain( )

X = 1

Y = 1

End Sub

Щелкните кнопку Script Wizard.

Раскройте в дереве объектов объект Window и щелкните его событие OnLoad.

В окне кода введите следующий код VBScript и нажмите ОК:

SetValues

ChangeValuesAgain

В редакторе Frontpage Editor откройте вкладку Preview и просмотрите Вашу Web-страницу.

Вы получите сообщение об ошибке, гласящее, что переменная Х не определена. Это произошло потому, что Х действительна только в подпрограмме SetValues, где она была объявлена оператором Dim. Переменная Y же находится в области видимости, так как она была объявлена оператором Private вне процедуры.

Щелкните кнопку Yes, чтобы закрыть окно сообщения, и вернитесь к обычному представлению страницы.

Добавьте следующую строку кода в подпрограмму Change ValuesAgain:

Dim X

Сохраните изменения и откройте Web-страницу.

Обратите внимание, что ошибка не возникает: теперь Х находится в области видимости благодаря оператору Dim, который Вы только что добавили в подпрограмму ChangeValuesAgain.

Закройте Internet Explorer и Frontpage 98.


Обработка ошибок


В Web-страницу, как и в обычное приложение Visual Basic, можно включить сценарий обработки ошибок.



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


Синтаксис Для установки значения свойства применяется следующий синтаксис:

Объект.Свойство = Значение

Синтаксис Для извлечения значения свойства применяется синтаксис:

Значение = Объект.Свойство

Пример Здесь считывается дата, выбранная в элементе управления Calendar, вычисляется

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

поле HTML:

Sub ShipDate_Click()

Dim shiptime

shiptime = ShipDate.Value - Date ,

If shiptime < 0 Then

MsgBox "Невозможно доставить задним числом"

Elself shiptime < 5 Then

frmShip.txtCost.Value = 12

Else

frmShip.txtCost.Value = 8

End If

End Sub



Оператор On Error


Вы вправе изменить стандартный механизм обработки ошибок на Web-странице, добавив в начало сценария оператор On Error Resume Next. Он указывает программе просмотра (например, Internet Explorer) на необходимость продолжать выполнение сценария. Этим оператором нужно снабдить каждую процедуру, в которую Вы хотите включить обработку ошибок.

При возникновении ошибки Internet Explorer сохраняет информацию о ней в объекте Err. Данные о следующей ошибке заносятся в тот же объект Err, сведения же о предыдущей ошибке при этом теряются.

Чтобы отключить обработку ошибок, используйте оператор On Error GoTo 0. Internet Explorer вернется к стандартной процедуре обработке ошибок и будет сообщать о них пользователю.

Примечание VBScript не поддерживает оператор On Error GoTo <метка>, поэтому нельзя написать процедуру, которая бы автоматически вызывалась при возникновении ошибки. В результате обработку ошибок реализуют непосредственно в тексте процедур, выполняя проверку наличия ошибки после каждого оператора, который может ее вызвать.



Определение процедур


В VBScript имеется два вида процедур: подпрограммы и процедуры-функции. Как и весь код сценария, процедуры должны располагаться внутри тэга <SCRIPT>, чтобы интерпретатор сценария и другие процедуры в составе HTML-страницы могли их распознать.



Основные задачи клиентских и серверных сценариев


Клиентский сценарий выполняется на компьютере пользователя в процессе взаимодействии с Web-страницей и позволяет решать следующие задачи:

• верифицировать значения элементов управления формы;

реализовать событийные процедуры для элементов управления.

Серверный сценарий выполняется на Web-сервере до передачи страницы пользователю и позволяет:

обеспечить доступ к базе данных и возврат данных пользователю;

хранить информацию о состоянии пользователя или сеанса.

Реализация клиентских сценариев

Чтобы расширить функциональные возможности Web-страницы средствами клиентских сценариев, исходный текст сценария надо встроить в HTML-страницу в виде ASCll-текста. Встретив ее в тексте страницы, программа просмотра вызывает интерпретатор сценария, который анализирует и выполняет код. Программа просмотра должна поддерживать выполнение сценариев и их интеграцию с элементами управления ActiveX или Java-апплетами, встроенными в HTML-страницу. Если пользовательская программа просмотра не поддерживает язык, на котором написан сценарий, пользователю будут доступны не все возможности Web-страницы.



Подпрограммы


Подпрограмма — это последовательность выражений VBScript, заключенных между операторами Sub и End Sub. Она выполняет действия, но не возвращает значения. У подпрограммы могут быть аргументы (константы, переменные или выражения), передаваемые ей вызывающей процедурой.

Пример Здесь подпрограмма используется для увеличения значения переменной Sales на величину, переданную в аргументе NumSales:

Sub IncreaseSales(NumSales)

Sales = Sales + NumSales

End Sub

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

IncreaseSales 100

-или-

Call IncreaseSales(IOO)



Повышение производительности


Выполнение приложений в элементах управления, а не на Web-сервере, повышает производительность за счет уменьшения обмена с Web-сервером. Скомпилированный элемент управления ActiveX выполняется гораздо быстрее, чем сценарий или HTML-код.



Присвоить процедуре имя ИмяОбъекта_Событие


Если Вы дадите процедуре имя типа ИмяОбъекта_Событие, она будет автоматически запускаться при возникновении указанного события для данного объекта. Это — та же система именования, что и для создания событийных процедур в Visual Basic.

Пример Процедура, приведенная здесь, запускается, когда пользователь щелкает элемент управления Button1:

Sub Button1_OnClick ()

End Sub



Процедуры-функции


Процедура-функция — это последовательность выражений VBScript, заключенных между операторами Function и End Function. Процедуры-функции аналогичны подпрограммам, но, в отличие от них, способны возвращать значение. Процедура-функция может принимать аргументы (константы, переменные или выражения), передаваемые ей вызывающей процедурой. Если она не имеет аргументов, определяющий ее оператор Function должен содержать пустые скобки. Процедуpa-функция возвращает значение, присваивая его своему имени в одном или нескольких операторах. Тип возвращаемого значения — всегда Variant.

Пример Здесь объявляется процедура-функция, проверяющая значение даты. Затем показан пример вызова этой функции:

Function Validate(myDate)

If IsDate(myDate)

Then Validate = True

Else Validate = False

End If

End Function

'Событийная процедура, вызываемая при нажатии пользователем кнопки cmdTest

Sub cmdTestDate_OnClick()

Results = Validate(myDate)

End Sub

Теперь Вы создадите Web-страницу, с которой мы будем работать в следующих упражнениях этого занятия.

> Создание Web-узла в Microsoft Frontpage 98

Запустите Frontpage 98.

Выберите Create a New Frontpage Web и нажмите ОК.

Выберите One Page Web, измените название на Exercise9 и нажмите ОК.

> Редактирование главной страницы

Дважды щелкните значок Home Page, чтобы открыть редактор Frontpage Editor.

В меню Insert выберите команду Form Field и щелкните One Line Textbox.

Правой кнопкой мыши щелкните кнопку Submit и выберите Form Field Properties.

Измените свойство Name на btnSquareIt.

Измените свойство Value/Label на Square.

Измените свойство Button Type на Normal и нажмите кнопку ОК.

Щелкнув кнопку Reset, удалите ее клавишей Delete.

Правой кнопкой мыши щелкните кнопку Square и выберите Form Properties.

9. Измените имя Form Name на Form1 и нажмите кнопку ОК.

> Добавление сценария VBScript к главной странице

Поместите курсор рядом с кнопкой Square на форме.

В меню Insert выберите команду Advanced, Script.

Введите приведенный ниже код и нажмите кнопку ОК:


Function SquareIt(Num)

Squarelt = (Num * Num)

End Function

Правой кнопкой мыши щелкните кнопку Square и выберите в меню команду Script Wizard.

В дереве объектов раскройте объект Form1, а затем — объект btnSquareIt.

Щелкните событие btnSquareIt OnClick и нажмите кнопку Code View в ниж ней части диалогового окна.

Введите приведенный ниже код для события OnClick и нажмите кнопку ОК:

Dim Result

On Error Resume Next

Result = SquareIt(T1.Value)

MsgBox T1.Value & " в квадрате = " & Result

> Проверка

Сохранив страницу, в меню File выберите пункт Preview in Browser.

Когда Web-страница появится в окне Internet Explorer, введите в текстовое поле целое число и нажмите кнопку Square. Введенное число будет обработано созданной Вами функцией Squarelt, а результат работы функции появится в окне сообщений.

Закройте Internet Explorer и Frontpage 98.


Расширение возможностей


Применение Visual Basic для создания элемента управления ActiveX предоставляет в Ваше распоряжение пользовательский интерфейс и функциональные возможности, недоступные в стандартной версии HTML.



Разработка событийных процедур


В этом упражнении Вы создадите код VBScript для подсчета общей стоимости товаров, выбранных в таблице Product.

Вы расширите функциональные возможности Web-страницы списка товаров Products.htm (воспользуйтесь оригиналом, находящимся в папке WA\Practice\Ch09).

> Добавление тэгов SCRIPT в Web-страницу Products

Запустите Microsoft Frontpage 98.

Создайте новую пустую страницу (Empty Web) и назовите ее Lab09.

В меню File выберите Import.

Щелкните Add File, выберите файл Lab09.htm в папке WA\Practice\Ch09 и нажмите ОК.

Дважды щелкните Lab09.htm, чтобы открыть этот файл в редакторе Frontpage Editor.

Поместите точку вставки справа от кнопки Calculate.

В меню Insert укажите на Advanced и выберите Script.

Введите приведенный ниже код и нажмите ОК:

Function TotalIt()

Dim price

On Error Resume Next

price = txtQ1.Text * 2.99

price = price + txtQ2.Text * 75.59

price = price + txtQ3.Text * 1.75

price = price + txtQ4.Text * 7.99

price = price + txtQ5.Text * 4.99

Totallt = price

End Function

> Применение мастера создания сценариев

Щелкните правой кнопкой мыши кнопку Calculate и выберите в меню команду Script Wizard.

В нижней части диалогового окна щелкните кнопку Code View.

Свяжите с событием CalcTotal_OnClick формы frmButtonContainer приведенную ниже событийную процедуру:

IblTotal.Caption = TotalItO

Нажмите ОК, чтобы закрыть окно мастера создания сценариев.

Сохраните изменения.

Щелкните кнопку Preview in Browser на панели инструментов.

Заполните поля заказа товаров и нажмите Calculate.

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

> Добавление событийной процедуры для элементов управления

Переключитесь в окно Frontpage Editor.

Правой кнопкой мыши щелкните счетчик в правом верхнем углу Web-стра ницы.

Выберите Script Wizard.

В событие spin1_SpinUp введите следующий код:

txtql.text = txtql.text + 1

В событие счетчика spinl_SpinDown добавьте следующий код:

If txtql.text > 0 Then txtql.text = txtql.text - 1

Повторите пункты 2—4 для каждой кнопки счетчиков Web-страницы, соответствующим образом изменяя имена текстовых полей (txtq2, txtq3, txtq4, и т.д.).

Сохраните Web-страницу.

Щелкните кнопку Preview in Browser на панели инструментов.

Возможно, Вам придется нажать кнопку Refresh для перезагрузки страницы.

Введите какие-нибудь значения и попробуйте поменять их с помощью кнопок.



Реализация клиентских решений


Глава 9. Реализация клиентских решений

Прежде всего

Для изучения занятий этой главы необходимы:

знание материала главы 2, «Концепции построения сетей»;

знание материала главы 8, «Технологии ActiveX»;

Microsoft Frontpage 98;

Microsoft VBScript 2.0;

Microsoft Calendar Control 8.0;

Windows 95.

Занятие 1. Основы разработки сценариев

Занятие 2. Создание клиентских сценариев средствами Microsoft VBScript

Занятие 3. Применение управляющих элементов ActiveX

Закрепление материала



это код, средствами которого можно


Сценарий — это код, средствами которого можно манипулировать Web-страницами. Клиентские сценарии выполняются на компьютере-клиенте, а серверные сценарии — на Web-сервере до передачи страницы пользователю. Чтобы клиентский сценарий действовал, программа просмотра должна поддерживать язык, на котором он написан. Работа серверных сценариев не зависит от программы просмотра.
Чтобы воспользоваться клиентским сценарием, разместите его исходный код в HTML-документе. Когда программа просмотра встретит в НТМL-коде сценарий, она вызовет интерпретатор для его анализа и выполнения.
Microsoft Visual Basic Scripting Edition (VBScript) и JavaScript — два наиболее популярных языка создания сценариев. VBScript — это подмножество языка Microsoft Visual Basic; средства поддержки этого языка включены в состав Microsoft Internet Explorer.

в Интернете версия Microsoft Visual


Microsoft VBScript — это оптимизированная для работы в Интернете версия Microsoft Visual Basic. Синтаксис VBScript идентичен синтаксису Visual Basic for Applications, однако VBScript может быстро загружать сценарии по Интернету. VBScript поддерживает большинство встроенных функций Visual Basic, например Msgbox, Date и IsNumeric.
VBScript позволяет устанавливать значения свойств и вызывать методы элементов управления ActiveX и Java-апплетов на HTML-странице. VBScript поддерживает подпрограммы и процедуры-функции, а также переменные, типизацию данных, массивы, область видимости и константы. Коме того, VBScript содержит большинство управляющих структур Visual Basic for Applications. Как и в традиционных приложениях Visual Basic, Microsoft VBScript позволяет включить в Web-страницу сценарии обработки ошибок, а также управлять объектами и реагировать на события.

это двоичный исполняемый файл. Элементы


Управляющий элемент ActiveX — это двоичный исполняемый файл. Элементы управления ActiveX обеспечивают расширение функциональных возможностей стандартных Web-страниц, повышают их производительность и гарантируют защиту кода. Для размещения элементов управления ActiveX в HTML-документах применяется тэг <OBJECT> с различными атрибутами, включая CLASSID, ID и CODEBASE. Начальные значения свойств элемента управления ActiveX определяют, как данный элемент управления будет отображаться при загрузке HTML-страницы программой просмотра.

Серверные сценарии


Серверный сценарий выполняется в рамках активной страницы на Web-сервере до того, как тот вернет пользователю готовую HTML-страницу. Когда пользователь запрашивает активную серверную страницу, сервер выполняет сценарии и создает HTML-код, который и передается пользователю. В результате пользователь не видит серверного сценария на полученной Web-странице.

Поскольку серверный сценарий выполняется на Web-сервере, ему доступны все ресурсы сервера — например, базы данных и исполняемые файлы.

Для работы серверных сценариев Web-сервер должен поддерживать технологию активных страниц; к программе просмотра же не предъявляется никаких дополнительных требований, поскольку Web-клиент в данном случае получает стандартную HTML-страницу. Таким образом, сценарии серверной части не зависят от клиентов.



Создание альтернативы тэгу <OBJECT>


Программам просмотра, которые не поддерживают тэг <OBJECT>, и пользователям, не разрешившим применение элементов управления ActiveX в своих программах просмотра, следует предоставить альтернативный метод доступа к тем же функциональным возможностям. Если программа просмотра не отображает элементы управления ActiveX, она отобразит все тэги HTML, расположенные между тэгами <OBJECT> и </OBJECT>.

Примечание Если программа просмотра поддерживает тэг <OBJECT>, но элемент управления ActiveX не установлен, альтернативный вариант не используется — в окне программы просмотра просто будет отображен значок неработающего элемента управления.

Например, чтобы помочь пользователям программ просмотра, не поддерживающих элемент Calendar, снабдите Web-страницу текстовым полем, где пользователь введет дату.

Пример Вот как это сделать:

<OBJECT

classid="clsid:8E27C92B-1264-101C-8A2F-040224009C02"

>Рекомендуется просмотр с помощью Internet Explorer 4.0.<P>

Введите дату:

<INPUT TYPE=TEXT NAME="Date" MAXLENGTH=10 SIZE=10>

</OBJECT>

Подготовка к использованию управляющих элементов ActiveX

Атрибут CODEBASE тэга <OBJECT> содержит абсолютный или относительный указатель ресурса .осх-файла элемента управления.



Создание событийной процедуры


Событийную процедуру для объекта можно создать несколькими способами.



Создание событийных процедур


Создав объекты на Web-странице и присвоив им имена, Вы можете создать событийные процедуры. Сценарий, находящийся в событийной процедуре, запускается при возникновении соответствующего события.



Создать отдельный раздел <SCRIPT>


Вы можете создать отдельный раздел <SCRIPT> для сценариев, запускаемых при возникновении определенных событий для выбранного элемента управления.

Пример Этот сценарий запускается при возникновении события Click элемента управления Calendar1:

<SCRIPT LANGUAGE="VBScript" FOR="Calendar1" EVENT="Click()">

<! -

MsgBox("Привет!")

</SCRIPT>

Этот способ создания событийных процедур элементов управления ActiveX и стандартных элементов управления HTML подходит как для JavaScript, так и для VBScript.



Стандартные элементы управления HTML


Чтобы присвоить имя стандартному элементу управления HTML, достаточно присвоить значение атрибуту NAME.

Пример В этом коде элементу управления Button присваивается имя cmdValidateOrder:

<INPUT TYPE="BUTTON" NAME="cmdValidateOrder" VALUE="Validate Order">



Стандартные события


Все типы объектов распознают набор стандартных событий, куда входят щелчок мышью элемента управления, ввод текста в элемент управления и перемещение курсора по элементу управления.

Элементы управления ActiveX и Java-апплеты на Web-странице поддерживают те же события, что и в других средах, например в Visual Basic или Visual J++.



Структуры для организации циклов


Циклы позволяют запускать часть кода сценария более одного раза; цикл завершается при выполнении условия, определяемого состоянием переменной цикла или введенной пользователем информацией. В VBScript 2.0 имеется несколько операторов цикла.

Оператор

Назначение

Do... Loop

Выполняет цикл, пока условие истинно либо пока оно не станет истинным

While...Wend

Выполняет цикл, пока условие истинно

For... Next

С помощью счетчика выполняет набор операторов заданное число раз

Пример Здесь создается массив, который заполняется значениями:

Dim x(10)

For i = 1 to 10

x(i) = i * 10 Next



Типы данных


VBScript поддерживает только тип Variant, содержащий данные различных типов:

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

Чтобы объявить переменную в VBScript, пользуйтесь оператором Dim.

Пример Здесь объявляется переменная myName:

Dim myName



Тэг <SCRIPT>


Код сценария на Web-странице обозначается HTML-тэгом <SCRIPT>. Параметр LANGUAGE указывает программе просмотра язык сценария и, соответственно интерпретатор, который следует применять для обработки кода сценария. Для сценариев на VBScript параметр LANGUAGE должен иметь значение VBScript, а для сценариев нa JavaScript — JavaScript. Параметр LANGUAGE обязателен, поскольку некоторые программы просмотра (например, Internet Explorer) поддерживают несколько языков написания сценариев.

Примечание Кроме того, параметр LANGUAGЕ позволяет использовать на одной странице сценарии на разных языках.

Пример Этот сценарий, написанный на VBScript, запускается, когда пользователь нажимает соответствующую кнопку на Web-странице:

<SCRIPT LANGUAGE="VBScript">

<!-

Sub BtnHello_OnClick()

MsgBox "Hello, world!"

End Sub

->

</SCRIPT>

Примечание Программы просмотра, не поддерживающие сценарии, отображают фрагмент сценария как обычный текст. Чтобы этого не случилось, код сценария обрамляют тэгами комментария (<!— и —>).

Когда программа просмотра встречает тэг <SCRIPT> (как в предыдущем примере), она вызывает интерпретатор VBScript для выполнения кода сценария. В нашем примере сценарий связан с событием Click кнопки btnHello; результат работы сценария выводится в окне сообщений.

Пример Здесь определяется функция общего назначения, которую могут вызывать все сценарии Web-страницы. Функция получает информацию об объеме заказа (txtQty); если он превосходит 100 единиц, действует скидка:

<SCRIPT LANGUAGE="VBScript">

<! _

Function Discount(txtQty)

If txtQty > 100 then Discount =.10

End Function

->

</SCRIPT>

При написании сценария помещайте весь код в одном тэге <SCR1PT>. Хотя на HTML-странице можно разместить сколько угодно таких тэгов, код в одном тэге легче сопровождать. Тэг <SCRIPT> можно расположить как в разделе BODY, так и в разделе HEAD HTML-страницы.



Указание номера версии


Атрибут CODEBASE позволяет также указать номер версии, чтобы пользователь смог загрузить только определенную версию управляющего элемента.

Пример В этом коде средствами атрибута CODEBASE указывается номер версии (4.70. 1165) элемента управления типа «всплывающее меню»:

<OBJECT

CLASSID="CLSID:7823A620-9DD9-11CF-A662-OOAAOOC066D2"

CODEBASE="iemenu.ocx#Version=4,70,0,1165">

Если номер версии не указан (формат ее номера — N,N,N,N), Internet Explorer воспользуется любой из установленных на компьютере версий элемента управления. Чтобы каждый раз загружать элемент управления на компьютер пользователя, укажите номер версии -1,-1,-1,-1

> Определение номера версии элемента управления

Правой кнопкой мыши щелкните файл Mscal.ocx в окне Проводника и выберите в меню пункт Properties. Этот файл должен находиться в папке \Windows\System.

В диалоговом окне Properties откройте вкладку Version и выясните номер версии.

Установка начальных значений свойств

Начальные значения свойств элемента управления ActiveX определяют, как данный элемент управления отображается при загрузке HTML-страницы программой просмотра.

Чтобы задать начальные свойства объекта для управляющего элемента ActiveX, воспользуйтесь тэгами <PARAM>.

Синтаксис Тэг <PARAM> использует следующий синтаксис:

<PARAM NAME="Имя параметра" VАLUE="Значение">

Для каждого свойства применяется отдельный тэг <PARAM>.

Пример Ниже приведен тэг <OBJECT> элемента управления ActiveX Label, для которого заданы начальные значения свойств Angle, Alignment и Caption:

<OBJECT

classid="clsid:99B42120-6EC7-11CF-A6C7-OOAAOOA47DD2"

id=lblActiveLbl

width=250

height=250

>

<PARAM NAME="Angle" VALUE="90">

<PARAM NAME="Alignment" VALUE="2">

<PARAM NAME="Caption" VALUЕ="Привет всем!">

</OBJECT>

Примечание Чтобы выяснить имена и допустимые значения свойств объекта, обратитесь к справке по объекту или воспользуйтесь средством просмотра объектов (Object Browser) Microsoft Visual Basic.

> Просмотр объекта Form с помощью Object Browser

Запустите Visual Basic.

Создайте новый проект типа Standard EXE.

Нажмите F2, чтобы открыть окно просмотра объектов.

В списке Project/Library выберите Project1.

В списке Classes выберите Forml.

В области Member of Forml прокрутите список свойств, методов и других объектов, доступных объекту Forml.

По мере добавления элементов управления в форму Forml каждый объект добавляется в список членов формы.

Закройте Visual Basic.



Управление работой сценария


Для управления ходом выполнения сценария пользуйтесь соответствующими операторами Visual Basic.

VBScript поддерживает большую часть структур Visual Basic for Applications для управления работой программы.



Условное ветвление


Операторы условного ветвления определяют, будет ли выполняться данный фрагмент сценария и при каких условиях. Например, проверяется состояние переменных или введенная пользователем информация. Операторы условного ветвления отличаются от операторов циклов тем, что фрагмент сценария при условном ветвлении может выполняться не более одного раза. В VBScript 2.0 имеется несколько операторов условного ветвления.

Оператор

Назначение

If...Then

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

Select...Case

Выполняет один из фрагментов кода в зависимости от значения переменной

Вы можете использовать выражение с оператором If... Then... Else, чтобы выяснить истинность или ложность условия и, в зависимости от результата, выполнить один из двух фрагментов кода.

Пример Это условное выражение вычисляет процент премии в зависимости от значения переменной Sales:

If Sales > 100000 Then

Bonus =.10

Elself Sales > 50000 Then

Bonus =.05

Else

Bonus =.02

End If

VBScript 2.0 теперь поддерживает оператор Select...Case, который полезен, когда переменная-условие имеет больше двух значений. Хотя и в этом случае можно обойтись оператором If...Then, Select...Case проще и удобнее.

Пример Здесь выполняются те же действия, что и в предыдущем случае, но средствами оператора Select...Case:

Select Case Sales

Case 100000

Bonus =.1

Case 50000, 75000

Bonus =.05

Case Else

Bonus =.02

End Select

Примечание В операторе Select...Case не допускается использование диапазонов значений и символов сравнения «больше чем» (>) или «меньше чем» (<).

> Использование конструкции Select Case в VBScript

Откройте Web-узел Exercise9 в Frontpage 98.

Откройте Home Page в Frontpage Editor.

Правой кнопкой мыши щелкните кнопку Square и выберите Script Wizard.

В событие OnClick кнопки btnSquareIt введите приведенный ниже код и на жмите ОК:

Dim Result

On Error Resume Next

Result = SquareIt(T1.Value)

Select Case Result

Case 1,2,3



Обратите внимание на различие результатов:


MsgBox "Между 1 и 3"

Case 4,5,6

MsgBox "Между 4 и 6"

Case 7,8,9

MsgBox "Между 7 и 9"

Case Else

MsgBox "Результат вне диапазона."

End Select

MsgBox T1.Value & " в квадрате = " & Result

Сохраните изменения и откройте страницу в Internet Explorer.

Когда Web-страница появится в Internet Explorer, введите в текстовое поле число 2 и нажмите кнопку Square.

Введите в поле число 10 и снова нажмите кнопку Square.

Обратите внимание на различие результатов: при вводе чисел от 1 до 3 появляется сообщение об интервале, а любое другое числа вызывает выполнение блока Case Else.

Закройте Internet Explorer и Frontpage 98.


Установка атрибута CODEBASE


Если элемент управления ActiveX не связан ни с какими другими файлами, кроме .осх-файла, Вы можете указать местоположение .осх-файла с помощью атрибута CODEBASE.

Пример Этот код загружает элемент ActiveX из соответствующего .осх-файла:

<OBJECT

CLASSID="clsid:99B42120-6EC7--11CF-A6C7-OOAAOOA47DD2"

CODEBASE="http://server/control.ocx">

</OBJECT>

Если элемент управления ActiveX требует запуска дополнительных библиотек, Вы должны предоставить .cab-файл, который содержит все необходимые файлы, и .inf-файл, указывающий, как следует устанавливать каждый файл.

Пример Этот код загружает и устанавливает элемент управления ActiveX, обращаясь к .cab-файлу:

<OBJECT

CLASSID="clsid:99B42120-6EC7-11CF-A6C7-OOAAOOA47DD2

CODEBASE="http://server/control.cab">

</OBJECT>



Включить сценарий в тэг HTML


Имя события и сценарий, выполняемый при возникновении этого события, можно включить в тэг HTML, создающий объект. Этим методом удобно связывать событийные процедуры со стандартными элементами управления HTML.

Пример Здесь сообщение «Привет всем!» выводится на экран, когда пользователь щелкает кнопку Hello:

<INPUT LANGUAGE="VBScript" TYPE=button Value="hello"

onClick ="MsgBox 'Привет всем!'">



Встроенные функции Visual Basic


VBScript поддерживает некоторые встроенные функции Visual Basic, включая Msg-box, Date и IsNumeric.

Пример Этот сценарий на VBScript открывает на экране окно сообщения, если переменная Var является числовой:

If IsNumeric(Var) Then

MsgBox "Var is a number."

End If

Некоторые функции в VBScript реализованы иначе. Например, функция Visual Basic Format — в VBScript в виде четырех различных версии:

FormatCurrency;

FormatDateTime;

FormatNumber;

FormatPercent.

Примечание Полный перечень функции, поддерживаемых VBScript 2.0, — на Web-узле VBScript (www.microsoft.com/vbscript) и в комплекте документации Internet Client SDK.



Выбор языка разработки сценариев


VBScript и JavaScript похожи. Как в одном, так и в другом Вы можете определять переменные, создавать процедуры и обращаться к свойствам и методам объектов.

Разница между ними — небольшие отличия в синтаксисе. Ни один из них не компилируется, и оба работают на всех аппаратных платформах. Это интерпретируемые языки, поэтому скорость исполнения определяется возможностями программы просмотра, а не характеристиками самого языка. При выборе языка написания сценария учтите некоторые тонкости.

Пользовательская программа просмотра должна поддерживать сценарный язык, которым Вы пользуетесь. В состав Microsoft Internet Explorer включены интерпретаторы VBScript и JavaScript, тогда как Netscape Navigator поддерживает только JavaScript. Пользователи могут приобрести у Netscape дополнительное расширение для работы с VBScript*.

Используйте тот язык, с которым Вы лучше знакомы. Если Вы знаете Visual Basic, Вы быстро научитесь программировать на VBScript. Если же у Вас есть опыт работы с Java или С, Вам лучше подойдет JavaScript.

Примечание * - Поддержку ActiveX-компонентов и сценариев на VBScript для Netscape Communicator/Navigator обеспечивает дополнительный модуль ScriptActive, разработанный компанией NCompass Laboratories. Дополнительная информация — http:// www.ncompasslabs.com/ScriptActive/.



Вызов методов


Синтаксис Методы в сценарии вызываются точно так же, как и в Visual Basic:

[Call] Объект.Метод

Пример Этот пример вызывает метод Today элемента управления Calendar, когда пользователь нажимает кнопку Reset:

Sub Reset_OnClick()

call ShipDate.Today()

End Sub

Ключевое слово Call здесь необязательно; если Вы все же воспользовались им, заключите аргументы в круглые скобки.



Основы разработки сценариев


Занятие 1. Основы разработки сценариев

(Продолжительность занятия 25 минут)

Сценарий — это код, включенный в состав Web-страницы. Сценарий выполняется либо на клиентском компьютере, когда пользователь работает с элементом управления, либо на Web-сервере перед отправкой страницы клиенту. В обоих случаях Вы добавляете сценарий в Web-страницу в виде текста ASCII. На этом занятии сопоставляются серверные и клиентские сценарии; здесь же Вы узнаете о реализации сценарной части клиентских решений и о VBScript — языке создания сценариев, который используется в этой главе.

Изучив материал этого занятия, Вы сможете:

сравнить и сопоставить серверные и клиентские сценарии;

описать различия между Microsoft Visual Basic Scripting Edition (VBScript) и Microsoft JScript;

объяснить назначение тэга <SCRIPT>.

Серверные и клиентские сценарии

Клиентский сценарий выполняется на компьютере-клиенте. Программы просмотра снабжены встроенным интерпретатором, который может считывать и выполнять сценарии (рис. 9.1).

Рис 9.1 Использование клиентских и серверных сценариев для создания Web-приложений

Основная цель добавления клиентского сценария к Web-странице — создание событийных процедур для элементов управления. Например, написанная Вами событийная процедура будет запускать определенную функцию, когда пользователь нажмет соответствующую кнопку.

Клиентские сценарии в HTML-странице не компилируются и не шифруются. Поэтому, если Вы посмотрите исходный HTML-код Web-страницы, Вы увидите текст встроенного сценария.

Чтобы сценарий клиентской части функционировал, программа просмотра должна поддерживать язык, на котором он написан. В противном случае пользователь не получит полного доступа к сценарным средствам Web-страницы.



Создание клиентских сценариев средствами Microsoft VBScript


Занятие 2. Создание клиентских сценариев средствами Microsoft VBScript

(Продолжительность занятия 60 минут)

Язык VBScript — оптимизированная для работы в Интернете версия популярного языка программирования Visual Basic for Applications. Этот высокопроизводительный язык разработки сценариев предназначен для создания активных Web-страниц. Средствами VBScript Вы можете связывать и автоматизировать множество объектов на Web-страницах, включая Java-апплеты и элементы управления ActiveX. На этом занятии Вы узнаете, как применять VBScript для построения клиентских сценариев.

Изучив материал этого занятия, Вы сможете:

создать Web-страницу, использующую Microsoft VBScript;

пользоваться переменными в сценарии на Microsoft VBScript;

применять операторы управления последовательностью выполнения команд сценария;

с помощью VBScript создавать событейные процедуры для стандартных элементов управления HTML и ActiveX;

обрабатывать ошибки, возникающие при выполнении VBScript-сценария.

Синтаксис языка VBScript

Язык VBScript применяют для обращения к свойствам и методам элементов управления ActiveX и Java-апплетов, расположенных на HTML-странице.

Синтаксисы VBScript и Visual Basic for Applications идентичны. Однако VBScript учитывает необходимость быстрой загрузки страниц по Интернету, поэтому поддержка многих элементов (как языковых, так и времени выполнения) Visual Basic for Applications не включена в VBScript. Кроме того, некоторые элементы языка — например, средства работы с файлами — изъяты по соображениям безопасности.



Применение управляющих элементов ActiveX


Занятие 3. Применение управляющих элементов ActiveX

(Продолжительность занятия 30 минут)

Вы можете снабдить свою Web-страницу управляющими элементами ActiveX. Для ссылки на элемент ActiveX служит тэг <OBJECT>. Например, если Вы добавили на Web-страницу элемент Calendar, в HTML-документ будет включен тэг <OBJECT>. Это занятие посвящено преимуществам управляющих элементов ActiveX и их использованию в Web-приложениях.

Изучив материал этого занятия, Вы сможете:

перечислить преимущества применения управляющих элементов ActiveX;

использовать редактор реестра для выяснения идентификатора класса элемента ActiveX;

установить атрибут CODEBASE для элемента ActiveX;

узнать номер версии элемента ActiveX;

установить начальные значения свойств элемента ActiveX.

Преимущества элементов управления ActiveX

В числе преимуществ применения элементов управления ActiveX в Web-странице на языке HTML — расширение возможностей, повышение производительности и защита кода.



Защита кода


Так как элемент управления ActiveX компилируется, его исходный код, в отличие от HTML, недоступен пользователям.

Тэг <OBJECT>

Тэг <OBJECT> используется для вставки объектов (например, элементов ActiveX) в HTML-документы. Атрибуты тэга <OBJECT> задают управляющий элемент ActiveX, его местонахождение и метод отображения на HTML-странице.