Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Класс для создания меню из ActiveX-кнопок и ИнспекторОбъектов (число прочтений - 7613 )
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
Класс для создания меню из ActiveX-кнопок и ИнспекторОбъектов
23. Октября 2010 :: 11:38
Печать  
Требования:
1) Библиотека 3D Active Button Magic: http://www.multimediasoft.com/3dabm/
Файл библиотеки есть в архиве.
При запуске тестовой конфигурации будет производиться попытка установки библиотеки 3D Active Button Magic, если таковая еще не установлена на Вашем компьютере.
2) Файлы 1CPP.dll и Formex.dll поместить в каталог КаталогИБ/DLL


Скачать: http://www.infostart.ru/public/77297/


Позволяет создавать многоуровневое меню из ActiveX объектов-кнопок. Также можно выводить картинку и текст с применением спецэффектов.

В примере тест создания главного меню программы и альтернативы стандартным диалогам Вопрос() и Предупреждение().
На скриншоте все экранные элементы являются ActiveX объектами.

При наведении мышки на кнопку производится подсветка.

Внешний вид экранного элемента настраивается текстом в описании элемента управления.

Можно быстро нарисовать шаблон кнопки в редакторе 3D Button Visual Editor

В тестовой конфигурации также присутствуют объекты для тестирования. В частности класс ИнспекторОбъектов позволяет просматривать поля классов, таблиц значений, списков значений с любой иерархией вложенности. То есть если полем класса является другой класс или таблица значений, то можно просмотреть содержимое поля (как в отладчике 1С8).
28/10/2010 Подправил немного для уменьшения эффекта мерцания формы




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

Код
Выбрать все
//глВопрос(<Текст_вопроса>,<Режим>,<Таймаут>,<ТипИконки>,<ТекстЗаголовка>)
//Назначение:
//Вывести окно вопроса и получить ответ.
//Возвращает ответную реакцию в виде числа или строки, в соответствии с заданием параметра <Режим>:
//-1 или 'Таймаут' ('Timeout'), если закончилось время ожидания ответа;
//1 или 'ОК' ('ОК'), если если нажата кнопка OK;
//2 или 'Отмена' ('Cancel'), если нажата кнопка Отмена;
//3 или 'Стоп' ('Abort'), если нажата кнопка Стоп;
//4 или 'Повтор' ('Retry'), если нажата кнопка Повтор;
//5 или 'Пропустить' ('Ignore'), если нажата кнопка Пропустить;
//6 или 'Да' ('Yes'), если нажата кнопка Да;
//7 или 'Нет' ('No'), если нажата кнопка Нет.
//Параметры:
//<Текст_вопроса> - cтрока текста вопроса;
//<Режим> - определяет набор кнопок диалога в виде числа или строки (в скобках английское написание):
//  0 или 'ОК' ('ОК') - кнопка OK;
//  1 или 'ОК+Отмена' ('OK+Cancel') - кнопки OK и Отмена;
//  2 или 'Стоп+Повтор+Пропустить' ('Abort+Retry+Ignore') - кнопки Стоп, Повтор, Пропустить;
//  3 или 'Да+Нет+Отмена' ('Yes+No+Cancel') - кнопки Да, Нет, Отмена;
//  4 или 'Да+Нет' ('Yes+No') - кнопки Да, Нет;
//  5 или 'Повтор+Отмена' ('Retry+Cancel') - кнопки Повтор, Отмена;
//	   <Текст на кнопке 1>[+<Текст на кнопке 2>][+<Текст на кнопке 3>] - выводятся кнопки с указанными текстами
//	    и возвращается значение = текст на кнопке, которую нажал пользователь
//     Пример:
//	  Рез=глВопрос("Нажмите кнопку, которая нравится... ","Нравится+Не нравится");
//	  Если Рез="Не нравится" Тогда
//		глПредупреждение("Идите в сад!");
//		КонецЕсли;
//<Таймаут> - число секунд времени ожидания ответа (если опущен или 0, то без ограничения).
//ТипИконки - необязательный. Номер типа иконки или имя файла с картинкой wmf .emf .ico .bmp .dib .rle
//			  0 - Information
//			  1 - Exclamation
//		2 - Error
//		3 - Delete
//		4 - Question. По умолчанию
//		5 - Restricted
//		6 - Stop
//		7 - Check
//	  
//ТекстЗаголовка - необязательный. Текст заголовка окна 

