Агенты среди нас. Замена стандартных функций - 1С и все, что совместимо с ним - Каталог статей - STSS - Серверные системы
Понедельник, 21.05.2012, 01:51
STSS - СЕРВЕРНЫЕ СИСТЕМЫ
Приветствую Вас Гость | RSS
Главная страница Каталог статей Регистрация Вход
Меню сайта

Категории каталога
Скидки, подарки, призы [196]
Вы узнаете об актуальных на данный момент времени скидках, подарках и розыгрышах призов как в офф-лайновых, так и в он-лайновых магазинах.
1С и все, что совместимо с ним [17]
Технологии 1С
О серверах и сетевом оборудовании [171]
Статьи о серверном и сетевом оборудовании. Полезные советы и комментарии специалистов.
Секреты рекламы интернет-магазинов [46]
Как начать свое дело, как выбрать программный продукт для создания интернет-магазина до раскрутки его в бескрайних просторах сети Интернет.

Наш опрос
Какой раздел сайта наиболее интересен Вам?
Всего ответов: 58

Начало » Статьи » 1С и все, что совместимо с ним

Агенты среди нас. Замена стандартных функций
Наши персонажи на текущем этапе не более чем забавная мулечка, в  некоторой степени,  способная заменить функцию Сообщить(). Как заставить их работать с  большей отдачей?  В этой части я попытаюсь рассказать, как заменить предупреждения, ввод  значений,  выбор из списков и т.п.

