Hare.ru @ Коллективный разум / Hare.ru @ Дикое место |
Архив hare.ru | ||||||||||||||
Мысли, конвертированные в текст | |||||||||||||||
Полезные технологииАгенты среди нас. Замена стандартных функцийАлексей Бажитов (апрель 2002) Наши персонажи на текущем этапе не более чем забавная мулечка, в некоторой степени, способная заменить функцию Сообщить(). Как заставить их работать с большей отдачей? В этой части я попытаюсь рассказать, как заменить предупреждения, ввод значений, выбор из списков и т.п.Технология 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'ом):
Последняя строчка этого куска кода сбрасывает все установки свойств BalloonDialog'а в значения по умолчанию, и является необходимой при его первоначальной загрузке иначе будет выдаваться сообщение об ошибке при каждом вызове диалога. Для начала заменим скучное стандартное Предупреждение:
Метод MsgBalloon рисует рядом с персонажем диалог-ballon, ждет, пока пользователь нажмет кнопку, и возвращает целое число номер, соответствующий нажатой кнопке. Первый параметр метода строка сообщения, второй целое число, определяющее набор кнопок диалога и тип отображаемой на поле диалога иконки, третий строка заголовка диалога, четвертый MSAgent Character (объект, определенный выше). Используя этот последний параметр окно диалога автоматически позиционируется на экране в зависимости от положения персонажа. Кроме того, при перетаскивании персонажа пользователем диалог-ballon перемещается вместе c ним. Если необходимо заменить стандартный balloon MSAgent'а, cделать это можно следующим образом:
или покороче:
С помощью этого метода можно заменить и стандартную функцию встроенного языка Вопрос:
Расшифруем "магическое" число 36 в приведенном выше коде, возможные значения второго параметра делятся на две группы, набор кнопок:
0 отображается только кнопка "ОК"; и тип иконки диалога:
16 отображается иконка "Ошибка"; Окончательное значение параметра сумма значений по одному из каждой группы. Возвращаемое методом значение:
1 если пользователь нажал кнопку "ОК"; Будет гораздо удобней использовать и параметр, и возвращаемое значение, если предопределить соответствующие коллекции констант, как, к примеру, в VB (помните: vbYesNo + vbQuestion). Именно так сделано в примере к данной статье. Однако нашим пользователям не понравится давить на "англоязычные" кнопки, перевести их поможет свойство ButtonsCaptions.
А еще, с его помощью, можно произвольно менять надписи на кнопках:
После всякого переименовывания кнопок не забывайте восстанавливать стандартные надписи, иначе на следующий вопрос пользователю будет трудно выбрать правильный ответ. Может, кто-то не знает, что символ "&" в заголовке кнопки ставится перед будущим "псевдо-горячим" или подчеркнутым символом для отработки комбинации Alt + подчеркнутая буква. Следует соблюдать количество и последовательность заголовков кнопок в этой строке. Значение для набора кнопок и возвращаемое значение методом MsgBalloon определяются исходя из этой последовательности, несмотря на реальные заголовки кнопок. Следующий метод заслуживающий особого внимания InputBalloon(), отображает на экране диалог с окошком ввода текста, ждет пока пользователь введет текст и по клику на кнопке возвращает введенную строку.
Первый параметр строка сообщения, второй строка заголовка диалога, третий строка текста по умолчанию, четвертый переменная, содержащая объект Character. Теперь наш агент вполне способен заменить, (а кое в чем и переплюнуть) функции Сообщить(), Предупреждение(), Вопрос() и, по крайней мере, ВвестиСтроку(). К сожалению, MsgBalloon и InputBalloon не предлагают таймаут время ожидания ответа пользователя, но этот недостаток легко обойти и средствами встроенного языка. Значительно расширяет возможности использование объекта FormBalloon. С его помощью можно создавать более сложные диалоги, включающие радио-кнопки, окна ввода, любые наборы кнопок, иконки, разделители и пр. Простые кнопки и радио-кнопки добавляются к диалогу с помощью соответствующих методов Add(), остальные элементы через свойства объекта. Выводится диалог методом ShowFormBalloon():
Кнопка добавляется так:
а радио-кнопки так:
Радио-кнопки будут расположены в диалоге в том порядке, в котором они добавлялись методом Add(). В диалоге можно разместить только одну группу радио-кнопок. Щелчок по любой радио-кнопке закрывает диалог, как и по обычной кнопке. Получить, что именно нажал пользователь можно, используя свойства ButtonPressed и OptionPressed. Эти свойства принимают значения номера по коллекции нажатой кнопки или ноль, если кнопка не была нажата. Вот как, например, можно организовать выбор из перечисления.
Окошко ввода текста добавляется свойством ТехтВох, если 1 (True) отображать в диалоге, 0 (False) не отображать. Используя FormBalloon, его можно сделать многострочным и задать строку "по умолчанию".
Другие свойства: 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. Она бесплатна, но и возможностей у неё маловато. |
Партнеры: Также может быть интересно: Канал Россия 1 на http://spbtvonline.ru/ |
||||||||||||||
Сайт поддерживается за счет партнеров: | |||||||||||||||
:::... Сайт содержит архив двух версий hare.ru | Карта сайта |