Объектный тип ТАБЛИЦА
Родительские типы: ЭЛЕМЕНТ → ТАБЛИЦА.
Физический объектный тип c закрытой моделью.
Тип ТАБЛИЦА позволяет создавать таблицы с произвольным количеством столбцов и строк, внешним или внутренним хранением данных и возможностью редактирования ячеек. Тип содержит метод для установки курсора на заданную позицию, два метода для получения номера столбца и номера строки текущей позиции курсора, а также метод для проверки вызова контекстного меню над конкретной ячейкой.
Поля
Размеры и общий вид таблицы определяются следующими полями:
| Тип | Поле | Описание | Значение по умолчанию |
|---|---|---|---|
| ЦЕЛОЕ | кол_столбцов | Количество нефиксированных столбцов. | 4 |
| ЦЕЛОЕ | кол_строк | Количество нефиксированных строк. | 5 |
| ЦЕЛОЕ | кол_фикс_столбцов | Количество фиксированных (заголовочных) столбцов. | 0 |
| ЦЕЛОЕ | кол_фикс_строк | Количество фиксированных строк. | 1 |
Таблица позволяет задавать размеры для каждого столбца и строки, а также атрибуты для каждой ячейки. В качестве полей содержатся значения по умолчанию для размеров и атрибутов, а в индексных полях содержатся специально указанные значения. При отображении таблицы сначала поиск размеров или атрибутов производится в индексном поле. Если в индексном поле не содержится требуемый элемент, то берется значение по умолчанию из соответствующего поля. По такой схеме действуют следующие поля и индексные поля:
| Тип | Поле | Описание | Значение по умолчанию |
|---|---|---|---|
| ЧИСЛО | размер_столбца | Ширина столбца по умолчанию. | 3 |
| ЧИСЛО | размер_строки | Высота строки по умолчанию. | 1 |
| ЧИСЛО: @[] | столбцы | Содержит ширины столбцов в зависимости от их порядкового номера. | |
| ЧИСЛО: @[] | строки | Содержит высоты строк в зависимости от их порядкового номера. | |
| АТРИБУТ_ЯЧЕЙКИ | атрибут | Атрибуты обычной ячейки по умолчанию. | АТРИБУТ_ЯЧЕЙКИ[поворот=0, фон=ЦВЕТ[синий=255, зеленый=255, красный=255], шрифт="", гор_выравн=1, многостр=НЕТ, перенос_слов=ДА, многоточие=ДА, карандаш_гор=КАРАНДАШ[цвет=ЦВЕТ[синий=0, зеленый=0, красный=0], стиль=1, толщина=1], карандаш_верт=КАРАНДАШ[цвет=ЦВЕТ[синий=0, зеленый=0, красный=0], стиль=1, толщина=1], рельеф=0, выд_фон=ЦВЕТ[синий=128, зеленый=0, красный=0], выд_карандаш_гор=КАРАНДАШ[цвет=ЦВЕТ[синий=0, зеленый=0, красный=0], стиль=1, толщина=1], выд_карандаш_верт=КАРАНДАШ[цвет=ЦВЕТ[синий=0, зеленый=0, красный=0], стиль=1, толщина=1], выд_рельеф=0, выд_текст=ЦВЕТ[синий=255, зеленый=255, красный=255], текст=ЦВЕТ[синий=0, зеленый=0, красный=0], вер_выравн=2] |
| АТРИБУТ_ЯЧЕЙКИ | фикс_атрибут | Атрибуты фиксированных (заголовочных) строк и столбцов по умолчанию. | АТРИБУТ_ЯЧЕЙКИ[поворот=0, фон=ЦВЕТ[синий=192, зеленый=192, красный=192], шрифт="", гор_выравн=2, многостр=НЕТ, перенос_слов=ДА, многоточие =ДА, карандаш_гор=КАРАНДАШ[цвет=ЦВЕТ[синий=0, зеленый=0, красный=0], стиль=1, толщина=1], карандаш_верт=КАРАНДАШ[цвет=ЦВЕТ[синий=0, зеленый=0, красный=0], стиль=1, толщина=1], рельеф=2, выд_фон=ЦВЕТ[синий=192, зеленый=192, красный=192], выд_карандаш_гор=КАРАНДАШ[цвет=ЦВЕТ[синий=0, зеленый=0, красный=0], стиль=1, толщина=1], выд_карандаш_верт=КАРАНДАШ[цвет=ЦВЕТ[синий=0, зеленый=0, красный=0], стиль=1, толщина=1], выд_рельеф=-2, выд_текст=ЦВЕТ[синий=0, зеленый=0, красный=0], текст=ЦВЕТ[синий=0, зеленый=0, красный=0], вер_выравн=2] |
| СТРОКА: @[ЦЕЛОЕ(0), ЦЕЛОЕ(0)] | связка_атрибутов | Ставит в соответствие координаты ячеек и строковые имена специальных атрибутов. Нижний предел индексов по умолчанию принимается равным 0. Элементы с индексами (0, y) задают атрибуты целиком для строки, а (x, 0) – целиком для столбца. Приоритет выбора атрибутов: ячейка, строка, столбец, таблица. | |
| АТРИБУТ_ЯЧЕЙКИ: @[СТРОКА] | атрибуты | Содержит специальные атрибуты в зависимости от их строковых имен. |
Следующие поля определяют поведение таблицы при редактировании значений в ячейках:
| Тип | Поле | Описание | Значение по умолчанию |
|---|---|---|---|
| ЛОГИКА | ред_на_симв | Автоматический вход в режим редактирования при нажатии любой буквенно-цифровой клавиши. ДА – нажатие любого буквенно-цифрового символа в текущей ячейке инициирует переход в режим редактирования этой ячейки, причем введенный символ сразу подставляется в ячейку, заменяя предыдущее значение. Также в этом режиме поддерживается переход к редактированию ячейки при вставке текста из буфера обмена. Для этого необходимо, чтобы таблице пришла команда "_PASTE_" и в буфере обмена содержались текстовые данные. Эта команда автоматически приходит таблице при при выборе пункта Правка/Вставить или нажатии соответствующих клавиш. Для программной вставки текста из буфера обмена в ячейку курсора достаточно послать таблице команду "_PASTE_". НЕТ – переход в режим редактирования осуществляется двойным кликом мыши или нажатием клавиши Enter, значение в ячейке не затирается. | НЕТ |
| ЛОГИКА | ред_стрелки | Возможность перехода на следующую ячейку в режиме редактирования с помощью клавиш управления курсором. ДА: если клавиша управления курсором не обрабатывается элементом управления (например, достигнут конец многострочного списка или предельное значение диапазона) – происходит автоматический выход из режима редактирования и переход на следующую ячейку. Из последней ячейки в строке осуществляется переход на первую ячейку следующей строке, из последней ячейки в столбце – на первую ячейку следующего столбца. Если далее переходить некуда (для правой нижней ячейки) – курсор остается на месте и автоматического выхода из режима редактирования не происходит. НЕТ – клавиши управления курсором обрабатываются только элементом управления, выход из режима редактирования осуществляется нажатием Enter или кликом мыши на другой ячейке. | НЕТ |
| ЦЕЛОЕ | след_ячейка | Поведение таблицы по окончании редактирования значения ячейки (если завершение редактирования осуществляется нажатием Enter). Задается одной из констант РСЯ_... Значение поля управляет только ячейками, находящимися в режиме редактирования. Например, если редактирование ячейки запрещено – нажатие на Enter в такой ячейке не приведет к перемещению курсора на другую ячейку. В этом случае рекомендуется управлять перемещением курсора с помощью метода УСТ_КУРСОР. | РСЯ_НЕТ |
Поля форматы и форматы_столбцов управляют преобразованием значений в строку при отображении в ячейках таблицы. Для преобразования чисел, дат и времени используются строковые представления форматов, составленные по правилам модуля FORMAT.
| Тип | Поле | Описание | Значение по умолчанию |
|---|---|---|---|
| СТРОКА | форматы | Задает форматы преобразования для всей таблицы, переопределяя форматы, заданные глобально в программе. | |
| СТРОКА: @[] | форматы_столбцов | Задает форматы преобразования для столбцов, переопределяя значение, заданное в поле форматы. Индексом является номер столбца. |
Форматы вывода позволяют управлять представлением данных в упрощенном виде, более сложные правила преобразования могут быть заданы кодом обработчика события данные. Дополнительной возможностью, связанной с форматами, является выбор вида создаваемого по умолчанию поля ввода числа: целое или вещественное. Если в строке формата, применяемой к некой ячейке с числовыми данными, присутствует формат целого и отсутствует формат вещественного числа, то будет создано поле ввода целого.
Прочие поля:
| Тип | Поле | Описание | Значение по умолчанию |
|---|---|---|---|
| ЛОГИКА | изменение_столбцов | Возможность изменения пользователем с помощью мыши размеров столбцов. | ДА |
| ЛОГИКА | изменение_строк | Возможность изменения пользователем с помощью мыши размеров строк. | ДА |
| *: @[, ] | элементы | Может содержать значения любого типа в зависимости от номера столбца и строки. Для таблиц, которые используются преимущественно для вывода данных, индексное поле может содержать все необходимые данные. | |
| ОБЪЕДИНЕНИЕ: @[, ] | объединения | Содержит информацию об объединенных ячейках таблицы. Индексами служат числовые значения строк и столбцов. | |
| ЛОГИКА | авто_размер | Необходимость автоматического пересчета размера таблицы в соответствии с количеством и размерами столбцов и строк. | НЕТ |
| ЛОГИКА | стр_доб | Признак отображения в нижней части таблицы строки добавления с картинкой "+". При выборе строки добавления мышью или с помощью клавиши Enter в обработчик команда передается команда "+". | НЕТ |
| ЦЕЛОЕ | режим_выд | Вид курсора. Задается одной из констант СМТ_... | СМТ_ЯЧЕЙКА |
| ЛОГИКА | разр_настройка | Определяет доступность команды Правка/Настройка при нахождении фокуса ввода на таблице. Пункт "Настройка" также добавляется в контекстное меню таблицы. Команда "_SETUP_" приходит в обработчик события команда. | НЕТ |
| ЛОГИКА | обр_подсказки | Разрешает показ обрезанного текста ячейки во всплывающей подсказке. Текст может быть обрезан, если для ячейки задан недостаточный размер. Также подсказки показываются для частично видимых ячеек из-за прокрутки таблицы. Если задан обработчик события подсказка и он вернул ДА, то отображается текст назначенный обработчиком. | ДА |
Ситуация, когда индексное поле элементы содержит все необходимые данные, называется внутренним хранением данных таблицы (в индексном поле объекта). В другом случае можно использовать событие запроса данных таблицы. Для этой цели служит обработчик данные. При получении данных таблицы с помощью событий (внешний по отношению к таблице источник данных), индексное поле элементы содержит, как правило только текст заголовков столбцов. Допускается также гибридная форма хранения данных, когда часть данных хранится в индексном поле элементы, а часть получается через генерацию события данные. Внутренний источник имеет приоритет перед внешним, т.е. если индексное поле элементы содержит некоторое значение для запрашиваемых координат, то событие данные сгенерировано не будет.
Методы
| Метод | Описание |
|---|---|
| КУР_СТОЛБЕЦ | Возвращает номер столбца, на котором находится курсор. |
| КУР_СТРОКА | Возвращает номер строки, на которой находится курсор. |
| УСТ_КУРСОР | Устанавливает курсор таблицы на ячейку с заданной координатой. |
| ЯЧЕЙКА_МЕНЮ | Позволяет получить координаты ячейки, над которой было вызвано контекстное меню. |
| РЕД_ЯЧЕЙКУ | Позволяет программно активизировать редактирование ячейки. |
| РЕЖИМ_РЕД | Позволяет задать режим изменения размера редактора ячейки при вводе данных. |
| ОБНОВИТЬ_СТРОКУ | Позволяет обновить отдельную строку таблицы. |
| ОБНОВИТЬ_ЯЧЕЙКУ | Позволяет обновить отдельную ячейку таблицы. |
| ЭКСПОРТ | Передает данные таблицы во внешние приложения. |
| ЭКСПОРТ_В_EXCEL | Передает данные таблицы в Microsoft Excel. |
Обработчики событий
При редактировании ячеек таблицы тоже используются события. Первым событием редактирование у пользователя выясняется возможность и режим редактирования для выбранной ячейки. Генерации события предшествует выбор пользователем ячейки с помощью мыши или нажатие клавиши Enter. В случае отказа от редактирования средствами таблицы в обработчике может быть вызван модальный диалог, которые осуществляет редактирование данных. Событие редактирование запрашивает данные для редактирования, что позволяет разделять данные для отображения в ячейке и данные для редактирования в ячейке. Например, отображаться некая дата в ячейке может прописью – как строка, а редактироваться в стандартном редакторе даты – как дата. По окончании редактирования ячейки генерируется событие сохранение, в которое передается измененное пользователем значение для сохранения. Если обработчики событий редактирование и сохранение не назначены, то действует схема редактирования по умолчанию. Для ячеек, в которые вывод данных производится из индексного поля элементы, осуществляется редактирование в соответствии с типом значения ячейки. Для прочих ячеек редактирование не осуществляется. Рекомендуется использовать внешний источник данных и события редактирование и сохранение для таблиц, предназначенных для ввода данных. Фиксированные строки и столбцы редактированию не подвергаются, но нажатия мышью на фиксированные ячейки можно обрабатывать с помощью события нажатие. Подробнее см. Программирование редактируемых ячеек табличной формы и таблицы.
| Обработчик | Описание |
|---|---|
| клавиша | Вызывается при нажатии пользователем определенных клавиш на клавиатуре. |
| команда | Вызывается при нажатии пользователем функциональных клавиш, выборе пункта контекстного меню или нажатии на строке добавления таблицы. |
| меню | Вызывается при нажатии пользователем правой кнопки мыши или клавиши всплывающего меню на клавиатуре. |
| изменение | Вызывается при перемещении курсора таблицы. |
| нажатие | Вызывается при нажатии мышью на фиксированные ячейки таблицы. |
| данные | Вызывается таблицей при отсутствии данных ячейки во внутреннем источнике данных. |
| редактирование | Вызывается, когда пользователь выбирает ячейку или строку с помощью двойного клика правой кнопкой мыши или нажатия клавиши Enter. |
| сохранение | Вызывается при окончании редактирования ячейки средствами таблицы. |
| кнопка_редактора | Вызывается при нажатии на специальную кнопку редактора ячейки. |
| подсказка | Вызывается таблицей при запросе текста всплывающей подсказки для ячейки. |
| прием_файлов | Позволяет обработать перетаскивание файлов в окно таблицы. |