« Последняя редакция: 12. Ноября 2010 :: 00:41 - Евген »  
Наверх
wwwICQ  
IP записан
 
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
Скриншот главного меню
Ответ #1 - 23. Октября 2010 :: 11:42
Печать  
Для вывода логотипа, размещенного в файле JPG, размещаем элемент управления Текст и пишем у него в описании:
(в описании можно применять комментарии - строки, которые начинаются с символа # или //)
Код
Выбрать все
3D_Active_Button
#тип экранного элемента - картинка
Style=4
#взять картинку из файла logo.jpg
Picture=logo.jpg
#сделать фон прозрачным
SurfaceTransparentFactor=255
#применить эффект отражения
PictureReflectivityEnabled=1
#отражать половину картинки
PictureReflectivityPerc =50
 



При инициализации формы автоматически производится парсинг описаний экранных элементов, создается ActiveX объект в случае, если в описании первой строкой идет слово 3D_Active_Button и примененяются указанные параметры к созданному ActiveX-объекту.
Это позволяет достаточно быстро настраивать требуемый вид экранного элемента.

Для отображения кнопки указываем в описании:

Код
Выбрать все
3D_Active_Button
File=Кнопка.3bt

Описание:
Регистрация продаж
 



Значения параметров:

3D_Active_Button  требуется заменить экранный элемент объектом
File=Кнопка.3bt загрузить шаблон, созданный в программе 3D Button Visual Editor
Описание: - со следующей строки идет описание кнопки. Этот текст можно выводить в качестве подсказки. В примере текст подсказки отображается на панели слева от кнопок
« Последняя редакция: 23. Октября 2010 :: 17:00 - Евген »  

PictureParams.JPG ( 39 KB | Загрузки )
PictureParams.JPG
Наверх
wwwICQ  
IP записан
 
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
Скриншот Подменю
Ответ #2 - 23. Октября 2010 :: 11:43
Печать  
Круглые глаза
  

ServiceMenu.JPG ( 42 KB | Загрузки )
ServiceMenu.JPG
Наверх
wwwICQ  
IP записан
 
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
ИнспекторОбъектов Просмотр таблицы значений
Ответ #3 - 23. Октября 2010 :: 11:49
Печать  
При клике на ячейке с объектным содержимым, откроется окно просмотра содержимого поля, в котором таким же образом можно просматривать содержимое ячеек.
« Последняя редакция: 23. Октября 2010 :: 15:52 - Евген »  

ObjectInspectorTZ_001.JPG ( 52 KB | Загрузки )
ObjectInspectorTZ_001.JPG
Наверх
wwwICQ  
IP записан
 
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
ИнспекторОбъектов Просмотр списка значений
Ответ #4 - 23. Октября 2010 :: 11:55
Печать  
Просмотр содержимого объекта "СписокЗначений"
« Последняя редакция: 23. Октября 2010 :: 14:00 - Евген »  

ObjectInspectorSZ.JPG ( 27 KB | Загрузки )
ObjectInspectorSZ.JPG
Наверх
wwwICQ  
IP записан
 
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
ИнспекторОбъектов Просмотр класса
Ответ #5 - 23. Октября 2010 :: 11:56
Печать  
Просмотр содержимого полей класса
« Последняя редакция: 23. Октября 2010 :: 15:53 - Евген »  

ObjectInspector_001.JPG ( 20 KB | Загрузки )
ObjectInspector_001.JPG
Наверх
wwwICQ  
IP записан
 
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
Картинки на кнопке.
Ответ #6 - 23. Октября 2010 :: 16:04
Печать  
Добавлен эффект отражения картинки.
Управление положением текста и картинки

Параметры кнопки "Выход в Winodws"

Код
Выбрать все
3D_Active_Button
#Грузим шаблон из файла
File=Кнопка.3bt
#Текст выровняем влево
TextCaptionAlignment=0
#Сдвинем тект немного вправо
TextDescrCaption.OffsetX=20
#грузим картинку из файла
Picture=Windows.bmp
#Картинку делаем видимой
PictureVisible =1
#Картинку выровняем влево
PicturePosition=4
#Сдвинем картинку немного вправо
PictureXOffset=10

#Включим спецэффект отражения
PictureReflectivityEnabled=1
#Отражаем 30% картинки
PictureReflectivityPerc =30

#Настроим комментарий для дальнейшего отображения в панели подсказки

Описание:
Завершение работы программы. Выход в операционную систему.
 

« Последняя редакция: 23. Октября 2010 :: 18:28 - Евген »  

PicturesOnButton.jpg ( 42 KB | Загрузки )
PicturesOnButton.jpg
Наверх
wwwICQ  
IP записан
 
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
Re: Класс для создания меню из ActiveX-кнопок и ИнспекторОбъектов
Ответ #7 - 24. Октября 2010 :: 15:13
Печать  
Замена диалогу Вопрос
  

_______005.JPG ( 31 KB | Загрузки )
_______005.JPG
Наверх
wwwICQ  
IP записан
 
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
Re: Класс для создания меню из ActiveX-кнопок и ИнспекторОбъектов
Ответ #8 - 24. Октября 2010 :: 15:14
Печать  
Замена диалогу Предупреждение
  

______________.JPG ( 30 KB | Загрузки )
______________.JPG
Наверх
wwwICQ  
IP записан
 
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
Re: Класс для создания меню из ActiveX-кнопок и ИнспекторОбъектов
Ответ #9 - 24. Октября 2010 :: 15:15
Печать  
Еще один вариант использования диалога Вопрос
  

Question1.JPG ( 25 KB | Загрузки )
Question1.JPG
Наверх
wwwICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс для создания меню из ActiveX-кнопок и ИнспекторОбъектов
Ответ #10 - 25. Октября 2010 :: 05:16
Печать  
еще бы версию убрать с формы..что скриптом к опенконфу ставит автоматом
А то некузяво выглядит.
Улыбка
  
Наверх
 
IP записан
 
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
Re: Класс для создания меню из ActiveX-кнопок и ИнспекторОбъектов
Ответ #11 - 25. Октября 2010 :: 17:50
Печать  
Сейчас пытаюсь заставить форму поменьше "моргать" при отрисовке.
Если все параметры вывода кнопки прописывать вручную - моргает меньше... Но полностью проблема не исчезает.
  
Наверх
wwwICQ  
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Класс для создания меню из ActiveX-кнопок и ИнспекторОбъектов
Ответ #12 - 26. Октября 2010 :: 00:50
Печать  
Евген писал(а) 25. Октября 2010 :: 17:50:
Сейчас пытаюсь заставить форму поменьше "моргать" при отрисовке.
Если все параметры вывода кнопки прописывать вручную - моргает меньше... Но полностью проблема не исчезает.

Сомневаюсь, что этого возможно добиться в 1С.
Отрисовка обычно делается не в том же потоке, что и основная работа проги, а разве в 1С этого реально добиться?
  
Наверх
 
IP записан
 
Евген
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Местоположение: Улан-Удэ
Зарегистрирован: 20. Января 2009
Пол: Мужской
Re: Класс для создания меню из ActiveX-кнопок и ИнспекторОбъектов
Ответ #13 - 27. Октября 2010 :: 19:43
Печать  
Немного изменил классы и работу с АктивИкс. "Моргания" стало намного меньше.
Обнаружил, что если мы используем элемент управления ActiveX в режиме статического текста со спецэффектами (Style=STYLE_LABEL), то получаем эффект моргания.
  
Наверх
wwwICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать