Содержание
Программированию нельзя научить, можно только научится
Главная » Уроки по ООП » Урок 42. Компоненты TDBGrid, TDBCtrlGrid
Компонент TDBGrid
TDBGrid — таблица, в которой строки представляют собой записи, а столбцы — поля набора данных. Свойство DataSource содержит ссылку на выбранный набор данных.
Столбцы DBGrid
Столбцы – поля подключенного набора данных. Этими значениями можно манипулировать, показывая или скрывая поля НД, меняя их местами или добавляя новые столбцы. Требуемый набор полей можно составить при помощи специального Редактора столбцов (рис. 1), который открывается при двойном щелчке на компоненте, перенесенном на форму.
В верхней части окна вы видите четыре кнопки, слева — направо:
- Add New (Добавить новый столбец).
- Delete Selected (Удалить выделенный столбец).
- Add All Fields (Добавить все столбцы из набора данных).
- Restore Defaults (Восстановить значения по умолчанию для выделенного столбца).
Рис. 1. Редактор колонок компонента TDBGrid
Для выбранного в списке столбца доступные для редактирования свойства появляются в Инспекторе объектов. Столбцы в списке можно редактировать, удалять, менять местами.
Изменить параметры заголовка столбца можно в раскрывающемся свойстве Title, которое имеет ряд собственных свойств:
Alignment — свойство устанавливает выравнивание заголовка и может быть taCenter (по центру), taLeftJustify (по левому краю) и taRightJustify (по правому краю).
Caption — свойство содержит текст, который отображается в заголовке столбца.
Color — цвет заголовка.
Font — шрифт заголовка.
Свойства Font, Alignment и Color внутри свойства Title меняют шрифт, выравнивание и цвет фона только заголовка столбца, а не его содержимого. Но у столбца имеются эти же свойства, они меняют шрифт, выравнивание и цвет фона выводимых в столбце данных.
Свойство Visible разрешает или запрещает отображение столбца, а свойство Width позволяет изменить его ширину.
Задание 1. Работа с редактором полей компонента DBGrid
1. Установите на форму компонент ADOTable, свяжите его с таблицей Pers базы Сотрудники (свойства ConnectionString – связать с базой Сотрудники, TableName=Pers, Active=True).
2. Установите DataSource, свяжите его с ADOTable1. .
3. На форму добавьте и компонент DBGrid, который свяжите с DataSource1..
4. Нам нужны не все поля таблицы, а только некоторые из них. Дважды щелкните по компоненту DBGrid1 и в открывшемся редакторе столбцов нажмите кнопку Add New. Появится один пустой столбец. Для того, чтобы он показал данные нужного поля, выделите его и в инспекторе объектов в свойстве FieldName выберите поле Fam. .
5. Найдите свойство Title, раскройте его нажатием на кнопку «+». Настройте подсвойство Alignment=taCenter, Caption=”Фамилия”, Font установите полужирным. Найдите свойство Width, установите его равным 150. .
6.Аналогично добавьте и настройте свойства полей Nam, Par, Sex, Dep.
.
Рисунок 2. Форма к заданию 1.
Пустые столбцы
Если добавить в редактор столбцов сетки DBGrid новый столбец, но в свойстве FieldName не выбирать поле БД, а оставить его пустым, мы получим пустой столбец. Для чего нужны пустые столбцы в сетке? В них можно выводить обработанные данные из других столбцов.
Задание 2. К примеру, пользователю неудобно просматривать три столбца "Фамилия", "Имя" и "Отчество" из таблицы Pers базы данных Сотрудники. Ему было бы удобней просмотреть один сборный столбец в формате "Фамилия И.О.". .
1. Это и все последующие задания выполнять в программе из задания 1..
2. Создайте новый столбец, но не назначайте ему поле из НД. Выделите этот столбец, и в его свойстве Title.Caption впишите "Фамилия И.О.", а в свойстве Width укажите ширину в 200 пикселей. .
3. Столбцы "Фамилия", "Имя" и "Отчество" нам уже не нужны, скройте их, установив их свойство Visible в False. А новый столбец перетащите мышью наверх, его индекс будет равен 0..
4. Для компонента DBGrid1 создайте обработчик события OnDrawColumnCell. Это событие наступает при прорисовке каждой ячейки столбца. В него внесите код:.
var s: String;
begin
if Column.Index = 0 then //если это пустой столбец
begin
if ADOTable1[‘Fam’]<>Null then s:=ADOTable1[‘Fam’] + ‘ ‘;
if ADOTable1[‘Nam’]<>Null then s:=s + Copy(ADOTable1[‘Nam’], 1, 1)+ ‘.’;
if ADOTable1[‘Par’] <>Null then s:=s + Copy(ADOTable1[‘Par’], 1, 1) + ‘.’;
DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top, s);
end;
end;
Здесь мы вначале проверяем — наш ли это столбец (равен ли индекс нулю)? Если наш, то в переменную s начинаем собирать нужный текст. При этом имеем в виду, что пользователь мог и не заполнить некоторые поля. Чтобы у нас не произошло ошибки, вначале убеждаемся, что поле не равно Null (то есть, текст есть). Если текст есть, добавляем его в переменную s. Причем если это имя или отчество, с помощью функции Copy() получаем только первую букву и добавляем к ней точку. Когда s сформирована, добавляем этот текст в наш столбец с помощью метода TextOut() свойства Canvas сетки. В метод передаются три параметра: координаты левой позиции, верхней позиции и сам текст. Эти координаты мы берем из параметра события OnDrawColumnCell — Rect, который имеет такие свойства, как Left и Top, показывающие, соответственно, левую и верхнюю позиции текущей ячейки.
В результате программа будет иметь вид:
Рисунок 3. Заполнение пустого столбца
Задание 3. Использовать пустой столбец для вывода информации по требованию пользователя. В DBGrid нам нужна кнопка, нажатие на которую привело бы к выводу сообщения об отделе, в котором работает сотрудник.
1. Откройте редактор столбцов и удалите столбец Dep.
2. Создайте новый пустой столбец. Перетаскивать его не нужно, пусть будет последним. Свойство Width (ширина) установите в 20 пикселей. Название столбца (Title.Caption) пусть будет пустым. В свойстве ButtonStyle выберите значение cbsEllipsis. Это приведет к тому, что при попытке редактировать этот столбец образуется кнопка с тремя точками:
Рисунок 4. Кнопка в пустом столбце
3. Создайте обработчик события OnEditButtonClick() компонента DBGrid. Это событие происходит всякий раз, когда пользователь нажимает на кнопку "…".
4. Теперь, когда пользователь нажмет на эту кнопку, ему будет выведено сообщение с текстом об отделе, в котором работает сотрудник.
Список выбора в столбце — PickList
DBGrid позволяет устроить список, аналогичный ComboBox в одном из своих столбцов без использования каких-либо других компонентов.
Задание 4. Создать для поля «Sex» список выбора значений (муж, жен).
1. Откройте редактор столбцов сетки и выделите столбец "Sex". Обратите внимание на свойство PickList в Инспекторе объектов. Это свойство имеет тип TStrings, то есть представляет собой набор строк. Щелкните дважды по PickList, чтобы открыть редактор, и впишите туда
муж
жен
именно так, каждое значение на своей строке.
2. Запустите программу и попробуйте редактировать этот столбец. При попытке редактирования в ячейке покажется похожий на ComboBox список, в котором можно будет выбрать одно из указанных значений:
Рисунок 5. Список выбора в сетке
Наличие такого списка не препятствует пользователю ввести какое-то иное значение. Этот список нужен не для контроля, а только для облегчения пользователю ввода данных. Если же вы не желаете, чтобы пользователь имел возможность вводить другие данные, контроль следует организовать иным способом.
В практике программирования список чаще формируется во время работы программы, а строки списка берутся, как правило, из другой связанной таблицы. Добавить в список новую строку очень просто: DBGrid1.Columns.Items[4].PickList.Add(‘абв’);
Список свойства PickList автоматически заполняется для поля синхронного просмотра (lookup-поле).
Выделение отдельных строк
Очень часто в практике приходится выделять какие-то строки, изменяя их фон или цвет шрифта. Например, в бухгалтерии обычно выделяют строки, в которых значение меньше нуля. Допустим, ваша программа показывает клиентов, а какой-то столбец содержит их баланс на счету вашей компании. Если этот баланс меньше 0, значит, клиент имеет задолженность перед вашей фирмой. Бухгалтеру будет очень удобно, если дебиторы (должники) будут выделяться в общем списке красным цветом.
Способ прорисовки данных в DBGrid зависит от значения его свойства DefaultDrawing. По умолчанию свойство равно True, то есть данные прорисовываются автоматически. Если свойство содержит False, то прорисовку придется кодировать самостоятельно в свойстве OnDrawColumnCell.
Если мы написали алгоритм прорисовки, но свойство DefaultDrawing содержит True, то вначале сетка заполнится данными автоматически, а затем будет выполнен наш алгоритм. Другими словами, прорисовка некоторых частей сетки будет выполнена дважды. Это не очень хорошо для быстродействия программы, однако нам придется поступать именно так: ведь мы не все строки и столбцы собираемся выводить другим способом, а только некоторые. Остальные будут заполнены данными по умолчанию.
Разберем этот метод подробней. Если найти его в справке Delphi, то увидим:
property OnDrawColumnCell: TDrawColumnCellEvent;
То есть, этот метод имеет тип TDrawColumnCellEvent. Описание типа такое:
type TDrawColumnCellEvent = procedure (Sender:TObject; const Rect:TRect;
DataCol:Integer; Column:TColumn; State:TGridDrawState) of object;
Разберемся с параметрами.
Rect — координаты прорисовки.
DataCol — порядковый номер текущего столбца (начиная с 0).
Column — данные текущего столбца.
State — состояние ячейки. Может быть:
- gdSelected — ячейка выделена
- gdFocused — фокус ввода в ячейке
- gdFixed — ячейка — заголовок столбца.
Задание 5. Изменение цвета шрифта записей сотрудников, относящихся к отделу Бухгалтерия, на красный.
Рисунок 6. Выделение строк
Заметим сразу, что наличие пустых столбцов создает дополнительные, но решаемые проблемы. Код события OnDrawColumnCell придется переделать, он будет таким:
var s: String;
begin Null then s:= ADOTable1[‘fam’] + ‘ ‘;
if ADOTable1[‘nam’] <> Null then s:= s + Copy(ADOTable1[‘nam’], 1, 1) + ‘.’;
if ADOTable1[‘par’] <> Null then s:= s + Copy(ADOTable1[‘par’], 1, 1)+ ‘.’;
DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top, s);
end
else
if Column.Index = 5 then //если это пустой столбец с кнопкой ". "
begin
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
Exit;
end
else TextOut(Rect.Left+2, Rect.Top+2, Column.Field.Text); //все остальные столбцы
end;
end;
Разберемся с кодом. Вначале с помощью with мы указываем, что будем работать непосредственно со свойством DBGrid1.Canvas, которое отвечает за стиль прорисовки ячейки. Далее мы смотрим поле «Dep» текущей записи равно ли Бухгалтерия. Если да, то указываем, что цвет шрифта должен быть красным, а затем функцией FillRect(Rect) мы стираем стандартный вывод.
Далее мы определяем, прорисовывается ли в данный момент пустой сборный столбец с "Фамилия И.О.". Если это он, то мы формируем переменную s с нужными данными и выводим их, как в прошлый раз.
Если же это пустой столбец с кнопкой "…", то мы делаем стандартный вывод и выходим из процедуры. Если мы этого не сделаем, то получим ошибку программы.
Все остальные столбцы мы выводим строкой
TextOut(Rect.Left+2, Rect.Top+2, Column.Field.Text);
Обратите внимание, что мы добавили по два пикселя к крайней левой и крайней верхней координате ячейки. Если этого не сделать, то новая прорисовка не будет целиком закрашивать старую (рис.7):
Рисунок 7. Некорректная прорисовка
Количество добавляемых 2пикселей зависит от формата данных и размера шрифта. Обычно это определяется путем проб. Например, ячейка может содержать цифры, которые обычно прижимаются к правому краю, и тут двумя пикселями не обойтись.
Сделать проверку на тип данных можно, например, так:
//если текст, сдвинем только на 2 пикселя
if Column.Field.DataType = ftString then TextOut(Rect.Left, Rect.Top+2, Column.Field.Text)
//если цифры, сдвинем их вправо на 28 пикселей
else TextOut(Rect.Left+28, Rect.Top+2, Column.Field.Text);
Выделение строки красным текстом может оказаться недостаточным для заказчика. Что, если он потребует, чтобы эти строки выделялись красной строкой с белым шрифтом? Тогда вместо
Font.Color:= clRed;
FillRect(Rect);
вам придется написать
//выводим все ячейки строки белым текстом по красному фону:
Brush.Color:= clRed;
Font.Color:= clWhite;
FillRect(Rect);
Как видите, подсвойство DBGrid1.Canvas.Brush.Color отвечает за цвет заливки ячейки, а DBGrid1.Canvas.Font.Color за цвет выводимого в ней шрифта.

Компонент TDBCtrlGrid
Компонент TDBCtrlGrid (стр.DataControls) внешне напоминает компонент TDBGrid, но никак не связан с классом TCustomDBGrid, а наследуется напрямую от класса TWinControl.
Этот компонент позволяет отображать данные в строках в произвольной форме. Компонент представляет собой набор панелей, каждая из которых служит платформой для размещения данных отдельной записи набора данных. На панели могут размещаться любые компоненты отображения данных, предназначенные для работы с отдельным полем. С каждым таким компонентом можно связать нужное поле набора данных. При открытии набора данных в компоненте TDBCtrlGrid на каждой новой панели создается набор компонентов отображения данных, аналогичный тому, который был создан на одной панели во время разработки.
На панель можно переносить только те компоненты отображения данных, которые показывают значение одного поля для единственной записи набора данных. Нельзя использовать компоненты TDBGrid, TDBCtrlGrid, TDBRichEdit, TDBListBox, TDBRadioGroup, TDBLookupListBox.
Компонент может отображать панели в одну или несколько колонок. Для задания числа колонок панелей используется свойство ColCount. Число видимых строк панелей определяется свойством RowCount. Вертикальное или горизонтальное размещение колонок панелей зависит от значения свойства Orientation.
Размеры одной панели определяются свойствами panelHeight и Panelwidth. Они взаимосвязаны с размерами самого компонента. При изменении значений свойств PanelHeight и Panelwidth размеры компонента изменяются таким образом, чтобы в нем помещалось указанное в свойствах colcount и RowCount число панелей и наоборот.
Не рекомендуется размещать на панели компоненты TDBMemo и TDBimage, т. к. это может привести к значительному снижению производительности.
Задание 6. Работа с компонентом DBCtrlGrid.
Установите на форму компонент DBCtrlGrid.
Укажите в его свойстве DataSource ссылку на компонент DataSource1.
Установите на DBCtrlGrid следующие компоненты (рис.8):
DBText1 (DataField=fam), DBText2 (DataField=Nam), DBText3 (DataField=Par),
DBEdit1 (DataField=Dep),
DBComboBox1 (DataField=Sex, в свойстве Items задайте две строки «муж» и «жен»),
для слов «Отдел» и «Пол» установите компоненты Label1 и Label2.
Запустите программу и посмотрите как выглядит компонент DBCtrlGrid (рис.9).
Рисунок 8. Форма в процессе разработки
Рисунок 9. DBCtrlGrid после запуска программы
Замечательные возможности DBGrid
- размер шрифта уменьшить размер шрифта
увеличить размер шрифта 
- Печать
Замечательные возможности DBGrid
Нередко при разработке приложений, использующих табличный вывод данных, требуется отобразить те или иные строки таблиц нестандартным образом, например, с целью привлечения внимания пользователя к этим строкам. В данной статье содержатся некоторые советы, касающиеся нестандартного отображения данных в компоненте TDBGrid.
Как изменить цвет строки в TDBGrid
Предположим, нам требуется изменить атрибуты текста и фона строки в компоненте TDBGrid, если значение какого-либо поля удовлетворяет заранее заданному условию. Для этой цели принято использовать обработчик события OnDrawColumnCell этого компонента. Отметим, что возможности, предоставляемые при его использовании, весьма разнообразны.
Рассмотрим простейшее приложение с TDBGrid, содержащее один компонент TTable, один компонент TDataSource и один компонент TDBGrid: Установим значения их свойств в соответствии с приведенной ниже таблицей:
Компонент
Свойство
Значение
BCDEMOS ( или DBDEMOS)
Обычно для перерисовки изображения в ячейках используется метод OnDrawColumnCell .
Его параметр Rect – структура, описывающая занимаемый ячейкой прямоугольник; параметр Column — колонка DBGrid, в которой следует изменить способ рисования изображения. Для вывода текста используется метод TextOut свойства Canvas компонента TDBGrid.
Предположим, нам нужно изменить цвет текста и фона строки в зависимости от значения какого-либо поля (например, VenueNo). Создадим обработчик события OnDrawColumnCell компонента DBGrid1.
В случае Delphi соответствующий код имеет вид:
В результате на этапе выполнения при отображении строк, в которых значение поля VenueNo равно 1, фон ячеек будет окрашен в зеленый цвет, а текст выведен белым цветом.
При выводе выделенных строк все данные в ячейках оказались выровненными по левому краю. Если мы хотим более корректно отобразить выравнивание текста в колонке, следует слегка модифицировать наш код, учитывая значение свойства Alignment текущей (то есть рисуемой в данный момент) колонки:
Соответствующий код для Delphi имеет вид:
В этом случае выравнивание текста в колонках совпадает с выравниванием столбцов.
Отметим, что величина смещения (в данном случае два пиксела), вообще говоря, зависит от гарнитуры и размера шрифта, используемого в данной колонке, и должна подбираться индивидуально.
Если необходимо отобразить нестандартным образом не всю строку, а только некоторые ячейки, следует проанализировать имя поля, отображаемого в данной колонке, как в приведенном ниже обработчике событий.
Соответствующий код для Delphi имеет вид:
В результате выделенными оказываются только ячейки, для которых выполняются выбранные нами условия:
Как заменить данные в столбце компонента TDBGrid
Нередко в колонке DBGrid нужно вывести не реальное значение, хранящееся в поле соответствующей таблицы, а другие данные, соответствующие имеющимся (например, символьную строку вместо ее числового кода). В этом случае также используется метод TextOut свойства Canvas компонента TDBGrid:
Соответствующий код для Delphi имеет вид:
Еще один пример – использование значков из шрифтов Windings или Webdings в качестве подставляемой строки.
Соответствующий код для Delphi имеет вид:
Как поместить графическое изображение в TDBGrid
Использование свойства Canvas компонента TDBGrid в методе OnDrawColumnCell позволяет не только выводить в ячейке текст методом TextOut, но и размещать в ячейках графические изображения. В этом случае используется метод Draw свойства Canvas.
Модифицируем наш пример, добавив в форму компонент TImageList и поместив в него несколько изображений.
Модифицируем код нашего приложения:
Соответствующий код для Delphi имеет вид:
Теперь в TDBGrid в колонке VenueNo находятся графические изображения.
Глава 15. Компоненты отображения данных

Этот компонент инкапсулирует двумерную таблицу, в которой строки представляют собой записи, а столбцы — поля набора данных.
Компонент TDBGrid является потомком классов TDBCustomGrid И TCustomGrid.
От класса TCustomGrid наследуются все функции отображения и управления работой двумерной структуры данных. Класс TDBCustomGrid обеспечивает визуализацию и редактирование полей из набора данных, причем TDBGrid только публикует свойства и методы класса TDBCustomGrid, не добавляя собственных.
В компоненте TDBGrid можно отображать произвольное подмножество полей используемого набора данных, но число записей ограничить нельзя — в компоненте всегда присутствуют все записи связанного набора данных. Требуемый набор полей можно составить при помощи специального Редактора столбцов, который открывается при двойном щелчке на компоненте, перенесенном на форму, или кнопкой свойства columns в Инспекторе объектов.
Новая колонка добавляется при помощи кнопки Add New , после этого ее название появляется в списке колонок (рис. 15.2). Для выбранной в списке колонки доступные для редактирования свойства появляются в Инспекторе объектов. Колонки в списке можно редактировать, удалять, менять местами.
При помощи кнопки Add All Fields в сетку можно добавить все поля набора данных.
Каждая колонка компонента TDBGrid описывается специальным классом TColumn, а совокупность колонок доступна через свойство columns компонента, оно имеет тип TDBGridColumns и представляет собой индексированный список объектов колонок. Поле набора данных связывается с конкретной колонкой при помощи свойства FieldName класса TColumn. При этом в колонку автоматически переносятся все необходимые параметры поля, в частности заголовок поля, настройки шрифтов, ширина поля. После ручного изменения параметров первоначальные значения восстанавливаются методами соответствующих объектов Icolumn.

