MSAgent и MS Balloon

Долгое время посетители сайта просили меня написать статью о MS Balloon, о том как его подключить к Delphi и MSAgent, чтобы в нем появлялись разные сообщения. Я и рад был бы скорее написать, так как давно занимаюсь с MS Balloon.

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=»&amp;Ok;&amp;Cancel;&amp;Abort;&amp;Retry;&amp;Ignore;&amp;Yes;&amp;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, не помечанных как безопасные в Свойствах обозревателя..

Speak up! Let us know what you think.