MiracleV8 универсальная компонента для расширения возможностей 1С 7.7 и 1С 8.1 Общее описание: Библиотека выполнена по ТСВК фирмы 1С, является полностью самодостаточной, не требует установки дополнительного ПО. Некоторые методы библиотеки не являются актуальными для 1С 8.1 (например, метод GenerateGIUD, уже реализованный в 8.1), в дальнейшем описании ссылки на неактуальность приводиться не будут. Некоторые термины: MDI – окно MDI-программы (Multiple document interface), в контексте: темно-серое окно 1С. Хэндл (дескриптор) – уникальный целочисленный идентификатор окна, который система присваивает любому окну при его создании. Хэндл однозначно определяет конкретное окно. Загрузка: ЗагрузитьВнешнююКомпоненту(Путь+"MiracleV8.dll"); Примечание: первый раз 1С обязательно должна быть запущена с правами локального администратора (1С производит регистрацию в реестре) Создание объекта: 8.1 L=ПолучитьCOMОбъект("","AddIn.MiracleClass"); 7.7 L=СоздатьОбъект("AddIn.MiracleClass"); Примечание: L (или любая другая) - переменная для обращения к методам библиотеки. Методы: SetMainIcon(ПолноеИмяИконки: строка) – установить иконку главного окна 1С. SetMainText(Заголовок: строка) – установить заголовок главного окна 1С. MinimizeToTray(ПолноеИмяИконкиДляТрея, СкрыватьВПанелиЗадач) – установить интерактивную иконку главного окна 1С в системном трее. ПолноеИмяИконкиДляТрея – строка, необязательный, если не указан: «родная» иконка. СкрыватьВПанелиЗадач – число, необязательный, по умолчанию 0. Если 1 – значок главного окна 1С не отображается в панели задач, остается только иконка в трее. Двойной клик по иконке скрывает/показывает окно 1С. По правому клику выводится pop-up меню. Меню позволяет скрыть окно 1С, с последующим отображением только после ввода пароля. TrayIconHint(Текст) – установить текст хинта трей-иконки TrayIconBalloon(ЗаголовокБаллуна,ТекстБаллуна,ТипБаллуна,ВремяПоказаБаллуна) – вывести баллун к трей-иконке. ЗаголовокБаллуна,ТекстБаллуна – строка. Необязательные, по умолчанию пусто. ТипБаллуна – число 1-3: информация, предупреждение, ошибка. Необязательный, по умолчанию 1. ВремяПоказаБаллуна – число. Сколько секунд показывать баллун. Если ноль – до закрытия пользователем. Необязательный, по умолчанию 0. PlaySound(ПолноеИмяМедиаФайла: строка) – проиграть файл *.mid, *.wav, *.mp3 Для файлов *.mp3 возвращает строку – длительность трека. StopSound() – остановить воспроизведение файла *.mp3 и разрушить экземпляр плейера PlayVideo(ПолноеИмяМедиаФайла: строка) Примечания: - проигрываются только файлы *.avi - воспроизведение асинхронное (независимое, не тормозящее) - при каждом последующем вызове PlayVideo, предыдущий экземпляр плейера разрушается - воспроизведение осуществляется прямо на форме вызывающего отчета. - воспроизведение только в истинном размере медиа-файла, без мастштабирования - размер формы автоматически подстраивается под размер файла - компонент Дельфи MPlayer очень капризен к установленным кодекам. у меня установлен "K-Lite Codec Pack Full 3.65.exe" - работает. StopVideo() – остановить воспроизведение и разрушить экземпляр плейера ScreenShot(ПолноеИмяФайлаДляЗаписиКартинки) – выполнить моментальный снимок экрана и сохранить в формате «jpg». CloseMessWnd() – закрыть окно сообщений 1С. SleepTime(ИнтервалЗадержки: целое, мс) - ненагружающая процессор задержка выпонения, мс SetMainTransparency(ТребуемаяПрозрачностьОкна1С) – число от 0 (полностью прозрачно, невидимо) до 255 (абсолютно непрозрачно) SetAviAnimator(ЛеваяКрайняяТочка, ВерхняяКрайняяТочка, ПолноеИмяФайлаAVI) Устанавливает на форму avi-аниматор для анимированных картинок (не путать с файлами avi для фильмов!). Аниматор подстраивается под размер картинки. SetGifAnimator(ЛеваяКрайняяТочка, ВерхняяКрайняяТочка, ПолноеИмяФайлаGif) Устанавливает gif-аниматор для анимированных gif-картинок. Аниматор подстраивается под размер картинки. Примечание: один из сайтов с gif-картинками http://www.livegif.ru/archive/the_best/11_1.html SetTrackBar(Ширина,МаксимальноеЗначение) – установить на форму отчета ползунок (TrackBar). Ширина, МаксимальноеЗначение – целые числа. При интерактивном изменении трек-бара он генерирует внешнее событие Источник=«MiracleV8» , Событие=«TrackBarChanged», Данные – строка числового значения позиции трек-бара. Событие может быть обработано процедурой ОбработкаВнешнегоСобытия(Источник,Событие,Данные) TrackPosition(Позиция) – программная установка позиции трек-бара (в таком раскладе может быть использован, как индикатор прогресса) SetProgressBarEx(Сплошной,ЦветОт,ЦветДо:целые) – установить на форму индикатор типа прогресс-бар Сплошной: необязательный, по умолчанию 0. Если не ноль - индикатор не прерывистый ЦветОт: целочисленное значение цвета (для объемности, по центру), необязательный, по умолчанию 3265321 ЦветОт: целочисленное значение цвета (для объемности, по краям), необязательный, по умолчанию 11399085 Примечание: для удобства проектирования индикатор встраивается в рамку на форме с надписью «Gauge», которой следует установить свойство «невидимый» Важно! Для версии 1С 8.1 необходимо рамку перевести на передний план: Форма-Порядок-На передний план. ProgressBarPosition(Позиция: целое 0-100) – установить позицию прогресс-бара. При установке Позиция=100, прогресс-бар автоматически разрушается SetStatusBarGauge(ЦветСтарт,ЦветФиниш,Лево,Ширина:целые) – установить индикатор прогресса на статус-панели 1С (там, где выводится Состояние(«бла-бла»), в правой части панели). Значение процента прогресса выводится посередине индикатора. ЦветСтарт,ЦветФиниш - необязательные, по умолчанию от белого до темно-серого, цвет полоски индикатора Лево - необязательный, если ноль - встроенное, иначе указанное - левая граница бара на статус панели Ширина - необязательный, если ноль - встроенное (150), иначе указанное - ширина бара на статус панели. Примечание: каждый новый SetStatusBarGauge разрушает старый (если он был) StatusBarGaugePosition(Позиция: целое 0-100) – установить позицию StatusBarGauge. При установке Позиция=100, индикатор автоматически разрушается. RUS(), ENG() – переключиться в соответствующую раскладку. Примечание: удобно при старте 1С сделать RUS(), если в системе по умолчанию английский. NextKeyboardLayout() – переключиться на следующую раскладку (по кругу), если в системе установлены и другие раскладки. CapsOFF(), CapsON(), NumLockOFF(), NumLockON() – включить/выключить соответствующие клавиши MainNoMinimize(),MainNoMaximize() – заблокировать кнопки минимизации/максимизации главного окна 1С. FlashMain() – помигать иконкой 1С на панели задач для привлечения внимания SetStatusBarPanel(Лево, Ширина: целые) – установить на статус- панель 1С дополнительную панель для вывода текста StatusBarPanelText(Текст, Цвет, Жирный) – установить текст на StatusBarPanel. Можно использовать как дополнительную информацию типа Состояние(«бла-бла»). Текст – строка, нужный текст Цвет – целое, цвет текста (необязательный) Жирный:- 1 или 0 (необязательный) FlashStatusBarText() – помигать текстом на StatusBarPanel для привлечения внимания. RND(Интервал: целое) – сгенерировать случайное целое в интервале 0..Интервал EncodeText(ТекстДляКодирования, Ключ: строки) – закодировать текст с использованием capicom.dll (проверьте ее наличие в WINDOWS\system32\). Ключ – необязательный, если не задан – внутренний ключ библиотеки DecodeText(ТекстДляКодирования, Ключ: строки) – декодировать ранее закодированный текст. Ключ – необязательный, если не задан – внутренний ключ библиотеки LockWorkStation() – заблокировать рабочую станцию. DoEvent(Событие,Данные) – сгенерировать программно внешнее событие (параметр Источник всегда =«MiracleV8») DoEventEx(Источник,Событие,Данные) – сгенерировать программно внешнее событие. GetUserSID(): строка – вернуть SID пользователя. Примечание: Идентификатор безопасности (англ. Security Identifier (SID)) — структура данных переменной длины, которая идентифицирует учетную запись пользователя, группы, домена или компьютера. FileVersion(ПолноеИмяФайла): строка – вернуть версию файла (если она существует) GetCLSID(ИмяОбъекта): строка – вернуть CLSID зарегистрированного в системе объекта. Имя объекта: строка, например «AddIn.MiracleClass» GetColor(R, G, B: целые до 255): целое – вернуть целочисленное значение цвета по RGB составляющим GetR(Цвет), GetG(Цвет), GetB(Цвет) – вернуть составляющие RGB по целочисленному значению цвета. SelectColor(): целое – вызывает стандартный диалог Windows для выбора цвета, возвращает целочисленное значение цвета. is1CPP(): целое 0 или 1 – зарегистрирована ли в системе 1C++ IsAdmistrator(): целое 0 или 1 – обладает ли пользователь локальными административными правами UserNetName(): строка – возвращает сетевое имя пользователя. Примечание: мне как-то в 7.7 понадобилось именно сетевое, а не 1С-кое имя (в терминальном режиме) GenerateGIUD(): строка – возвращает сгенерированный GIUD. RandomPassword(ДлинаПароля): строка – возвращает сгенерированный случайным образом пароль из англ. больших и маленьких букв и цифр Примечание: одно время забодало меня их выдумывать ;) RDTSCF(): целое. Количества тактов процессора со времени работы системы. Самый точный способ определения временного интервала. Set1CMaxPriority() – установить текущему экземпляру 1С максимальный приоритет. Примечание: к чему может привести – не знаю ;) SetBackTimer(Интервал: целое, мс) – установить на главное окно одноразовый таймер (после отработки - удаляется). При отработке генерирует внешнее событие «MiracleV8», «BACKTIMER»,ИнтервалТаймера. Примечание: количество таймеров не ограничено. CaptureWindow(ХэндлОкнаДляЗахвата, Режим) – захватывает окно в окно 1С. ХэндлОкна – Хэндл окна для захвата (см. ниже WinAPI для продвинутых). Режим: целое: 0 – сделать родителем MDI, 1 – главное окно, другое – вызывающую форму Примечание: только не сворачивайте захваченные окна, сворачиваются в никуда ;) MDIhref(Ссылка) – внедрить в MDI веб-окно по ссылке. Ссылка: либо файл *.htm, либо адрес веб-ресурса (например, http://www.infostart.ru/ с полной работоспособностью). Примечание: используется компонента, которая в свою очередь использует Internet Explorer. Reporthref(Сылка; ЛеваяКрайняяТочка, ВерхняяКрайняяТочка, Ширина,Высота) - то же, что и выше, но для формы. CreateExtWnd(Лево, Верх, Ширина, Всота, Прозрачность: целые) - создать дочернее окно 1С с заданными параметрами. Возвращает интерфейс созданного окна. Примечание: для дополнтельной информативности Методы интерфеса: SetFontSize(РазмерШрифта: целое) - установить размер шрифта для текста в окне SetFontColor(ЦветШрифта: целое) - челочисленное значение цвета шрифта для текста в окне SetFormColor(ЦветФормы: целое) - челочисленное значение цвета формы SetWndText(Текст: строка) - установить текст на форме HideMe(), ShowMe() - спрятать/показать окно CloseMe() - закрыть окно Некоторые возможности WinAPI для продвинутых: FindWnd(ИмяКласса,Заголовок): целое. Возвращает хэндл окна с заданным классом и заголовком. Если ИмяКласса=Пусто, то поиск только по заголовку, если Заголовок=Пусто, то поиск только по имени класса. EnumWnd(): многострочная строка. Перечисляет все окна верхнего уровня, возвращает многострочную строку, каждая из строчек которой имеет вид: ЗаголовокОкна;ИмяКлассаОкна;Хэндл (разделитель - точка с запятой) EnumChildWnd(ХэндлРодителя): многострочная строка. Перечисляет все дочерние окна родительского окна, возвращает многострочную строку, каждая из строчек которой имеет вид: ЗаголовокОкна;ИмяКлассаОкна;Хэндл (разделитель - точка с запятой) ShowWnd({Хэндл,Режим: целые) – показать/спрятать окно с указанным хэндлом. Режим=0 – спрятать, Режим=1 – показать. Работа с Excel Библиотека работает с файлами xls напрямую, не требует установленных на компьютере Microsoft Office и OpenOffice. ReadXLS(ПолноеИмяФайлаXLS) – считывает файл xls, возвращает количество листов в файле RowCount(НомерЛиста) – возвращает количество строк в листе считанного xls-файла ColCount(НомерЛиста) – возвращает количество столбцов в в листе считанного xls-файла ReadCell(НомерЛиста, НомерСтроки, НомерСтолбца) – считывает значение соотвествующей ячейки xls-файле Примечание: отсчет идет от 1 до Счетчик, а не от 0 до Счетчик-1 ПРИМЕЧАНИЯ для работы с визуальными компонентами на форме (важно!!!!): Так как компоненты типа ProgressBar, AviAnimator, GifAnimator и т.п. используют для установки хэндл отчета, нельзя применять их установку в процедуре ПриОткрытии() - хэндл еще не существует. Способ обойти проблему, если хотите установить сразу при запуске отчета (обработки) 7.7 Процедура УстановитьТрекБар() // ОбработкаОжидания отрабатывает только один раз, ниже ее отключаем. // Хэндл окна отчета уже есть Форма.ОбработкаОжидания("УстановитьТрекБар",0); L.SetTrackBar(400,255); L.TrackPosition(255); КонецПроцедуры Процедура ПриОткрытии() Форма.ОбработкаОжидания("УстановитьТрекБар",1); КонецПроцедуры Другой вариант для 7.7 - formex, процедура ПослеОткрытия() 8.1 Процедура УстановитьТрекБар() // Хэндл окна отчета уже есть L.SetTrackBar(Ширина-10,255); L.TrackPosition(255); КонецПроцедуры Процедура ПриОткрытии() // для 8.1 можно сразу установить одноразовый обработчик (через 0.1 сек) ПодключитьОбработчикОжидания("УстановитьТрекБар",0.1,Истина); КонецПроцедуры 1.9.6.7 Ранее недокументрованные и добавленные методы: WipeFile(ПолноеИмяФайла:строка,ЧислоПроходов:число) - удалить файл с практической невозможностью его восстановления. Принцип работы: перед удалением в файл записываются блоки длиной 4096 байт со случайным смещением случайными значениями каждого байта ($00..$FF). Количество перезаписываемых блоков =ЧислоПроходов. После перезаписи файл удаляется. KillTask(ИмяМодуляПроцесса:строка,НеТрогатьСебя:число) Убить процесс, запущенный модулем с соответствующим именем НеТрогатьСебя - необязательный, по умолчанию 1. Убиваются ВСЕ процессы данного модуля (в т.ч. и системные - аккуратнее!) НеТрогатьСебя имеет смысл только для процессов 1CVx.exe. Например, в терминальном режиме по L.KillTask("1cv8.exe") убются процессы всех пользователей, кроме процесса, вызвавшего метод (Ваша 1С будет целехонька ;)) По L.KillTask("1cv8.exe",0) - ВСЕ процессы. Примечание: KillTask("1cv8.exe") и KillTask("1cv8.exe",0) "замочат" и Конфигуратор в любом случае CompareFiles(Файл1,Файл2): целое - сравнение файлов (только на предмет хоть одного отличия в байтах) Возвращает 0, если файлы идентичны, 1 - различаются FreeMDIHref(), FreeReportHref() - разрушение ранее установленных объектов MDIhref и Reporthref KbdHook() - установить клавирный хук на окно 1С. После установки библиотеки генерирует внешние события Источник="MiracleV8_KbdHook" Событие: "KEYUP" или "KEYDOWN" Данные: строка числового значения кода клавиши KbdUnHook() - удалить ранее установленный клавирный хук 1.9.6.8 Добавлен контроль "рождаемости/сметрности" форм L.SetNewMDIWindowProc() переопределить основную оконную процедуру WindowProc для окна MDI Примечание: ничего страшного! ;) после обработки в новой процедуре события WM_PARENTNOTIFY вызывается старая (родная ) оконная процедура Обработка события WM_PARENTNOTIFY позволяет отследить создание/разрушение форм. Генерирует внешние события Источник="MiracleV8_MDI" Событие = "FormCreate" (рождение) или "FormDestroy" (смерть) Данные: для FormCreate - хэндл новой формы, для FormDestroy - заголовок формы и через запятую хэндл Последовательность процедур при рождении формы: ПередОткрытием() // 8.1 ПриОткрытии() FormCreate // что-то вроде ПослеОткрытия() Пример глобального контроля на любые формы (отчеты, обработки, журналы, документы...) // ГМ Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные) Если Источник="MiracleV8_MDI" Тогда ЗаписьЖурналаРегистрации(Событие+" "+Данные); КонецЕсли; КонецПроцедуры Аналог ПослеОткрытия() на форме (8.1) Процедура ВнешнееСобытие(Источник, Событие, Данные) Если Событие="FormCreate" Тогда L.SetTrackBar(Ширина-10,255); L.TrackPosition(255); КонецЕсли; КонецПроцедуры 1.9.6.10 Добавлено всплывающее окно SetDesktopAlert(Текст: строка,ВремяПоказа: целое,Прозрачность: целое) - создать всплывающее окошко Текст - текст для вывода в окне ВремяПоказа,мс - время показа окна, необязательный, по умолчанию 1500 (1.5 сек). Если ВремяПоказа=0 - до закрытия пользователем Прозрачность: целое 0..255, необязательный, по умолчанию 255 (полностью непрозрачное) DeskTopAlertText(const (Текст:строка) - вывести текст в ранее созданное всплывающее окно DestkopAlertShowMode(Режим:целое) - показать/спрятать окошко Режим - необязательный, по умолчанию 1 (показывать). Если 0 - скрыть окно CloseDesktopAlert() - разрушить ранее созданное всплывающее окно Примечание: 1. Размеры окна фиксированы (сколько текста влезет - столько и отобразится) 2. Окно всегда поверх всех окон, независимо свернуто ли главное окно 1С Пример: Процедура КнопкаСформироватьНажатие(Кнопка) // показываем окошко L.DestkopAlertShowMode(); // выводим процент выполнения Для А=0 По 100 Цикл Стр=СокрЛП(" Прогресс: "+Строка(А)+"%"); L.DesktopAlertText(СокрЛП(Стр)); L.SleepTime(100); КонецЦикла; КонецПроцедуры Процедура ПриОткрытии() Стр=""; // создаем и сразу прячем L.SetDesktopAlert(Стр,0,150); // прозрачность 150 L.DestkopAlertShowMode(0); КонецПроцедуры 1.9.6.11 Изменены параметры методов: SetProgressBarEx и SetDesktopAlert (см. выше) Добавлено: RunAs(КоманднаяСтрока, Логин, Домен, Пароль: строки) - запустить программу от имение другого пользователя КоманднаяСтрока - полный путь к файлу exe (с параметрами, если надо) Примечание: для запуска программ, если у текущего пользователя нет соответствующих локальных прав (например, regsvr32) IpConfig(): многострочная строка (результат отработки IpConfig /all) Примечание: темп-файл не используется, вывод напрямую ping(IP: строка): многострочная строка (результат отработки ping XXX.XXX.XXX.XXX) IP - например, "213.180.193.123" Примечание: темп-файл не используется, вывод напрямую 1.9.6.12 Добавлена прямая запись в xls-файл (наличия Excel и Open Office не требует) Методы: NewXLS(ИмяФайла_xls:строка) - установить имя xls-файла. Очищает компонент, удаляет все ранее созданные форматы, добавляет форматы по умолчанию (см. ниже Форматы) Примечание: метод должен быть выполнен перед остальными CellSetString(НомерСтроки,НомерКолонки: числа,Значение: строка,Формат:число) - записать в соответствующую ячейку строчное значение. Значание - строка, которую надо записать в ячеку Фомат: необязательный, по умолчанию 0 (см. ниже "Форматы ячеек") Примечание: нумерация строк/колонок ведется от 1 CellSetString(НомерСтроки,НомерКолонки,Значение,Формат:числа) - записать в соответствующую ячейку числовое значение. Значание - число, которое надо записать в ячеку Фомат: необязательный, по умолчанию 0 (см. ниже Форматы) Примечание: нумерация строк/колонок ведется от 1 XLSWrite() - без параметров, зафиксировать ранее созданные изменения (записать xls-файл) Форматы ячеек: 0 - черный Arial 10 без обрамления ячейки (по умолчанию) 1 - черный Arial 10 с обрамлением ячейки 2 - красный Arial 10 с обрамлением ячейки 3 - черный Arial 10 c обрамлением и заполнением ячейки светло-зеленым 4 - черный Arial 12 жирный без обрамления ячейки Пример: L.NewXLS("c:\test.xls"); L.CellSetString(1,1,"Тест",4); Для А=2 По 10 Цикл L.CellSetString(А,1,"Стр "+Строка(А),1); Если А/2<>Цел(А/2) Тогда Б=-А; L.CellSetNumber(А,2,Б,2); // отрицательные красным Иначе Б=А; L.CellSetNumber(А,2,Б,1); КонецЕсли; КонецЦикла; L.XLSWrite(); // зафиксировали (записали файл) 1.9.7.2 Добавлена возможность создания новых форматов xls-ячейки, использование числовых формул XLSAddFormat(ФонтИмя: строка, ФонтРазмер, ФонтЖирный, ФонтЦвет, ЛеваяРамка, ВерхняяРамка, ПраваяРамка, НижняяРамка, ЦветЯчейки,Положение: целые) - добавляет новый формат, возвращает индекс добавленного формата ФонтИмя - строка с именем шрифта (например, "Courier new") ФонтРазмер - размер шрифта ФонтЖирный - 1 или 0, необзательный, по умолчанию 0 ФонтЦвет - целое, необязательный, по умолчанию 0 (черный) 1 - красный, 2- голубой, 3- темно-синий, 4- светло-зеленый, 5-оранжевый, 6- белый ЛеваяРамка, ВерхняяРамка, ПраваяРамка,НижняяРамка - 1(есть) или 0(нет), необязательные, по умолчанию 1 (есть) ЦветЯчейки - целое, необязательный, по умолчанию 0 (нет заполнения) 1-красный, 2- светло-зеленый, 3-сине-зеленый, 4- светло-желтый Положение - целое, необязательный, по умолчанию1. 1 - лево, 2- центр, 3 - право Примечание: вновь созданные форматы будут актуальны до применения NewXLS Пример: Индекс=L.XLSAddFormat("Courier",10,0,1); - нежирный Courier 10, красный, ячейка полностью в рамке XLSDelFomat(Индекс) - удаляет формат с выбранным индексом, возвращает последний актуальный индекс Примечание: не удаляет формат с индексом 0 (формат по умолчанию) XLSFormatCount() - возвращает количество форматов (отсчет от нуля) Пример: ПоследнийИндекс=L.XLSFormatCount() -1 ; ColNumberToString(НомерСтолбца: целое) - возвращает строковый индекс столбца по числовому Примечание: отсчет столбцлв от 1 Пример: Сообщить(L.ColNumberToString(33)); - выведет "AG" SetCellNumFormula(Строка, Столбец: целые, Формула:строка, Формат: целое) - записать формулу в соотвеств. ячейку Формула - строка формулы без знака равно, например: Формула="A1+B1" Формат - индекс формата, необязательный, по умолчанию 0 Примечание: операторы формул должны быть написаны англискими аналогами, т.е., например,не "Сумм", а "Sum" Пример: L.NewXLS(КаталогИБ()+"test2.xls"); Для сч=1 По 10 Цикл Столбец1=L.ColNumberToString(1); // строка столбца 1 (здесь - "A") Столбец2=L.ColNumberToString(2);// строка столбца 2 (здесь - "B") Формула=Столбец1+Строка(Сч)+"+"+Столбец2+Строка(Сч);// Формула="A1+B1".. "A10+B10" L.CellSetNumber(сч,1,сч); L.CellSetNumber(сч,2,сч*2); L.SetCellNumFormula(сч,3,Формула); КонецЦикла; Формула="SUM("+Столбец1+"1:"+Столбец1+"10)"; // суммируем столбец "A" с ячейки 1 по 10 L.SetCellNumFormula(11,1,Формула); 1.9.7.3 Добавлены новые бантики SetAnalogGauge(Лево, Верх, Диаметр,КвадратнаяРамка: целые) - установить на форму аналоговый индикатор (типа спидометра) Лево, Верх, Диаметр - необязательные, по умолчанию, 10,30,200 КвадратнаяРамка- 0 или 1, необязательный, по умолчанию 0 AnalogGaugePosition(Позиция:целое 0..100) - установить позицию аналогового индикатора AnalogGaugeText(Текст:строка) - установить надпись аналогового индикатора SetAnalogClock(Лево, Верх, Диаметр,Куда,КвадратнаяРамка: целые) - установить аналоговые часы Лево, Верх, Диаметр - необязательные, по умолчанию, 10,30,200 Куда - 0 (на форму), 1 (на MDI), необязательный по умолчанию 0 КвадратнаяРамка- 0 или 1, необязательный, по умолчанию 0 AnalogClockText(Текст:строка) - установить надпись аналоговых часов FreeAnalogClock() - разрушить ранее установленные часы SetVertGauge(Лево, Верх: целые) - установить на форму вертикальный индикатор Лево, Верх - необязательные, по умолчанию, 10,30 (высота всегда 225) VertGaugePosition(Позиция:целое 0..100) - установить позицию вертикального индикатора VertGaugeText(Текст:строка) - установить надпись вертикального индикатора SetThermometer(Лево, Верх, Min, Max: Integer) - установить на форму индикатор-термометр Лево, Верх - необязательные, по умолчанию, 10,30 (высота всегда 225) Min- минимальное значение термометра, необязательный, по умолчанию -40 Max- максимальное значение термометра, необязательный, по умолчанию +40 Примечание: при установке min=0 и max=100 можно использовать как индикатор прогресса ThermometerPosition(Позиция:целое min..max) - установить позицию термометра ThermometerText(Текст:строка) - установить надпись термометра Пример: Процедура КнопкаСформироватьНажатие(Кнопка) L.SetThermometer(); L.ThermometerPosition(-20.7); L.ThermometerText("-20.7"); L.SetVertGauge(150); L.VertGaugePosition(55); L.SetAnalogGauge(300); L.AnalogGaugePosition(77); L.AnalogGaugeText("77%"); L.SetAnalogClock(550); КонецПроцедуры 1.9.7.4 Добавлены новые бантики SetLed(Лево,Верх,Размер: целые) - установить на форму цветной индикатор значения с растровым свечением Лево,Верх,Размер - необязательные, по умолчанию 10,30, 50 Возвращает ссылку на интерфейс. Методы интерфейса: LedValue(Значение: целое 0..100) - уставновить значение индикатора (от него зависит цвет) FreeLed() - разрушить индикатор Примечание: ОБЯЗАТЕЛЬНО в процедуре ПриЗакрытии() используйте этот метод (иначе растр остается на MDI, пока не победил :() Пример: Перем V0,V1,V2,V3; Процедура Очистить() Попытка V0.FreeLed(); V1.FreeLed(); V2.FreeLed(); V3.FreeLed(); Исключение КонецПопытки; КонецПроцедуры Процедура Установить() Очистить(); V0=L.SetLed(10,50); V1=L.SetLed(70,50); V2=L.SetLed(130,50); V3=L.SetLed(190,50); V0.LedValue(25); V1.LedValue(55); V2.LedValue(75); V3.LedValue(100); КонецПроцедуры Процедура КнопкаСформироватьНажатие(Кнопка) // "цветомузыка" Для А=1 По 50 Цикл V0.LedValue(L.RND(100)); V1.LedValue(L.RND(100)); V2.LedValue(L.RND(100)); V3.LedValue(L.RND(100)); L.SleepTime(50); КонецЦикла; // "бегущий огонь" Для А=1 По 10 Цикл V0.LedValue(95);V1.LedValue(0);V2.LedValue(0);V3.LedValue(0); L.SleepTime(80); V0.LedValue(0);V1.LedValue(95);V2.LedValue(0);V3.LedValue(0); L.SleepTime(80); V0.LedValue(0);V1.LedValue(0);V2.LedValue(95);V3.LedValue(0); L.SleepTime(80); V0.LedValue(0);V1.LedValue(0);V2.LedValue(0);V3.LedValue(95); L.SleepTime(80); КонецЦикла; // изменение цвета Для А=0 По 100 Цикл V0.LedValue(А); V1.LedValue(А); V2.LedValue(А); V3.LedValue(А); L.SleepTime(20); КонецЦикла; КонецПроцедуры Процедура ПриОткрытии() ПодключитьОбработчикОжидания("Установить",0.1,Истина); КонецПроцедуры Процедура ПриЗакрытии() Очистить(); КонецПроцедуры SetSegmentClock(Лево,Верх:целые) - установить на форму сегментные часы Лево,Верх - необязательные, по умолчанию 10, 30 SetFlyClock() - установить на MDI аналоговые часы с вожможностью перемещения мышкой Возвращает ссылку на интерфейс Методы интерфейса: ClockText(Текст: строка) - установить текст на часы FreeClock() - разрушить ранее установленные часы SetFlyGauge() - установить на MDI индикатор прогресса с вожможностью перемещения мышкой Возвращает ссылку на интерфейс Методы интерфейса: Position(Значение: число 0..100) - установить значение прогресса Text(Текст:строка) - установить текст индикатора FreeGauge() - разрушить ранее установленный индикатор HideGauge(), ShowGauge() - спрятать/показать ранее установленный индикатор Примечание: если создать индикатор при начале работы системы и сделать переменную интерфейса глобальной, можно использовать его из любых обработок (пряча, когда не надо) Пример: Процедура КнопкаСформироватьНажатие(Кнопка) V=L.SetFlyGauge(); V1=L.SetFlyClock(); V1.ClockText("ROLEX"); Для А=0 По 100 Цикл V.Position(А); V.Text(Строка(А)+"%"); L.SleepTime(30); КонецЦикла; КонецПроцедуры 1.9.8.1 Добавлено (по просьбе Кушнира) UKR() - переключиться на украинскую раскладку заодно уж: MOL() - переключиться на молдавкую раскладку Для других раскладок GetActiveKbdLayout() - возвращает строку кода активной в данный момент раскладки SetActiveKbdLayout(КодРаскладки:строка) - переключается на раскладку с указанным кодом Примечание: нужный код можно получить как раз по GetActiveKbdLayout() Только для 8.1: MakeFree() - делает отчет/обработку независимым от главного окна, отчет остается на экране и при свернутом главно окне CopyMessWndText() - копирует текст окна Сообщений 8.1 в буффер обмена GetClipboardText(): строка - возвращает находящийся в данный момент текст буффера обмена MakeFreeMessWnd(Режим: целое) - делает свободным окно сообщений 8.1 Режим: необязательный, по умолчанию 0. Если не ноль окно сообщений имеет стиль всегда поверх всех окон По просьбам Латыпова для 7.7 EnumMyNotChild(): многострочная строка - перечисляет все окна верхнего уровня, относящиеся к текущей нити 1С, только видимые, исключая главное окно (для отлова модальных окон) KillWnd(Хэндл) - убить окно с указанным хэндлом PressButton(ХэндлОкна:число,ЗаголовокКнопки:строка) - нажать кнопку на окне 7.7 с указанным заголовком Примечание: не забывайте, что в заголовках кнопок может присутствовать символ & Пример отлова и убиения модалок (7.7): ГМ: Перем Сервис Экспорт; Процедура глТаймер() Экспорт Стр=L.EnumMyNotChild(); Если Найти(Стр,";#32770;")>0 Тогда Стр=СтрЗаменить(Стр,";",РазделительСтрок); Хэндл=Число(СтрПолучитьСтроку(Стр,3)); L.KillWnd(Хэндл); // избавились от модальных, кроме Вопрос L.PressButton(Хэндл,"&Нет"); //закрыли Ворос - ответили "Нет" КонецЕсли; КонецПроцедуры Процедура ПриНачалеРаботыСистемы() //...................................... ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"FormEx.dll"); Сервис=СоздатьОбъект("Сервис"); // ОбработкаОжидания Сервис срабатывает и при модальных окнах Сервис.ОбработкаОжидания("глТаймер",3000); КонецПроцедуры © А. Кучер (aka Abadonna), 2009, Красноярск (http://infostart.ru/profile/1329/) Программа распространяется бесплатно, на условиях «как есть», за возможный вред, нанесенный программой, автор ответственности не несет