Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Yazyk_VBScript.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
150.27 Кб
Скачать

Примечание

Указанный способ обработки события распознается только браузером Internet Explorer, и поэтому его следует избегать. Здесь он упомянут исключительно ради полноты описания.

Третий способ задания процедуры обработки события унаследован VBScript от своего "родителя" Visual Basic и заключается в специальном именовании процедуры обработки события при ее объявлении. Любая процедура, имя которой составлено из имени объекта и имени события этого объекта с префиксом (on), соединенных знаком подчеркивания, рассматривается VBScript как процедура обработки указанного события для указанного объекта. Процедуру обработки события для рассмотренного выше примера можно определить следующим образом:

<SCRIPT TYPE="text/vbscript" LANGUAGE="VBScript">

<!--

Sub Button1_onClick()

Alert "Сообщение в ответ на щелчок1"

End Sub

'-->

</SCRIPT>

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

Для тех, кто программирует на Visual Basic или Visual Basic for Application последний способ инициирования процедуры обработки события, вероятно, окажется самым подходящим. Более того, в специальных приложениях Windows, предоставляющих среду разработки HTML-страниц на языке VBScript, этот способ является основным.

Практические примеры

В этом разделе приводится несколько примеров программирования сценариев VBScript.

Плавающий фрейм

Тэг <IFRAME> задает плавающий фрейм на HTML-странице. Его можно использовать для отображения динамически создаваемой страницы. Такая техника полезна, например, при написании учебной страницы по языкам сценариев. В тексте можно привести код изучаемой конструкции, а при щелчке кнопкой мыши внутри плавающего фрейма она отобразится так, как ее увидит конечный пользователь.

Прежде всего, необходимо создать страницу с плавающим фреймом, и организовать перехват обработки какого-либо события плавающего фрейма. Ниже представлен текст страницы, на которой при получении плавающим фреймом фокуса (обработчик событий onFocus) вызывается процедура VBScript, динамически создающая содержимое, отображаемое в этом фрейме:

<BODY BGCOLOR="FFFF00">

Щелчок кнопкой мыши на плавающем фрейме приводит

к отображению в нем содержимого</Р>

<IFRAME WIDTH="400" HEIGHT="100" FRAMEBORDER="1"

NAME="fra1" OnFocus="FillIFrame">

</IFRAME>

</BODY>

При щелчке на плавающем фрейме он получает фокус, и происходит вызов процедуры FillLFrame. На рис. 9.18 показана эта страница, отображенная в окне браузера.

Теперь остается только создать процедуру VBScript, создающую содержимое плавающего фрейма. Ее текст представлен ниже и должен быть размещен в разделе <HEAD> предыдущего документа:

<SCRIPT LANGUAGE="VBScript">

<!--

Sub FillIFrame()

With Parent.Frames("fra1").Document

.Clear

.WriteLn "<HTML>"

.WriteLn "<BODY BGCOLOR='00CCFF'>"

.WriteLn "

Тест работы с плавающим фреймом!<BR>"

.WriteLn "<FORM>"

.WriteLn "<SCRIPT LANGUAGE=" & Chr(34) & "VBScript" & _

Chr(34) & "><" & Chr(47) & "SCRIPT>"

.WriteLn "<INPUT TYPE=BUTTON VALUE=" & Chr(34) &

"Нажми" & Chr(34) & " NAME=button1 "

.WriteLn "OnClick='Alert " & Chr(34) &

"Простое сообщение." & Chr(34) & _

", vbExclamation, " & Chr(34) & _

"VBScript тест" & Chr(34) & '">"

.WriteLn "<" & Chr(47) & "FORM>"

.WriteLn "<" & Chr(47) & "BODY>"

.WriteLn "<" & Chr(47) & "HTML>"

.Close

End With

End Sub

'-->

</SCRIPT>

Рис. 9.18. Страница с плавающим фреймом

Оператор with задает объект, методы которого вызываются в теле оператора. В нашем примере — это документ, отображаемый в плавающем фрейме. Методы WriteLn записывают в документ строки, содержащие теги HTML, и тем самым динамически формируют документ, отображаемый во фрейме.

Щелчок кнопкой мыши при расположении ее курсора в области фрейма приводит к возникновению события Focus, которое интерпретатор перехватывает и запускает на выполнение процедуру FillLFrame(). Результат отображения динамически созданной страницы показан на рис. 9.19.

Рис. 9.19. Содержимое фрейма после получения им фокуса

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

Баннер

