Использование гиперссылок в приложениях
Visual Basic
Одна из наиболее привлекательных возможностей Web-страниц — гиперссылки, позволяющие соединять страницы, находящиеся в World Wide Web. Ниже приведен пример использования гиперссылок, как части интерфейса пользователя приложения Visual Basic.
VB6 в действии: проект DemoPage
Приложение DemoPage показано на рис. 21.5 и находится на прилагаемом компакт-диске. Оно состоит из двух форм:
• VBForm;
• WebForm.
Основная форма - VBForm - используется для построения простых фигур методами Visual Basic WebForm воспроизводит HTML-документ, который содержит команды Visual Basic (методы для рисования). HTML-документ содержит команды и несколько гиперссылок. При активизации гиперссылки новый документ не воспроизводится. Вместо этого рисуется фигура на первой форме.
Разработаем две формы (см. рис. 21.5). Основная форма содержит вверху элемент управления Label, на котором отображается команда. Вторая форма (WebForm) -элемент управления WebBrowser, на котором воспроизводится страница Demo.htm.
После загрузки первая форма загружает вторую и воспроизводит HTML-документ на элементе управления WebBrowser. Весь код формы VBForm размещен в событии Load.
Программа 21.5. Событие Load
Private Sub Form_Load()
Dim target
target = App.Path & "\Demo.htm"
WEBForm.WebBrowser1.Navigate.target
WEBForm.Show
End Sub
Рис. 21.5. Две формы приложения DemoPage
Чтобы избежать абсолютных ссылок, предполагается, что HTML-документ (файл Demo.htm) сохранен в папке проекта. Полная страница Demo htm показана на рис. 21.6.
Рис. 21.6. Страница Demo htm в Internet Explorer
Программа 21.6. Приложение Demo Page
<HTML>
<TITLE>Demo Page</TITLE>
<BODY>
<CENTER>
<Hl>Graphics Demo Page</Hl>
</CENTER>
The hyperlinks on this page contact the VBForm and draw various shapes on it.
<P>
<H3>Circles</H3>
The Visual Basic method for drawing circles on a Form or
PictureBox control is called Circle and its syntax is:
<BR>
<CODE>Circle(X, Y), R</CODE>
<BR>
X and Y are the center's coordinates and R is the circle's
radius.
<BR>
<A HREF="http://127.0.0.1./demo.htm#circle">Draw A Circle</A>
<BR>
<BR>
<H3>Squares</H3>
To draw squares use the Line method, whose syntax is:
<BR>
<CODE>Line(X1, Yl) - Step(X, Y)</CODE>
<BR>
X1 and Y1 are the coordinates of the upper left corner of the
square and X and Y are the square's dimension.
<BR>
<A HREF="http://127.0.0.1./demo.htm#box">Draw A Square</A>
</BODY>
</HTML>
Приложение использует событие BeforeNavigate2 для определения активизированной гиперссылки, затем отменяет переход к этой ссылке и выполняет некоторое действие на первой форме (отображает команду на элементе управления Label и рисует фигуру). Гиперссылки могут быть неверными. Однако событие BeforeNavigate2 не наступает до тех пор, пока гиперссылка не укажет на допустимый URL.
Далее показано определение двух гиперсвязей. Адреса гиперссылок содержат информацию о виде отображаемой формы.
<A HREF="http: //127.0.0.1/demo.htm#circle">Draw A Circle</A>
<А HREF="http: //127.0.0.1/demo.htm#box">Draw A Square</A>
HTML-документ не содержит никаких указаний на имена "circle" и "box", но они и не нужны. Элемент управления WebBrowser генерирует сообщение об ошибке, но все, что действительно нужно получить - это имя точки привязки. Адрес сервера – это IP-адрес локальной машины (127.0.0.1), который является допустимым именем сервера. Посмотрим, как код события BeforeNavigate2 вызывает действия, происходящие на другой форме.
Программа 21.7. Событие BeforeNavigate2
Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object,_
URL As Variant, Flags As Variant, _
TargetFrameName As Variant, PostData As Variant, _
Headers As Variant, Cancel As Boolean)
Dim Position As Integer, Shape As String
On Error Resume Next
If UCase(Right$(URL,8)) <> "DEMO.HTM" Then Cancel = True
Position = InStr(URL, "#")
Shape = Mid$(URL, Position + 1)
If Shape = "circle" Then
VBForm.CIs
VBForm.Circle(VBForm.Width / 2, VBForm.Height / 2), _
VBForm.Height / 3
VBForm.Label1.Caption = "Circle(Width / 2, Height / 2),
_
Height / 3"
End If
If Shape = "box" Then
VBForm.Cls
VBForm.Line(VBForm.Width / 4, VBForm.Height / 4) _
-Step(VBForm.Width / 2, VBForm.Height / 2), , В VBForm.Label1.Caption = "Line(Width / 4, Height / 4) _
-Step(Width / 4, Height / 4), , В"
End If
End Sub
Первый оператор отслеживает ошибку и указывает Visual Basic проигнорировать ошибки и продолжать выполнение со следующего оператора. Понятно, что ошибка непременно произойдет, так как обе привязки гиперссылок неправильные. Поэтому установка значения параметра Cancel в True отменяет передвижение. Условный оператор If проверяет, что другие (возможно допустимые) гиперссылки не отменены. Затем программа исследует последнюю часть адреса URL (правее символа #). Если это строка - "circle", то программа рисует окружность на форме VBForm и воспроизводит команду для рисования окружности на элементе управления Label. Если строка - "box", то рисует квадрат на форме и воспроизводит соответствующую команду на Labell.
Можно изменить приложение, добавив другие возможности, поместив подробную справочную информацию в HTML-документ и включив демонстрацию примеров. Описанный подход нельзя считать элегантным, поскольку гиперссылки не стали частью интерфейса Visual Basic. Приложение, тем не менее, показывает, как включить функциональные возможности гиперссылок в приложения Visual Basic.