Технология MSAgent самостоятельно не умеет делать подобных вещей, но в  Cети можно найти  разработки, расширяющие ее возможности. Больше всего мне понравился  ActiveX-компонент  BalloonDialog© (http://www.sommytech.com.ar).  

Прямая ссылка для скачивания Trial-версии:  http://www.sommytech.com.ar/downloads/balloondialog/BlnDialog.exe (весит 2.5 Мб).

Увы, он не бесплатный, регистрация обходится в 8.95$.  В поставке есть подробный help по програмированию с использованием этого  компонента. 

Именно об использовании BalloonDialog© совместно с Microsoft Agent'ом  пойдет речь в  данной статье.

Создаем объект BalloonDialog (еще раз напомню, что использовать его  лучше только в  симбиозе с Microsoft Agent'ом):

                                   
Агент = CreateObject("Agent.Control.2");
Агент.Connected = 1;
Агент.Characters.Load("Merlin", "merlin.acs");
Персонаж = Агент.Characters("Merlin");
Персонаж.Show();
Баллон = CreateObject("BlnDialog.Balloon");
Баллон.ResetProperties();

  Последняя строчка этого куска кода сбрасывает все установки свойств  BalloonDialog'а в  значения по умолчанию, и является необходимой при его первоначальной  загрузке – иначе будет выдаваться сообщение об ошибке при каждом вызове диалога.

Для начала заменим скучное стандартное Предупреждение:

                                   
Баллон.MsgBalloon("Ку-Ку!",,,Персонаж);

  Метод MsgBalloon рисует рядом с персонажем диалог-ballon, ждет, пока  пользователь  нажмет кнопку, и возвращает целое число – номер, соответствующий нажатой  кнопке.  Первый параметр метода – строка сообщения, второй – целое число,  определяющее набор кнопок диалога и тип отображаемой на поле диалога  иконки,  третий – строка заголовка диалога, четвертый – MSAgent Character  (объект, определенный выше). Используя этот последний параметр окно  диалога автоматически  позиционируется на экране в зависимости от положения персонажа. 

Кроме того, при перетаскивании персонажа пользователем диалог-ballon  перемещается вместе  c ним. Если необходимо заменить стандартный balloon MSAgent'а, cделать  это  можно следующим образом:

                                   
Персонаж.Balloon.Visible=0;
Персонаж.Speak("Всем привет!");
Баллон.MsgBalloon("Всем привет!",,,Персонаж);
Персонаж.Balloon.Visible=1;

или покороче:

                                   
Персонаж.Speak("\Map=""Всем привет!""=""""\");
Баллон.MsgBalloon("Всем привет!",,,Персонаж);

С помощью этого метода можно заменить и стандартную функцию встроенного  языка Вопрос:

                                   
Стр = "Это пример диалога с вопросом.";
Заголовок = "Заголовок диалога";
Ответ = Баллон.MsgBalloon(Стр,36,Заголовок,Персонаж);
Если Ответ = 6 Тогда
   Сообщить("Вы выбрали ""Да""");
Иначе
   Сообщить("Вы выбрали ""Нет""");
КонецЕсли;   

Расшифруем "магическое" число – 36 в приведенном выше коде, возможные  значения второго параметра делятся на две группы, набор кнопок:

0 – отображается только кнопка "ОК";
1 – отображаются "ОК" и "Cancel" кнопки;
2 – отображаются "Abort", "Retry", и "Ignore" кнопки;
3 – отображаются "Yes", "No", и "Cancel" кнопки;
4 – отображаются "Yes" и "No" кнопки;
5 – отображаются "Retry" и "Cancel" кнопки;

и тип иконки диалога:

16 – отображается иконка "Ошибка";
32 – отображается иконка "Вопрос";
48 – отображается иконка "Предупреждение";
64 – отображается иконка "Информация";
80 – отображается произвольная иконка, определяемая свойствами  IconPicture  или URLIconPicture.

Окончательное значение параметра – сумма значений по одному из каждой  группы.

Возвращаемое методом значение:

1 – если пользователь нажал кнопку "ОК";
2 – если пользователь нажал кнопку "Cancel";
3 – если пользователь нажал кнопку "Abort";
4 – если пользователь нажал кнопку "Retry";
5 – если пользователь нажал кнопку "Ignore";
6 – если пользователь нажал кнопку "Yes";
7 – если пользователь нажал кнопку "No";

Будет гораздо удобней использовать и параметр, и возвращаемое значение,  если предопределить  соответствующие коллекции констант, как, к примеру, в VB (помните:  vbYesNo + vbQuestion).  Именно так сделано в примере к данной статье.

Однако нашим пользователям не понравится давить на "англоязычные"  кнопки, перевести их  поможет свойство ButtonsCaptions.

                                   
Баллон.ButtonsCaptions =  "&ОК;О&тмена;П&рервать;&Повторить;&Игнорировать;&Да;&Нет";

А еще, с его помощью, можно произвольно менять надписи на кнопках:

                                   
Баллон.ButtonsCaptions = "&ОК;&Отмена;Н&а фиг!;Н&е  фиг!;П&о фиг!;&Да;&Нет";
Ответ = Баллон.MsgBalloon(Стр,2+48,Заголовок,Персонаж);
Если Ответ = 3 Тогда
   Сообщить("Вы выбрали ""На фиг!""");
ИначеЕсли  Ответ = 4 Тогда
   Сообщить("Вы выбрали ""Не фиг!""");
Иначе
   Сообщить("Вы выбрали ""По фиг!""");
КонецЕсли;    
Баллон.ButtonsCaptions =  "&ОК;&Отмена;П&рервать;&Повторить;&Игнорировать;&Да;&Нет";

После всякого переименовывания кнопок не забывайте восстанавливать  стандартные  надписи, иначе на следующий вопрос пользователю будет трудно выбрать  правильный ответ.  Может, кто-то не знает, что символ "&" в заголовке кнопки ставится  перед будущим  "псевдо-горячим" или подчеркнутым символом для отработки комбинации Alt +  подчеркнутая буква. 

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

Следующий метод заслуживающий особого внимания – InputBalloon(),  отображает на  экране диалог с окошком ввода текста, ждет пока пользователь введет  текст и по клику  на кнопке возвращает введенную строку.

                                   
Имя = Баллон.InputBalloon("Введите ваше имя.","Имя пользователя","Вася  Пупкин",Персонаж);
Баллон.MsgBalloon("Здравствуй, " + Имя + ".",,,Персонаж);

Первый параметр – строка сообщения, второй – строка заголовка диалога,  третий – строка текста по умолчанию, четвертый – переменная, содержащая объект Character.

Теперь наш агент вполне способен заменить, (а кое в чем и переплюнуть)  функции Сообщить(),  Предупреждение(), Вопрос() и, по крайней мере, ВвестиСтроку(). 

К сожалению, MsgBalloon и InputBalloon не предлагают таймаут –  время ожидания  ответа пользователя, но этот недостаток легко обойти и средствами  встроенного языка.

Значительно расширяет возможности использование объекта FormBalloon. С  его помощью можно  создавать более сложные диалоги, включающие радио-кнопки, окна ввода,  любые наборы кнопок,  иконки, разделители и пр. 

Простые кнопки и радио-кнопки добавляются к диалогу с помощью  соответствующих методов Add(), остальные элементы через свойства  объекта.  Выводится диалог методом ShowFormBalloon():

                                   
Баллон.ShowFormBalloon(Персонаж);

Кнопка добавляется так:

                                   
Баллон.FormBalloon.Buttons.Add("&Обновить");

а радио-кнопки так:

                                   
Баллон.FormBalloon.OptionButtons.Add("&Да");
Баллон.FormBalloon.OptionButtons.Add("&Нет");

Радио-кнопки будут расположены в диалоге в том порядке, в котором они  добавлялись методом  Add(). В диалоге можно разместить только одну группу радио-кнопок.  Щелчок по любой  радио-кнопке закрывает диалог, как и по обычной кнопке. Получить, что  именно нажал  пользователь можно, используя свойства ButtonPressed и OptionPressed.  Эти свойства принимают  значения номера по коллекции нажатой кнопки или ноль, если кнопка не  была нажата. 

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

                                   
Баллон.FormBalloon.Buttons.Add("&Отмена");
П = Перечисление.ТипПлатежа;
Для Х = 1 По П.КоличествоЗначений() Цикл
   Баллон.FormBalloon.OptionButtons.Add(Строка(П.ЗначениеПоНомеру(Х)));
КонецЦикла;
Баллон.ShowFormBalloon(Персонаж);
Если Баллон.FormBalloon.ButtonPressed = 1 Тогда
   Возврат 0; // отказ от выбора
Иначе
   Возврат П.ЗначениеПоНомеру(Баллон.FormBalloon.OptionPressed);
КонецЕсли;

Окошко ввода текста добавляется свойством ТехтВох, если 1 (True) –  отображать  в диалоге, 0 (False) – не отображать. Используя FormBalloon, его можно  сделать  многострочным и задать строку "по умолчанию".

                                   
Баллон.FormBalloon.TextBox = 1; Баллон.FormBalloon.TBoxLines = 3; // трех-строчный текст Баллон.FormBalloon.TBoxText = "Текст по умолчанию";

Другие свойства: Title – заголовок диалога, Message – основной тект  диалога расположенный под заголовком, Comment – строка комментария,  располагающаяся внизу диалога над кнопками, SepLine – разделительная  линия,  отделяющая нижнюю часть диалога. 

Разделительная линия в диалоге может быть только одна. Присвоение  SepLine значения единицы,  включает показ линии, нуля – отключает. 

Есть еще пара методов у BalloonDialog'а. А именно метод Suggest(),  который выводит картинку  "горящая лампочка" над персонажем для привлечения пользователя и метод  TipBalloon(),  выводящий на экран немодальное окно подсказки. Увы, перехватить клик  пользователя по  "suggest-лампочке" не получится. Как лучше использовать эти два метода в  1С:Предприятии,  я пока не придумал.

О том, как перекрашивать диалог-balloon, как менять цвет и атрибуты  текста, как рисовать  в нем свои иконки, менять картинки для кнопок и радио-кнопок – смотрите в  примере  к статье и в файле помощи к BalloonDialog©.

И напоследок полезный совет:

Используйте там, где только это возможно, конструкцию Попытка-Исключение.   Перед выводом диалога проверяйте, не скрыт ли персонаж, и в этом случае  используйте  встроенные функции языка 1С. Количество строк кода при этом удваивается,  но  "balloon" без персонажа выглядит несколько сюрреалистически.    

Кому интересно, можно посмотреть и поэксперементировать с аналогичным  OCX'ом от  российских разработчиков BalloonMessage  (http://www.vbline.narod.ru/balloonmessage/ru/basic.htm), но  он тоже не бесплатный – 10$.

И еще одна ссылка на подобный OCX:  http://www.textildoss.com.ar/msgballoon/MsgBalloon6.zip – как  я понял, это предыдущая версия BalloonDialog. Она бесплатна, но и  возможностей у неё маловато.




Источник: http://www.mista.ru/articles1c/hare/article.41.html
Категория: 1С и все, что совместимо с ним | Добавил: stss (30.09.2010) | Автор: Алексей Бажитов
Просмотров: 324 | Рейтинг: 0.0 |

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
E-mail:
Пароль:

Поиск по каталогу

Экскурсия
в Новый Иерусалим

Экскурсия в монастырь Новый Иерусалим

На этой экскурсии Вы побываете в открытых приделах храма: В Успенском приделе (находятся мощи св. мученицы Татианы и святыня крест - мощевик, подаренный монастырю иерусалимскими монахами. Крест содержит частицы Креста Господня и мощей святых, включая евангелиста Марка); в Архангельском приделе увидите список Тихвинской чудотворной иконы Божией матери XVII века и гробницу патриарха Никона в Предтеченском приделе, возле которой происходят чудесные исцеления; в действующей подземной церкви Константина и Елены с уникальным медным иконостасом (находится кладезь "Живоносный источник"); пройдетесь по монашеской территории - вдоль братских корпусов; побываете в деревянном зодчестве; сможете пройтись по крепостной стене и побывать в Гефсиманской, Сионской и Елизаветинской башнях и в надвратной Входоиерусалимской церкви над Золотыми воротами; у скита патриарха Никона; сможете увидеть реку Иордан (Истра) с ее купелью с рассказом о чудесных исцелениях. Прогулка по монастырскому полю и Гефсиманскому саду, а также вдоль монастырской стены, где можно увидеть два озера, именуемых Галилейским морем из которых вытекает Кедронский поток...
Подробнее на сайте: http://www.ierusalim.ru/exkurs.php

Экскурсии в Новом Иерусалиме

Китайская медицина
Продукция Традиционой Китайской Медицины

Продажа дешевых современных серверов. Бесплатная доставка и гарантия.
Дешевые сервера, бесплатная доставка и гарантия.


Статистика

Copyright MyCorp © 2006 Создать сайт бесплатно