Рис. 15.2. Редактор колонок компонента TDBGrid
При метода метода DefaultDrawColumnCell и метода- обработчика OnDraw-CoiumnCell можно управлять процессом отображения данных в ячейках.
Метод DefauitorawDataCelll предназначен только для обеспечения обратной совместимости по коду с более ранними версиями.
Настройка параметров компонента TDBGrid, от которых зависит его внешний вид и некоторые функции, осуществляется при помощи свойства options (табл. 15.2). Текущая позиция в двумерной структуре данных может быть определена свойствами SelectedField, SelectedRows, Selectedlndex.
При необходимости разработчик может использовать разнообразные методы-обработчики событий. Среди них есть как стандартные методы, присущие всем элементам управления, так и специфические.
Например, при помощи метода-обработчика OnEditButtonClick можно предусмотреть вызов специализированной формы при щелчке на кнопке в ячейке:
procedure TForml.DBGridlEditButtonClick(Sender: TObject);
Объект колонки TColumn имеет свойство ButtonStyle. Если ему присвоить значение cbsEllipsis, то при активизации ячейки этой колонки в правой части ячейки появляется кнопка.
Таблица 15.2. Свойства и методы компонента WBGrid
property Columns: TDBGridColumns;
Содержит коллекцию объектов TColumn, описывающих колонки компонента
property DefaultDrawing: Boolean;
Определяет способ визуализации данных в сетке. При значении True данные отображаются автоматически. При значении False используется метод-обработчик OnDrawColumnCell
property FieldCount: Integer;
Возвращает число видимых колонок сетки
property Fields [Index: Integer] : TField;
Массив объектов полей набора данных, отображаемых в компоненте
TDBGr >
Определяет особенности визуализации и поведения компонента:
- dgEditing — данные можно редактировать;
- dgAlwaysShowEditor — данные в сетке всегда в режиме редактирования;
- dgTitles — видны заголовки колонок;
- dglndicator — в начале строки виден номер текущей колонки;
- dgColumnResize — колонки можно перемещать и менять их ширину;
- dgColLines — видны линии между колонками;
- dgRowLines — видны линии между строками;
- dgTabs — для перемещения по строкам можно использовать клавиши и + Методы
procedure DefaultDrawColumnCell (const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState) ;
Перерисовывает текст в ячейке колонки с номером DataCol. Ячейка задается прямоугольником Rect на канве сетки. Параметр state определяет состояние ячейки после перерисовки. Параметр Column содержит экземпляр класса колонки, которой принадлежит ячейка
procedure DefaultDrawDataCell (const Rect: TRect; Field: TField; State: TGridDrawState);
Перерисовывает текст в ячейке колонки, определяемой параметром Field, содержащим связанный с колонкой объект поля. Ячейка задается прямоугольником Rect на канве сетки. Параметр State определяет состояние ячейки после перерисовки
procedure Def aultHandler (var Msg); override;
Вызывает всплывающее меню для колонки, которой соответствуют текущие координаты мыши. Компонент должен обрабатывать сообщение WM RBUTTONUP
function ExecuteAction (Action: TBasicAction): Boolean; override;
Выполняет действие, заданное параметром Action, по отношению к данному компоненту
procedure ShowPopupEditor (Column: I TColumn; X: Integer = Low (Integer); Y: Integer = Low (Integer) ); dynamic;
Открывает набор данных, связанный с передаваемой параметром Column колонкой в новом окне. Работает только для типов данных абстрактный и набор данных. Параметры X и Y определяют положение нового окна
function | ValidFieldlndex (Fieldlndex: Integer) : Boolean;
Возвращает значение True, если колонка с номером Fieldlndex связана с полем набора данных
function MouseCoord(X, Y: Integer): TGridCoord; ;
Возвращает номера строки и столбца, соответствующие ячейке, которой принадлежат экранные координаты X и Y
property OnCellClick: TDBGridClickEvent;
Вызывается при щелчке мышью на ячейке. Параметр Column содержит колонку, которой принадлежит ячейка
property OnColEnter: TNotifyEvent;
Вызывается при переносе фокуса на новую колонку сетки
property OnColExit: TNotifyEvent;
Вызывается перед переносом фокуса из текущей колонки
type TMovedEvent = procedure (Sender: TObject; Froinlndex, Tolndex: Longint) of object;
Вызывается при переносе колонки в сетке на новое место при помощи мыши. Параметр Fromindex возвращает номер старого положения колонки. Параметр Tolndex возвращает номер нового положения колонки
TDrawColumnCellEvent = procedure (Sender: TObject; const Rect : TRect; DataCol : State: TGridDrawState) of object;
property OnDrawColurnnCell : TDrawColumnCellEvent;
Вызывается при перерисовке ячейки.
Параметр Rect определяет ячейку по координатам прямоугольника на канве.
Параметр DataCol возвращает номер колонки в сетке.
Параметр Column содержит объект колонки.
Параметр State возвращает состояние колонки
TDrawDataCellEvent = procedure (Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState) of object;
property OnDrawDataCell: TDrawDataCellEvent;
I Вызывается при перерисовке ячейки | перед обработчиком OnDrawCoiumnCell, если свойство Columns. State =csDefault.
Этот метод лучше не применять, т. к. он используется только для обеспечения обратной совместимости с ранними версиями
property OnEditButtonClick: TNotifyEvent;
1 Вызывается при щелчке мышью на кнопке в ячейке
property OnTitleClick: TDBGridClickEvent;
| Вызывается при щелчке мышью на заголовке колонки. Колонка определяется параметром Column
В работе компонента TDBGrid важную роль играет класс TColumn, который инкапсулирует свойства колонки или столбца сетки (табл. 15.3). Его основным назначением является правильное отображение данных из поля набора данных, связанного с этой колонкой. Поэтому объект колонки обладает свойствами и методами, которые позволяют произвольным образом задавать параметры отображения данных (цвет, шрифт, ширину и т. д.). Первоначальные значения берутся из связанных с колонками полей. Измененные свойства можно восстановить при помощи группы специальных методов (DefauitColor, DefaultFont И др.).
Свойство Assignedvalues позволяет в любой момент определить, какие первоначальные настройки были изменены.
За отображение заголовка колонки отвечает свойство Title, представляющее собой ссылку на экземпляр объекта TColumnTitie. Здесь можно задать текст заголовка, параметры шрифта текста заголовка и цвет фона заголовка. По умолчанию текст заголовка берется из свойства DispiayLabel объекта TField (CM. гл. 13).
Каждой колонке можно придать список, который разворачивается при щелчке на кнопке в активной ячейке колонки. Выбранное в списке значение автоматически заносится в ячейку. Для реализации этой возможности применяется свойство pickList типа TStrings. Достаточно лишь заполнить список значениями во время разработки или выполнения (рис. 15.3).

Рис. 15.3. Список колонки в компоненте TDBGrid
Таблица 15.3. Свойства и методы класса TColumn




увеличить размер шрифта 




