Главная » Уроки по ООП » Урок 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

возникает при перемещении столб­ца.
procedure TForm1.DrawGrid1ColumnMoved(Sender: TObject; FromIndex, ToIndex: Integer);
Параметр FromIndex содержит «старый» индекс столбца, а ToIndex — «новый» индекс перемещаемого столбца.

OnRowMoved

возникает при перемещении строки (параметры аналогичные OnColumnMoved).

OnTopLeftChanged

происходит при изменении зна­чения TopRow или LeftCol в результате прокрутки рабочей зоны

OnSelectCell

возникает при попытке выделить ячей­ку с табличными координатами (ACol, ARow).
Событие описывается следующим об­разом:
procedure TForm1.DrawGrid1SelectCell(Sender : TObject; ACol, ARow: Integer; var CanSelect: Boolean);

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

Label1.Caption:='Выбрана ячейка ' +IntToStr(ARow)+':'+IntToStr(ACol);

выдаст в метку Label1 номер выбранной ячейки.  

OnSetEditText

возникает по завершении редакти­рования ячейки с координатами (ACol, ARow). В параметре Va­lue обработчик получает результат ввода или редактирования текста.
Описывается событие так:
procedure TForm1.DrawGrid1SetEditText (Sender:  TObject; ACol,  ARow:  Integer;  const Value:  String);

OnGetMaskEdit и OnGetEditText

возникают при ре­дактировании текста в ячейке с табличными координатами (ACol, ARow). В параметре Value первого события обработчик должен вернуть шаблон для редактора TEditMask. Параметр Value для события OnGetEditText должен содержать текстовую информацию для редактора TEditMask. Описание событий вы­глядит следующим образом:
procedure TForm1.DrawGrid1GetEditMask(Sender: TObject; ACol, ARow:  Integer; var Value: String);
procedure TForm1.DrawGrid1GetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String);

OnDrawCell

Событие происходит в случае необходимости перерисовки ячей­ки с номером столбца ACol и номером строки ARow.
Обработчик данного события полностью берет на себя ответственность за размещение в каж­дой ячейке нужных данных. Описывается следующим образом:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
Параметр Rect определяет прямоугольник прорисовки.
Параметр State — состояние ячейки
gdSelected — ячейка выделена,
gdFocused — ячейка сфо­кусирована,
gdFixed — ячейка принадлежит фиксированной зоне таблицы.
Для прорисовки используется свойство Canvas.

Задание 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.

 

Составитель: Салий Н.А.

Яндекс.Метрика
Сайт создан в системе uCoz