Wiki1CPP: ИспользованиеЭлементовУправления1С ...

Home Page | Каталог | Изменения | НовыеКомментарии | Пользователи | Вам запрещён доступРегистрация | Вход:  Пароль:  

Использование элементов управления 1С


Статья описывает как создавать и получать данные из стандартного элемента управления 1С: поле ввода (возможно, с кнопкой выбора).

Общие сведения


Существует два класса для работы с полями ввода: CMaskEdit и CBtnEdit. При этом CBtnEdit является наследником CMaskEdit и только немного расширяет функционал CMaskEdit: добавляет отображение кнопки выбора («педальки») и генерацию событий при ее нажатии.

Создание элемента управления


В нашем классе, наследнике CWnd, определяем переменную типа CBtnEdit (или CMaskEdit, далее будем рассматривать только CBtnEdit):


Для хранения значения, которое будет меняться этим элементом определяем еще одну переменную класса типа CDate, CNumeric или CString:



В функции OnCreate для CWnd или OnInitialUpdate для CView выполняем создание окна – элемента управления:



Как можно видеть, используется стандартная для CWnd функция Create, которая принимает в качестве параметров стиль создаваемого окна, прямоугольник, определяющий, положение и размеры окна, ссылку на родительское окно, идентификатор элемента управления и текст окна. Отличия для одинэсных элементов только в использовании параметра «текст окна». Этот параметр определяет тип и другие параметры создаваемого элемента управления. Строка задается в формате: «ИМЯ_ПАРАМЕТРА1=ЗНАЧЕНИЕ_ПАРАМЕТРА1,ИМЯ_ПАРАМЕТРА2=ЗНАЧЕНИЕ_ПАРАМЕТРА2,...» Доступные параметры (которые удалось пока реконструировать):


Запись и чтение значений

Для записи и чтения данных из элементов 1С применяется стандартный MFC-механизм обмена данными с элементами CWnd. Поэтому в своем классе мы должны определить функцию DoDataExchange, в котором мы должны разместить код обмена данными:



Как можно видеть, применяется функция DDX_MaskText?, экспортируемая из br32.dll. Данная функция будет читать/записывать данные в элемент управления в зависимости от текущего этапа обмена данными.


Для начальной инициализации элемента управления (после создания элемента управления и инициализации соответствующей переменной CNumeric) мы должны вызвать функцию UpdateData (FALSE). Для получения данных из элемента управления мы должны вызвать UpdateData (TRUE).

События, генерируемые элементом управления

Элемент управления генерирует события при помощи отправки сообщений WM_COMMAND родительскому окну. При этом вся информация о событии передается в параметре wParam: в LOWORD (wParam) – идентификатор элемента (с которым он был создан), в HIWORD (wParam) – код события. Расшифрованные события:



Есть и другие события (в частности, получение/потеря фокуса), клик мышкой по элементу и другие.


Для обработки событий можно использовать функцию класса OnCommand:


или можно отредактировать карту сообщений класса.

Использование календаря и калькулятора для «выбора» значения через педальку

Итак, у нас есть возможность отловить событие нажатия на кнопку выбора. Почему бы при поступлении этого события не отобразить календарь или калькулятор, как это обычно делает 1С? Рассмотрим, как это можно сделать.

Выбор даты

Для выбора даты используем класс CCalendar:

Выбор числа

Для выбора числа используем класс CCalculator:


Для нормальной работы класса CCalculator необходимо добавить в определение класса CCalculator переменную

При отсутствии этой переменной 1С падает при конструировании класса CCalculator.

Ввод данных ссылочных типов

Рассматриваемый элемент управления 1С не предоставляет возможности выбирать элементы справочников, документы и т.п. Поэтому остается реализовать эту возможность самостоятельно:


Страницы, ссылающиеся на данную: ИнтерфейсПользователя


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]