Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК ПП1 (C++ БД).doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
5 Мб
Скачать
☆

4.2. Работа с двумерными массивами

Двумерные массивы или матрицы очень широко используются в практических задачах, поэтому для их отображения на интерфейсе Windows-программ Builder предлагает несколько плоских таблиц, формируемых такими компонентами, как TStringGrid или TDBGrid. Первый компонент в основном используется для отображения самостоятельных таблиц, не связанных друг с другом; второй компонент предназначен для связанных таблиц, входящих в базу данных. Этот компонент будет рассмотрен позднее в разделе 4, здесь же мы остановимся на компоненте TStringGrid (сетка строк).

Он представляет собой регулярную запоминающую структуру, состоящую из столбцов и строк, на пересечении которых расположена клетка (свойство Cells), содержащая информацию. По своей внутренней конструкции клетка компонента TStringGrid является строкой типа AnsiString, так что она содержит информацию, представленную строкой символов. Следовательно, изобразительные возможности этого компонента достаточно разнообразны, так как программист может поместить туда любой скалярный тип, будь то целое число, десятичное число, данное типа TDateTime или любую другую последовательность символов. Надо заметить, что компонент TDBGrid, рассматриваемый ниже, обладает ёще более выразительными возможностями, поскольку его элементом может быть рисунок или объект в широком смысле этого понятия.

Доступ к элементу TStringGrid осуществляется путём указания его индексов, например, обращение:

StringGrid1->Cells[5][3]

указывает на клетку сетки, расположенной на пересечении пятого столбца и третьей строки. Обратите внимание, что в отличие от привычного алгебраического указания индексов здесь первым индексом является столбец, а вторым – строка. Нумерация индексов начинается с нуля. Изучению этого компонента посвящена лабораторная работа 8. Типичный вид компонента представлен на рис. 51.

Рис. 51. Изображение двумерного массива с помощью компонента TStringGrid

Как видно из рисунка, элементами сетки TStringGrid могут быть как строки (Фамилии), так и числа (Оценки). Программист сам должен заботиться о правильной обработке отдельных ячеек.

Свойства ColCount и RowCount определяют соответственно число столбцов и строк, свойства FixedCols и FixedRows – число фиксированных, не прокручиваемых столбцов и строк. Цвет фона фиксированных ячеек определяется свойством FixedColor. Свойства LeftCol и TopRow определяют соответственно индексы первого видимого на экране в данный момент прокручиваемого столбца и первой видимой прокручиваемой строки. Свойство ScrollBars определяет наличие в таблице полос прокрутки. Причем

полосы прокрутки появляются и исчезают автоматически в зависимости от того, помещается таблица в соответствующий размер или нет. Свойство Options является множеством, определяющим многие свойства таблицы: наличие разделительных вертикальных и горизонтальных линий в фиксированных (goFixedVertLine и goFixedHorzLine) и нефиксированных (goVertLine и goHorzLine) ячейках, возможность для пользователя изменять с помощью мыши размеры столбцов и строк (goColSizing и goRowSizing), перемещать столбцы и строки (goColMoving и goRowMoving) и многое другое. Важным элементом в свойстве Options является goEditing – возможность редактировать содержимое таблицы.

В основном компонент StringGrid используется для выбора пользователем каких-то значений, отображенных в ячейках. Свойства Col и Row показывают индексы столбца и строки выделенной ячейки. Возможно также выделение пользователем множества ячеек, строк и столбцов.

Среди множества событий компонента StringGrid следует отметить событие OnSelectCell, возникающее в момент выбора пользователем ячейки. В обработчике этого события передаются целые параметры ACol и ARow – столбец и строка выделенной ячейки, и булевский параметр CanSelect – допустимость выбора. Параметр CanSelect можно использовать для запрета выделения ячейки, задав его значение false. А параметры ACol и ARow могут использоваться для какой-то реакции программы на выделение пользователя. Например, оператор

Labell->Caption = "Выбрана ячейка " + IntToStr(ARow) + ':' +

IntToStr(ACol) + ". Текст: " +StringGridl->Cells[ACol][ARow];

выведет в метку Labell сообщение о строке, столбце и тексте выбранной ячейки.