Адрес этой странички:
http://d1cv8.narod.ru/top_005/d1cv8_20090926_001/d1cv8_20090926_002.htm Дата: 26.09.2009 Интернет-приложение к книге "Delphi и 1С:Предприятие.Программирование информационного обмена" |
Часть |
Глава 5. Расширение
функционала 1С.
ActiveFormX в среде
1Cv8.
(продолжение)
Свойства и методы ActiveFormX (доступ из 1Cv8)
|
Откроем Delphi-проект и доработаем нашу "пустую" ActiveX-форму, "положив" на форму Delphi-компонент (TN1 : TTabbedNotebook) :
Наделим нашу форму свойством "Кол-во вкладок" (атрибут: "ТолькоЧтение") у
Delphi-компонента TN1.
Для этого нужно выбрать пункт меню "View"
-> "Type Library"
и, отметив строку IMy_ActiveFormX_01,
открыть всплывающее меню (по правой кнопке мыши), где выбрать пункт
"Property" :
После того, как будет создано две новые строки (новое свойство), нужно
переименовать (одну из них), указав идентификатор (имя) нужного свойства (в
нашем случае PagesCount).
При создании нового свойства - в списке свойств и методов появляются ДВЕ строки (одна - метод, реализующий чтение значения свойства, а другая - метод, реализующий запись значения свойства).
В нашем случае, свойство
PagesCount ("Кол-во
вкладок") имеет атрибут "ТолькоЧтение".
Поэтому, мы должны "найти" и удалить метод, реализующий запись значения этого
свойства :
Реализация метода, "отвечающего" за чтение значения этого свойства :
Теперь добавим метод, "отвечающий" за чтение наименования вкладки (компонента
TN1) по заданному индексу (номеру) вкладки.
Идентификатор (имя) метода будет
PageName_Get.
Метод будет иметь один входной параметр (номер вкладки
компонента TN1) и возвращаемое значение (имя
вкладки TN1).
Чтобы создать новый метод, нужно точно также (как в предыдущем пункте) открыть всплывающее меню (по правой кнопке мыши), где выбрать пункт "Method" :
Затем, нужно указать идентификатор (имя) метода (в нашем случае:
PageName_Get)
и перейти на вкладку "Parameters"
:
Нажать на кнопку "Add".
В таблице параметров появится новая строка. Нужно переименовать параметр (хотя
это и НЕ принципиально), указав ему какой-то "ясный по смыслу" идентификатор :
Это - входной параметр (атрибут Modifier
имеет значение
in) :
"номер вкладки" компонента TN1.
Тип параметра : long (integer).
Теперь, добавим еще один параметр (кнопка Add)
- (возвращаемое значение).
Идентификатор параметра: Res (созвучно с
Result).
Тип параметра : BSTR (string) :
В результате получим это :
Реализация метода PageName_Get
:
Точно также (как и в предыдущем пункте) создадим метод, "отвечающий" за
изменение наименования вкладки (компонента TN1) по заданному индексу (номеру) вкладки.
Идентификатор (имя) метода будет
PageName_Set.
Метод будет иметь два входных параметра (номер и новое
имя вкладки
компонента TN1) и возвращаемое значение (результат
операции: <=0 - ошибка, >0-успешно).
Реализация метода PageName_Set
:
Далее, скомпилировать проект (результирующий файл : My_ActiveFormX_01_afx.ocx).
Закрыть конфигуратор (и программу) 1Cv8.
Заменить ocx-файл с предыдущей версией нашей ActiveX-формы (в каталоге OCX) - на новый.
Зарегистрировать (если это еще не производилось с предыдущей версией ocx-файла) : RegSvr32 My_ActiveFormX_01_afx.ocx
Теперь, нужно открыть конфигуратор 1Cv8 :
Далее, открыть нашу "внешнюю обработку" (файл Тест_My_ActiveFormX_01_afx_ocx_01.epf) и доработать следующим образом :
Реализация методов (обработчиков событий) в контексте формы "внешней обработки" :
Сохранить изменения в новый файл: Тест_My_ActiveFormX_01_afx_ocx_02.epf
Теперь нужно запустить
программу 1С:Предприятие и открыть файл внешней обработки
Тест_My_ActiveFormX_01_afx_ocx_02.epf :
Как видно (см.рис. выше), наш "тандем" (1Cv8 <->
ActiveX-форма) успешно функционируют.
Попробуем сделать изменение наименования НЕсуществующей вкладки :
Результат - "на лице" ...
Теперь попробуем изменить наименование существующей вкладки :
Результат - (опять же) "на лице" ...
Исходники этого примера можно скачать здесь : Delphi-проект (354 кб) , "Внешняя обработка" (1Cv8) (5.3 кб).