Долгое время посетители сайта просили меня написать статью о MS Balloon, о том как его подключить к Delphi и MSAgent, чтобы в нем появлялись разные сообщения. Я и рад был бы скорее написать, так как давно занимаюсь с MS Balloon.
MS Balloon — это воздушный шарик, появлющийся у агента, когда он (или она или может быть оно) пытается нам что-то сообщить. Обычно это какое-нибудь сообщение, то что сейчас говорит персонаж. Но как мы видим в пакете MS Office в шарике выводится и другая дополнительная информация. Через него можно выдавать диалоги, просить пользователя ввести что-нибудь и т.д. Так почему же нам с вами этому не научиться?
Вот когда-то я тоже об этом подумал. MS Balloon это тоже ActiveX, своеобразная примочка к MSAgent’у. Причем бывают разные баллоны (шарики), их пишут разные люди. Например MsgBalloon, BlnDialog6.5 (есть уже 7.1, но его еще не пробовал) ну и стандартный в WindowsXP.
Должен сразу огорчить ни один из них не подключается в Delphi. Причем в любой — 5,6,7. Один из них (MsgBalloon) вообще не дружит с MSAgent, этот ActiveX куда-то теряется после установки. BlnDialog благополучно устанавливается, работает, компилируется, но во время выполнения благополучно падает так, что даже не показывает в чем ошибка, а просто предлагает «позвонить разработчику». Так что даже не знаешь кому, себе или автору ActiveX.
Поэтому расскажу только как работать с MS Balloon в VB на примере VBScript, хотя это не относится к теме сайта. Больше хотелось бы написать о MSAgent и его примочках в Delphi, а не во всяких там VB и VC++. Нет, я не противник VB и VC++, но обидно, что разработчики примочек равняются на VBasic и VC++, а про Delphi забывают. Поэтому я решил попробовать написать свой MSBalloon. Основа есть, нужно просто технически описать все нужные функции. Надеюсь в скором времени вы увидите первую версию моего «воздушного шарика».
Итак, попробуем создать простенький пример наподобии фотографии в начале этой статьи. Писать будем с помощью BlnDialog. После скачивания ActiveX установите его в систему обычным образом, нажав Установить в контекстном меню на файле .inf.
После этого можно непосредствено писать что-нибудь для MSBalloon. Где-нибудь на странице нужно внедрить MSBalloon в виде ActiveX:
<OBJECT
id=Balloon codeBase=BlnDialog.CAB#version=6,5,0,0
classid=CLSID:18D9ABAF-C390-4018-B153-ABB46EBF5A989>
</OBJECT>
Если требуется
загружать MSBalloon с заранее заданными параметрами, то можно
поступить так:
<OBJECT id=Balloon style=»LEFT: 0px; TOP: 0px» codeBase=BlnDialog.CAB#version=6,5,0,0 classid=CLSID:F7BD9D8A-D337-4DEE-A7F9-A16913E6FE69> <PARAM NAME=»_ExtentX» VALUE=»820″>
<PARAM NAME=»_ExtentY» VALUE=»767″>
<PARAM NAME=»BalloonWidth» VALUE=»200″>
<PARAM NAME=»ForeColor» VALUE=»0″>
<PARAM NAME=»BackColor» VALUE=»14811135″>
<PARAM NAME=»TextBoxBColor» VALUE=»-2147483643″>
<PARAM NAME=»LineColor» VALUE=»14737632″>
<PARAM NAME=»BorderColor» VALUE=»0″>
<PARAM NAME=»MaskColor» VALUE=»16711680″>
<PARAM NAME=»UserMove» VALUE=»-1″>
<PARAM NAME=»ButtonsCaptions» VALUE=»&Ok;&Cancel;&Abort;&Retry;&Ignore;&Yes;&No»>
<PARAM NAME=»BorderFocus» VALUE=»-1″>
<PARAM NAME=»Style» VALUE=»1″>
<PARAM NAME=»URLButtonPicture» VALUE=»»>
<PARAM NAME=»URLOptionPicture» VALUE=»»>
<PARAM NAME=»URLIconPicture» VALUE=»»>
<PARAM NAME=»URLSuggestPicture» VALUE=»»>
<PARAM NAME=»MoveStyle» VALUE=»1″>
<PARAM NAME=»BalloonDistanceX» VALUE=»0″>
<PARAM NAME=»BalloonDistanceY» VALUE=»0″>
</OBJECT>
Здесь мы, в основном, описываем различные, изначально заданные, параметры шарика. Правда, все значения по умолчанию. Некоторые параметры более-менее понятны, но отдельные поясню:
ForeColor — цвет текста
BackColor — цвет фона шарика(обычно бледно желтый)
TextBoxBColor — цвет области для ввода текста
LineColor — обычно текст от кнопок в MSBalloon отделяется
тоненькой линией, так вот этот параметр и определяет цвет линии
UserMove — если 0, то пользователь не может двигать шарик
мышкой, иначе может
URLButtonPicture — адрес картинок для кнопок. Обычно существует три состояния кнопок у шариков (Noraml, MouseOver, MouseDown). Так вот картинки этих состояний должны располагаться друг под другом.
URLOptionPicture — картинки для кнопок выбора опций.
URLSuggestPicture — картинка, которая будет появляться, когда агент желает обратить на себя внимание, например в MSWord это лампочка.
А теперь непосредственно напишем крохотную процедурку для появления шарика. После объявления ActiveX вставим скрипт:
<SCRIPT language=VBScript>
Sub
cmd1_onclick() Balloon.MsgBalloon «Привет! Это простейшая функция MSBalloon c одной кнопкой!«, vbOKOnly + vbExclamation, «Привет!«, char
End Sub
</SCRIPT>
И добавим стандартную кнопку с именем cmd1:
<input type=»submit» name=»cmd1″ value=»Пример 1″>
Процедура выводит воздушный шарик около персонажа с именем
char (то есть около нашего главного персонажа, посомтрите это
в коде) с одной кнопкой и иконкой знака внимания.
Вот сам пример:
<script type="text/javascript" language="VBScript"> Sub cmd1_onclick() Balloon.MsgBalloon "Привет! Это простейшая функция MSBalloon c одной кнопкой!",vbOKOnly + vbExclamation, "Привет!", char End Sub Sub cmd2_onclick() MsgBox "Привет, " & Balloon.InputBalloon("Привет, давай познакомимся? Как тебя зовут?", "Второй раз привет!", ,char) End Sub Sub cmd3_onclick 'Добавляем кнопочки Balloon.FormBalloon.Buttons.Add "&Да" Balloon.FormBalloon.Buttons.Add "&Нет" Balloon.FormBalloon.Buttons.Add "&Отстань" 'Иконку Balloon.FormBalloon.Icon = 13 'Титл Balloon.FormBalloon.Title = "Навигация по сайту:" ' Само сообщение Balloon.FormBalloon.Message = "Может вы желаете перейти на какой-нибудь другой раздел?" 'Непосредственно опции Balloon.FormBalloon.OptionButtons.Add "&На раздел проектов." Balloon.FormBalloon.OptionButtons.Add "&Хотелось бы что-нибудь про музыку." Balloon.FormBalloon.OptionButtons.Add "&Почитать про MSBalloon." 'Текст по умолчанию Balloon.FormBalloon.TextBox = True Balloon.FormBalloon.TBoxText = "Вы можете ввести сюда свое сообщение автору сайта." ' коментарий Balloon.FormBalloon.Comment = "Ваше пожелание." ' Указываем, что нужно отображать линию-разделитель Balloon.FormBalloon.SepLine = True ' Показываем шарик Balloon.ShowFormBalloon char 'Получаем результаты If Balloon.FormBalloon.OptionPressed = 0 Then MsgBox "Вы выбрали кнопку: " & Balloon.FormBalloon.ButtonPressed Else MsgBox "Вы выбрали опцию: " & Balloon.FormBalloon.OptionPressed End If MsgBox "Ваше пожелание: " & Balloon.FormBalloon.TBoxText End Sub Sub cmd4_onclick Dim Result Dim strText Dim strTitle strTitle = "Пример диалогового окна!" strText = "Понравилась ли вам статья о MSBalloon?" Result = Balloon.MsgBalloon(strText, 3 + bdQuestion, strTitle, char) Select Case Result Case 6: MsgBox "Спасибо!" Case 7: MsgBox "Напишите лучше!" Case 2: MsgBox "Значит вы еще не определились!" End Select End Sub Sub cmd5_OnClick() Dim strText Dim strTitle strText = "Пример сообщения с заголовком!" strTitle = "Сообщение" Balloon.MsgBalloon strText, 13, strTitle, char End Sub Sub cmd6_OnClick() Dim Result Dim strText Dim strTitle strText = "Пример изменения BackColor, BorderColor, ForeColor, LineColor и ButtonPicture." strTitle = "Продвинутый шарик!" ' Изменяем свойства Balloon.BackColor = &H829EB2 Balloon.ForeColor = vbWhite Balloon.LineColor = &H60808F Balloon.BorderColor = &H60808F Balloon.URLButtonPicture = "http://subritto.h1.ru/image/ButtonCustom.bmp" Balloon.BorderFocus = False Result = Balloon.MsgBalloon(strText, 2, strTitle, char) '^ - константа набор кнопок(можно поиграть с константами) 'Возвращаем свойства на место Balloon.ResetProperties End Sub Sub cmd7_OnClick() ' Изменяем картинки кнопок опций на лампочки Balloon.URLOptionPicture = "http://subritto.h1.ru/image/OtnButton2x4.bmp" ' Кнопки Balloon.FormBalloon.Buttons.Add "&Угу" Balloon.FormBalloon.Buttons.Add "&Неа" 'Иконка Balloon.FormBalloon.Icon = 14 Balloon.FormBalloon.Title = "Заголовок шарика" ' Сообщение Balloon.FormBalloon.Message = "Вы можете изменять картинки кнопок опций" ' Опции Balloon.FormBalloon.OptionButtons.Add "&Первая опция" Balloon.FormBalloon.OptionButtons.Add "&Вторая опция" Balloon.FormBalloon.OptionButtons.Add "&Заключительная третья опция" Balloon.FormBalloon.OptionButtons.Add "&Совсем заключительная четвертая" ' Будем без текстового поля Balloon.FormBalloon.TextBox = False ' Но с линией Balloon.FormBalloon.SepLine = True 'Показываем баллон около агента с именем char(то есть наш основной персонаж на странице) Balloon.ShowFormBalloon char ' Ставим свойства по умолчанию Balloon.ResetProperties End Sub Sub cmd8_OnClick() Balloon.TipBalloon "Привет, это окно с подсказкой!", 4, True, , 8000, 150, char End Sub </script>
Далее, попробуем попросить агента ввести наше имя. Добавим
в существующий скрипт еще одну процедуру и соответствующую кнопку
уже с именем cmd2:
Sub
cmd2_onclick()
Balloon.InputBalloon(«Привет,
давай познакомимся? Как тебя зовут?«, «Второй
раз привет!«)
End Sub
Теперь функция посложнее, но и поинтереснее! Помните, как в
MSWord агент, пытаясь вам что-нибудь предложить, показывает
окно с выбором опций. Так вот мы сейчас это и сделаем! Создадим
еще одну следующую по счету кнопку и прицепим к скрипту процедуру:
Sub cmd3_onclick()
‘Добавляем кнопочки
Balloon.FormBalloon.Buttons.Add «&Да»
Balloon.FormBalloon.Buttons.Add «&Нет»
Balloon.FormBalloon.Buttons.Add «&Отстань»
‘Иконку
Balloon.FormBalloon.Icon = 13
‘Титл
Balloon.FormBalloon.Title = «Навигация
по сайту:»
‘ Само сообщение
Balloon.FormBalloon.Message = «Может
вы желаете перейти на какой-нибудь другой раздел?»
‘Непосредственно опции
Balloon.FormBalloon.OptionButtons.Add «&На
раздел проектов.»
Balloon.FormBalloon.OptionButtons.Add «&Хотелось
бы что-нибудь про музыку.»
Balloon.FormBalloon.OptionButtons.Add «&Почитать
про MSBalloon.»
‘Текст по умолчанию
Balloon.FormBalloon.TextBox = True
Balloon.FormBalloon.TBoxText = «Вы
можете ввести сюда свое сообщение автору сайта.»
‘ комментарий
Balloon.FormBalloon.Comment = «Ваше
пожелание.»
‘ Указываем, что нужно отображать линию-разделитель
Balloon.FormBalloon.SepLine = True
‘ Показываем шарик
Balloon.ShowFormBalloon
‘Получаем результаты
If Balloon.FormBalloon.OptionPressed
= 0 Then
MsgBox «Вы выбрали кнопку: »
& Balloon.FormBalloon.ButtonPressed
Else
MsgBox «Вы выбрали опцию:
» & Balloon.FormBalloon.OptionPressed
End If
MsgBox «Ваше пожелание: »
& Balloon.FormBalloon.TBoxText
End Sub
*если примеры не работают, попробуйте включить Разрешать выполнение ActiveX, не помечанных как безопасные в Свойствах обозревателя..