Можно организовать динамическое отображение разных страниц во фрейме, имитируя, таким образом, работу баннера. Реализация подобного процесса осуществляется вызовом разных процедур, готовящих и отображающих соответствующие страницы во фрейме с использованием функции setTimeOut. В этом примере мы создадим плавающий фрейм, в котором будет постепенно по частям отображаться строка "Издательство В НУ", затем также по частям она будет исчезать, и процесс начнется сначала. Каждая динамически появляющаяся во фрейме строка будет отображаться разным цветом, создавая эффект "неоновой" рекламы.

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

<BODY BGCOLOR="FFFF00">

<P ALIGN="center">

<IFRAME NAME="frameBHV" HEIGHT="70" WIDTH="200"></IFRAME></P>

Вас приветствует "Издательство BHV", Санкт-Петербург!

</BODY>

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

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

В них используются переменные Page1, Page2, PageЗ, Page4 и Page5, Содержащие определения цветов фона и текста, и переменная pageEnd, которая хранит завершающие теги страницы.

Dim PageEnd

Page1 = "<BODY BGCOLOR='#00CCFF' TEXT='#0000FF'><PRE>"

Page2 = "<BODY BGCOLOR='#00CCFF' TEXT='#00FFFF'><PRE>"

Page3 = "<BODY BGCOLOR='#00CCFF' TEXT='#00FF00'><PRE>"

Page4 = "<BODY BGCOLOR='#00CCFF' TEXT='#FFFF00'><PRE>"

Page5 = "<BODY BGCOLOR='#00CCFF' TEXT='#FF0000'><PRE>"

PageEnd = "</PRE></BODY>"

Первая вызываемая процедура — процедура без параметров AnimFrame1, которая отображает во фрейме строку "Из" синим цветом, и по прошествии 1/4 секунды вызывает процедуру AnimFrame2 с параметром True. Это действие реализуется функцией setTimeOut, которая выполняет код, заданный первым параметром, через количество миллисекунд, определяемых вторым параметром этой функции.

Sub AnimFrame1

Window.frameBHV.Document.Write Page1 & "Из" & EndPage

Window.frameBHV.Document.Close

SetTimeOut "AnimFrame2 True", 250, "VBScript"

End Sub

Процедура AnimFrame2 отображает во фрейме строку "Издат" голубым цветом и вызывает Процедуру AnimFrame3 или AnimFrame1, в зависимости от того, должна ли появиться вся надпись (параметр forw равен True) или вся надпись должна исчезнуть (параметр forw равен False).

Sub AnimFrame2(forw)

Window.frameBHV.Document.Write Page2 & "Издат" & EndPage

Window.frameBHV.Document.Close

If forw Then

SetTimeOut "AnimFrame3 True", 250, "VBScript"

Else

SetTimeOut "AnimFrame1", 250, "VBScript"

End If

End Sub

Процедуры AnimFrame3 и AnimFrame4 осуществляют аналогичные действия, отображая соответственно строки "Издатель" и "Издательство" и вызывая другие процедуры для выполнения необходимых действий.

Sub AnimFrame3(forw)

Window.frameBHV.Document.Write Page3 & "Издатель" & EndPage

Window.frameBHV.Document.Close

If forw Then

SetTimeOut "AnimFrame4 True", 250, "VBScript"

Else

SetTimeOut "AnimFrame2 False", 250, "VBScript"

End If

End Sub

Sub AnimFrame4 (forw)

Window.frameBHV.Document.Write Page4 & "Издательство" & EndPage

Window.frameBHV.Document.Close

If forw Then

SetTimeOut "AnimFrame5", 250, "VBScript"

Else

SetTimeOut "AnimFrame3 False", 250, "VBScript"

End If

End Sub

Последняя, пятая процедура AnimFrame5 отображает строку "Издательство BHV" и запускает процесс отображения в обратном порядке (процедура AnimFrame4 вызывается с параметром False).

Sub AnimFrame5

Window.frameBHV.Document.Write Page5 & "Издательство BHV" & EndPage

Window.fraHello.Document.Close

SetTimeOut "AnimFrame4 False", 250, "VBScript"

End Sub

Теперь, для запуска всего процесса необходимо инициализировать выполнение первой процедуры AnimFrame1 при загрузке документа в окно браузера. Это действие реализуется в процедуре обработки события Load объекта window:

Sub Window_OnLoad()

AnimFrame1

End Sub

Результаты отображения информации во фрейме в разные моменты времени показаны на рис. 9.20 и 9.21.

Примечание

На рис. 9.20 строка во фрейме отображается синим цветом, а на рис. 9.21 — красным.

Предупреждение

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

Рис. 9.20. Отображение строки "Из" во фрейме страницы

Рис. 9.21. Отображение строки "Издательство BHV" во фрейме страницы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]