Главная » Уроки по ООП » Урок 12. Работа с таблицами |
ЛЕКЦИЯ |
Урок 12. Работа с таблицами
Класс TDrawGrid
Компонент DrawGrid предназначен для создания таблицы, в ячейках которой расположены данные. Компонент обеспечивает двумерное представление данных, упорядоченных по строкам и столбцам.
Таблица делится на две части — фиксированную и рабочую. Фиксированная часть служит для показа заголовков столбцов/строк и для ручного управления их размерами. Обычно фиксированная часть занимает крайний левый столбец и самый верхний ряд таблицы. Она может содержать произвольное количество столбцов и рядов, причем эти величины можно изменять как в процессе разработки, так и программно. Рабочая часть состоит из ячеек, в которых находятся данные. Если рабочая часть не помещается целиком в пределах окна компонента, то у компонента автоматически появляются полосы прокрутки. При прокрутке рабочей области фиксированная часть не исчезает, но меняется ее содержимое — заголовки строк и рядов.
Заносить данные в ячейки таблицы можно только в ходе работы программы.
Свойства компонента DrawGrid
У компонента есть множество свойств, некоторые из них доступны уже в процессе разработки программы, остальные — только в ходе ее выполнения.
Рассмотрим основные свойства, доступные во время разработки.
ColCount |
количество столбцов таблицы, включая столбцы фиксированной части; |
RowCount |
количество строк таблицы. |
FixedCols |
определяет количество столбцов фиксированной зоны; |
FixedRows |
определяет количество строк фиксированной зоны; |
DefaultRowHeight |
содержит значение высоты строки по умолчанию; |
DefaultColWidth |
определяет ширину столбца по умолчанию; |
FixedColor |
устанавливает цвет фиксированной зоны; |
DefaultDrawing |
при значении, равном True, происходит автоматическая прорисовка служебных элементов таблицы (фиксированной зоны, фона и прямоугольника сфокусированной ячейки и т. д.). Если свойство установлено в False, то прорисовки этих элементов необходимо определять в обработчике события OnDrawCell; |
Дополнительно к перечисленным в таблице свойствам необходимо обратить особое внимание на свойство Options, определяющее некоторые особенности поведения компонента DrawGrid. Свойство Options определяется следующим образом:
Свойство Options является множеством, определяющим многие свойства таблицы:
наличие разделительных вертикальных и горизонтальных линий в фиксированных (goFixedVertLine и goFixedHorzLine) и не фиксированных (goVertLine и goHorzLine) ячейках, возможность для пользователя изменять с помощью мыши размеры столбцов и строк (goColSizing и goRowSizing), перемещать столбцы и строки (goColMoving и goRowMoving) и многое другое.
Если таблицу необходимо редактировать, то в свойстве Options необходимо подсвойство goEditing установить равным True.
Задание 1:
Установите на форму компонент DrawGrid (на странице Additional).
Запустите программу и попробуйте ввести в таблицу какие-либо данные.
Получилось?
Нет. А теперь установите в свойстве Options подсвойство goEditing=true.
Теперь запустите программу и попробуйте ввести какие-либо данные в ячейки таблицы.
Свойство Col и Row определяет номер столбца и строки выделенной ячейки.
Нумерация и строк и столбцов начинается с нуля, включая строки и столбцы фиксированной зоны.
Номер самого левого столбца, видимого в прокручиваемой зоне ячеек, содержится в LeftCol, а номер самого верхнего ряда — в свойстве TopRow.
Свойство Selection позволяет определить координаты текущего выделения. Описывается свойство следующим образом:
type
TGridCoord = record X: Longint; Y: Longint; end;
TGridRect = record case Integer of
0: (Left, Top, Right, Bottom: Longint); 1: (TopLeft, BottomRight: TGridCoord); end; property Selection: TGridRect;
Свойство Selection определяет группу выделенных ячеек в координатах левая верхняя и правая нижняя ячейки. После выделения сфокусированной окажется правая нижняя ячейка.
Методы компонента DrawGrid
Экранные координаты прямоугольника ячейки можно получить по номерам столбца ACol и ряда ARow с помощью метода CellRect:
function CellRect(ACol, ARow: Longint): TRect;
где тип TRect — это
type
TRect = record
case Integer of
0: (Left, Top, Right, Bottom: Integer);
1: (TopLeft, BottomRight: TPoint) ;
end;
TPoint = record
X: Longint;
Y: Longint;
end;
Получить номер столбца ACol и номер строки ARow по экранным координатам (X.Y) точки можно с помощью метода MouseToCell(X, Y: Integer; var ACol, ARow: Longint);
Задание 2: вывести в заголовок формы номера строки и столца выделенной ячейки.
Решение: установите на форму компонент DrawGrid1 и создайте для него обработчик события OnMouseDown. В него внесите следующие операторы:
События компонента DrawGrid
OnColumnMoved |
возникает при перемещении столбца. |
OnRowMoved |
возникает при перемещении строки (параметры аналогичные OnColumnMoved). |
OnTopLeftChanged |
происходит при изменении значения TopRow или LeftCol в результате прокрутки рабочей зоны |
OnSelectCell |
возникает при попытке выделить ячейку с табличными координатами (ACol, ARow). В обработчик этого события передаются целые параметры ACol и ARow — столбец и строка выделенной ячейки, и булевый параметр CanSelect — допустимость выбора. Параметр CanSelect можно использовать для запрета выделения ячейки, задав его значение false. А параметры ACol и ARow могут использоваться для какой-то реакции программы на выделение пользователя. Например, оператор Label1.Caption:='Выбрана ячейка ' +IntToStr(ARow)+':'+IntToStr(ACol); выдаст в метку Label1 номер выбранной ячейки. |
OnSetEditText |
возникает по завершении редактирования ячейки с координатами (ACol, ARow). В параметре Value обработчик получает результат ввода или редактирования текста. |
OnGetMaskEdit и OnGetEditText |
возникают при редактировании текста в ячейке с табличными координатами (ACol, ARow). В параметре Value первого события обработчик должен вернуть шаблон для редактора TEditMask. Параметр Value для события OnGetEditText должен содержать текстовую информацию для редактора TEditMask. Описание событий выглядит следующим образом: |
OnDrawCell |
Событие происходит в случае необходимости перерисовки ячейки с номером столбца ACol и номером строки ARow. |
Задание 3. Создайте приложение, которое позволяет просматривать символы системных шрифтов.
Ход работы:
1. Установите на форму компоненты Panel1 (Align=alTop) и DrawGrid1 (Align=alClient). На панель установите компонент ComboBox1.
2. Настройте у компонента DrawGrid1 следующие свойства: RowCount=7, ColCount=32, FixedCols=0, FixedRows=0, DafaultColWidth=20, DefaultRowHeight=20.
3. Измените размеры формы так, чтобы сетка не имела полос прокрутки, а вокруг ячеек не было пустого пространства.
4. В результате получится форма, показанная на рисунке ниже.
4. Для того чтобы содержимое каждой ячейки перерисовывалось, создайте обработчик события OnDrawCell для компонента DrawGrid1. Для изображения символов шрифта воспользуемся свойством Canvas компонента DrawGrid1. Непосредственно нам понадобится метод TextRect свойства Canvas. Этот метод используется для вывода текстовой информации в определенной ячейке. Обработчик события будет выглядеть так:<
{параметры ячейки для вывода символов шрифта берутся из параметров обработчика события, а символ шрифта для отображения в ячейке определяется в зависимости от строки и столбца}
5. Сохраните проект. Убедитесь, что в ячейках таблицы отображаются символы системного шрифта, установленного по умолчанию.
6. Для выбора шрифта воспользуемся компонентом ComboBox1. Для того чтобы данный компонент содержал все экранные шрифты, надо при создании формы занести их в список. Названия всех экранных шрифтов можно узнать с помощью глобальной переменной Screen типа TScreen. Данная переменная автоматически добавляется во все приложения Delphi. Переменная Screen содержит информацию о текущем состоянии экрана приложения: названия форм и модулей данных, которые используются приложением; данные об активной форме и компонентах, используемых этой формой; размер и разрешение используемого экрана; информацию о доступных приложению курсорах и шрифтах. Информация о доступных приложению шрифтах содержится в свойстве Font, принадлежащем переменной Screen.
7. Создайте для формы обработчик события onCreate и внесите в него операторы:
8. Сохраните и запустите проект. Компонент DrawGrid1 содержит символы шрифта, установленного в ComboBox1. Сколько шрифтов установлено на компьютере? Что происходит при выборе другого шрифта?
9. Для того чтобы связать значение имени шрифта у DrawGrid1 и ComboBox1, создадим еще один обработчик события:
10. Сохраните и запустите проект. Что происходит при изменении шрифта?
Класс TStringGrid
Компонент StringGrid (на странице Additional) предназначен для создания таблиц, в ячейках которых располагаются произвольные текстовые строки.
Класс TStringGrid является прямым потомком класса TDrawGrid, от которого им унаследовано большинство свойств и методов. У данного класса появляется лишь несколько новых свойств.
Cells[ACol, ARow: Integer]: string |
Строка, содержащаяся в ячейке с индексами столбца и строки ACol и ARow. |
Cols[Index: Integer]: TStrings |
Список строк, содержащихся в столбце с индексом Index. |
Rows[Index: Integer]: TStrings |
Список столбцов, содержащихся в строке с индексом Index. |
Все эти свойства доступны во время выполнения. Задавать тексты можно программно или по отдельным ячейкам, или сразу по столбцам и строкам с помощью методов класса TStrings.
Вывод текста в ячейку
StringGrid1.Cells [1, 0]:=’Проверка’; (первая строка, второй столбец)
Задание 4. Рассмотреть свойства компонента StringGrid и создать следующую таблицу. По щелчку на любую ячейку номер ее строки и столбца, а также содержимое ячейки должно отображаться в заголовке формы.
Задание 5. Доработать программу с таблицей следующим образом: по щелчку на любую ячейку номер ее строки и столбца должны отображаться в Label1, а содержимое ячейки должно отображаться в Label2.
Составитель: Салий Н.А.