Мини-класс (наследник АктивИкс) для замены стандартных 1С-кнопок на АктивИкс-кнопку 3D Active Button Magic.
Кнопки заменяются через "ВыполняемыйМодуль" в глобальной процедуре ПослеСозданияФормы(), ну, или в Перехватчике, кто его использует.
Чтобы создалась АктивИкс-кнопка у 1С-кнопки должен быть Идентификатор.
Если в кнопке нужно использовать картинку, то идентификатор 1С-кнопки задается таким способом: кнЗакрыть_БлаБлаБла, кнОк_БлаБлаБла и т.п.
Первая часть до символа подчеркивания должна совпадать с именем картинки (ico или bmp, предпочтительнее ico) из каталога Pic\.
Если в этой же папке существует шаблон АктивИкс-кнопки (*.3bt), то будет использовать этот шаблон для кнопки.
По умолчанию используется шаблон "Обычная.3bt"
Процедура ПослеСозданияФормы(Конт)
л_ВМ = СоздатьОбъект("ВыполняемыйМодуль");
Для Х = 0 По ФормаРасш.КоличествоАтрибутов() - 1 Цикл
Об=ФормаРасш.ПолучитьАтрибут(Х);
ТипОб=Об.Тип;
Если ТипОб = 3 Тогда
ИдОб = СК(ИдЭлем);
Если ПустаяСтрока(ИдОб)=0 Тогда
Попытка
Опис = СтрЗаменить(Об.Описание,РазделительСтрок,"|");
ПозПроб = Найти(ИдОб,"_"); ПозПроб = ?(ПозПроб=0,СтрДлина(ИдОб),ПозПроб-1);
Настройки = Лев(ИдОб,ПозПроб);
Формула = Об.Формула;
Формула = СтрЗаменить(Формула,"""","""""");
ИмяПроц = "НоваяКнопка_"+ИдОб;
ИмяПерем = "Кн"+ИдОб;
ТекстМодуля = "
|Перем "+ИмяПерем+";
|
|Процедура "+ИмяПроц+"()
//| Сообщить(""Создали кнопку"");
| Ф=СоздатьОбъект(""Форма""); Ф.УстановитьФорму(Форма);
| "+ИмяПерем+"=СоздатьОбъект(""КрасиваяКнопка"");
| Ф.СоздатьЭлементУправления("+ИмяПерем+","""+ИдОб+""");
| и+""");";
Если ПустаяСтрока(Формула)=0 Тогда
ТекстМодуля=ТекстМодуля+"
| "+ИмяПерем+".ФормулаКнопки="""+Формула+""";
|";
КонецЕсли;
ТекстМодуля=ТекстМодуля+"
|КонецПроцедуры
|
|"+ИмяПроц+"();
|";
л_ВМ.УстановитьМодуль(ТекстМодуля);
л_ВМ.НазначитьКонтекст(Конт);
л_ВМ.КомпилироватьИВыполнитьМодуль();
Исключение
//Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Для того, чтобы изменить доступность КрасивойКнопки нужно сделать такой вызов для кнопки "кнЗакрыть":
Ф=СоздатьОбъект("Форма"); Ф.УстановитьФорму(Фрм); ОбКнопки = Ф.ПолучитьЭлементУправления("кнЗакрыть"); ОбКнопки.Доступность = 0;
Или ещё более общий вариант. Прописать глобальную процедуру:
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Процедура ОбновитьДоступностьАктивИксКнопки(Конт) Экспорт
//Для того, чтобы изменить доступность КрасивойКнопки нужно сделать вызов этой функции в функции обновления формы
Попытка
Форма = Конт.Форма;
ФормаРасш = СоздатьОбъект("РасширениеФормы");
ФормаРасш.УстановитьФорму(Форма);
Ф=СоздатьОбъект("Форма"); Ф.УстановитьФорму(Форма);
Для Х = 0 По ФормаРасш.КоличествоАтрибутов() - 1 Цикл
Об=ФормаРасш.ПолучитьАтрибут(Х);
ТипОб=Об.Тип;
Если ТипОб=3 Тогда
ИдЭлем = Об.Идентификатор;
Попытка
ОбКнопки = Ф.ПолучитьЭлементУправления(ИдЭлем); ОбКнопки.Доступность = Об.Доступность;
Исключение
КонецПопытки;
КонецЕсли;
КонецЦикла;
Исключение
КонецПопытки;
КонецПроцедуры
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
И сделать вызов этой процедуры из функции обновления формы