В простом и комбинированном списках перечень возможных значений поля формируется программистом и в общем случае не зависит от значений записей наборов данных. Иногда это может оказаться неудобным и привести к ошибкам ввода или выбора. В Delphi имеются компоненты DBLookupListBox и DBLookupComboBox, которые также предназначены для выбора значения в списке или непосредственного ввода значения в поле редактирования (только для DBLookupComboBox). Во многом эти компоненты похожи на простой список DBListBox и комбинированный список DBComboBox соответственно и отличаются от них только способом формирования списка возможных значений.
Принципы работы с компонентами DBLookupComboBox и DBLookupListBox практически такие же, как с полем выбора, которое было рассмотрено в главе 5. Основное отличие заключается в том, что поле выбора создается с помощью Редактора полей, и его основные свойства задаются в специальном окне, а в случае указанных компонентов для списка используется один из них (DBLookupComboBox или DBLookupListBox), а свойства устанавливаются, как правило, через Инспектор объектов.
Компонент DBLookupComboBox (или DBLookupListBox) связывается с полем "своего" набора данных через свойства DataSource и DataField, а список формируется с помощью свойств ListSource (типа TDateSource) и DataField (типа string), указывающих на второй набор данных и его поле, используемое для заполнения списка.
В свойстве KeyField типа string указывается поле второго набора данных, значение которого заносится в поле, связанное с компонентом списка.
Представление записей в табличном виде
Для вывода записей набора данных в табличном виде удобно использовать сетку, представленную в Delphi компонентом DBGrid. Внешний вид сетки соответствует внутренней структуре таблицы БД и набора данных, при этом строке сетки соответствует запись, а столбцу — поле.
|
С помощью сетки пользователь управляет набором данных, поля которого в ней отображаются. Для навигации по записям и их просмотра используются полосы прокрутки и клавиши перемещения курсора. Для перехода в режим редактирования поля достаточно установить на него курсор и нажать любую алфавитно-цифровую клавишу. Переход в режим вставки новой записи выполняется нажатием клавиши <Insert>, после чего можно заполнять поля. Вставка записи происходит в том месте, где находится указатель текущей записи. Изменения, сделанные при редактировании или добавлении записи, подтверждаются нажатием клавиши <Enter>, или переходом к другой записи, или отменяются нажатием
140
Часть II. Технологии доступа к данным
клавиши <Esc>. Для удаления записи следует нажать комбинацию клавиш <Ctrl>+<Delete>.
Характеристики сетки
Несмотря на то что по своему виду сетка DBGrid похожа на сетку stringGrid, между ними есть значительные различия. Так, у сетки stringGrid можно устанавливать через соответствующие свойства число ее строк и столбцов. У сетки DBGrid числом строк управлять нельзя, т. к. она отображает все записи, имеющиеся в наборе данных.
Основным свойством сетки является свойство Columns типа TDBGridColumns, которое представляет собой массив (коллекцию) объектов Column типа TColumn, описывающих отдельные столбцы сетки.
Свойство Selectedindex типа integer задает номер текущего столбца в массиве Columns, а свойство SelectedField указывает на объект типа TField, которому соответствует текущий столбец сетки.
|
Свойство FieldCount типа integer, доступное во время выполнения программы, содержит число видимых столбцов сетки, а свойство Fields [index: integer] типа TField позволяет получить доступ к отдельным столбцам. Индекс определяет номер столбца в массиве столбцов и принимает значения в интервале 0..FieldCount - 1.
Свойства Color и FixedColor типа TColor задают цвета сетки и ее фиксированных элементов соответственно. По умолчанию свойство Color имеет значение ciwindow (цвет фона Windows), а свойство FixedColor — значение clBtnFace (цвет кнопки).
Свойство TitleFont типа TFont определяет шрифт, используемый для вывода заголовков столбцов.
Доступ к параметрам сетки (например, для настройки) возможен через свойство Options типа TGridOptions. Это свойство представляет собой множество и принимает комбинации следующих значений:
□ dgEditing (пользователю разрешается редактирование данных в ячейках);
□ dgAlwaysShowEditor (сетка не блокирует режим редактирования);
□ dgTitles (отображаются заголовки столбцов);
□ dgindicator (для текущей записи в начале строки выводится указатель);
□ dgColumnResize (пользователь может с помощью мыши изменять размер столбцов и перемещать их);
□ dgColLins (между столбцами выводятся разделительные вертикальные линии);
□ dgRowLines (между строками выводятся разделительные горизонтальные линии);
□ dgTabs (для перемещения по сетке можно использовать клавиши <ТаЬ> и <Shift>+<Tab>);
Глава 6. Визуальные компоненты для работы с данными
141
П dgRowSelect (пользователь может выделить целую строку); при установке этого значения игнорируются значения dgEditing и dgAlwaysShowEditor;
□ dgAlwaysShowSelection (ячейка остается выделенной, даже если сетка теряет фокус);
|
□ dgConfirmDelete (при удалении строки выдается запрос на подтверждение операции);
□ dgCancelOnExit (добавленные к сетке пустые строки (записи) при потере сеткой фокуса не сохраняются в наборе данных);
□ dgMultiSelect (в сетке можно одновременно выделить несколько строк).
По умолчанию свойство Options содержит комбинацию значений [dgEditing, dgTitles, dglndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit].
При щелчке на ячейке с данными генерируется событие OnCellclick, а щелчок на заголовке столбца вызывает событие OnTitleClick. Оба события имеют тип
TDBGridClickEvent, описываемый так:
type TDBGridClickEvent = procedure (Column: TColumn) of object;
Параметр Column представляет собой столбец, на котором был произведен щелчок.
При перемещении фокуса межцу столбцами сетки инициируются события OnColEnter и OnColExit типа TNotifyEvent, первое из которых возникает при получении столбцом фокуса, а второе — при его потере.
Если свойство Options содержит значение dgColumnResize, то пользователь может с помощью мыши перемещать столбцы сетки. При таком перемещении
генерируется событие OnColumnMoved типа TMovedEvent, описываемого как:
type TMovedEvent = procedure (Sender: TObject; Fromlndex, Tolndex: Longint) of object;
Параметры Fromlndex и Tolndex указывают индексы в массиве столбцов сетки, соответствующие предыдущему и новому положению перемещенного столбца соответственно.
Сетка DBGrid способна автоматически отображать в своих ячейках информацию, но при необходимости программист может выполнить и собственное отображение сетки. Это может понадобиться в случае, когда желательно выделить ячейку или столбец с помощью цвета или шрифта, а также вывести в ячейке, кроме текстовой, и графическую информацию, например, небольшой рисунок. Для программной реализации отображения сетки используется обработчик события OnDrawColumnCell типа TDrawColumnCellEvent, которое возникает при прорисовке любой ячейки. Тип события OnDrawColumnCell описан так:
type TDrawColumnCellEvent = procedure (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState) of object;
142
Часть II. Технологии доступа к данным
Параметр Rect содержит координаты ограничивающего ячейку прямоугольника, параметр DataCol определяет номер прорисовываемого столбца в массиве столбцов сетки, а параметр Column является объектом прорисовываемого столбца. Параметр state задает состояние ячейки и принимает комбинации следующих значений:
□ golSelected (ячейка находится в выбранном диапазоне);
□ gdFocused (ячейка имеет фокус ввода);
□ gdFixed (ячейка находится в фиксированном диапазоне).
Порядок вызова события OnDrawColumnCell зависит от значения свойства DefaultDrawing типа Boolean. Если свойство имеет значение True (по умолчанию), то перед генерацией события OnDrawColumnCell в ячейке отображается фон и выводится информация. Затем вокруг выбранной ячейки рисуется прямоугольник выбора. Если свойство DefaultDrawing имеет значение False, то сразу вызывается событие OnDrawColumnCell, в обработчике которого следует разместить операции по прорисовке области сетки.
Рассмотрим пример программной прорисовки сетки:
// Свойство DefaultDrawing должно быть установлено в значение True
procedure TForml.DBGridlDrawColumnCell(Sender: TObj ect; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var r:TRect;
s:string;
begin
s:= Tablel.FieldByName(Column.FieldName).AsString;
r:= Rect;
if (Column.FieldName = 'Debt') then begin
DBGridl.Canvas.Brush.Color:= clRed;
DBGridl.Canvas.Font.Color:= clYellow;
DBGridl.Canvas.Font.Style:= [fsltalic];
DBGridl.Canvas.FillRect(Rect);
if Tablel.FieldByName(Column.FieldName).AsCurrency > 1000
then begin
ImageListl.Draw(DBGridl.Canvas, Rect.Left + 2, Rect.Top + 2, 2);
r.Left:= r.Left + ImageListl.Width + 4;
end;
DBGridl.Canvas.TextOut(r.Left, r.Top +2, s);
end
else begin
DBGridl.Canvas.Brush.Color:= clWhite;
DBGridl.Canvas.FillRect(Rect);
DBGridl.Canvas.Font.Color:= clBlack;
Глава 6. Визуальные компоненты для работы с данными
143
DBGridl.Canvas.Font.Style:= []; DBGridl.Canvas.TextOut(r.Left, r.Top +2, s); end; end;
Здесь для столбца сетки, который соответствует полю Debt (Задолженность) набора данных, устанавливается красный цвет фона, а данные выводятся желтым цветом и курсивом. Кроме того, если задолженность превышает юоо (рублей или других денежных единиц), то в поле Debt соответствующей записи слева от числа выводится рисунок, находящийся в компоненте imageListl (третий по счету). Список с рисунками можно подготовить заранее при разработке приложения и загрузить динамически во время выполнения программы.
При прорисовке ячеек используется свойство Canvas элемента DBGridl, а также параметр Rect. Если обработчик события OnDrawColumnCell является общим для нескольких компонентов DBGrid, то при отображении их ячеек вместо названия конкретного компонента (в примере это DBGridl) необходимо ставить конструкцию (Sender as TDBGrid) ИЛИ TDBGrid (Sender). Например, инструкция
(Sender as TDBGrid).Canvas.Font.Color:= clRed;
устанавливает красный цвет для символов ячеек сетки, указываемой параметром
Sender.
Столбцы сетки
Отдельный столбец Column сетки представляет собой объект типа TColumn. По умолчанию для каждого поля набора данных, связанного с компонентом DBGrid, автоматически создается отдельный столбец, и все столбцы в сетке доступны. Такие столбцы являются динамическими. Для создания статических столбцов используется специальный Редактор столбцов. Если хотя бы один столбец сетки является статическим, то динамические столбцы уже не создаются ни для одного из оставшихся полей набора данных. Причем в наборе данных доступными являются статические столбцы, а остальные столбцы считаются отсутствующими. Изменить состав статических столбцов можно с помощью Редактора столбцов на этапе разработки приложения.
Взаимодействие между динамическими и статическими столбцами, а также Редактором столбцов аналогично взаимодействию между динамическими и статическими полями набора данных и Редактором полей.
Характеристики и поведение сетки и ее отдельных столбцов во многом определяются полями набора данных (а также соответствующими объектами типа
TField), для которых создаются объекты типа TColumn.
Функционирование динамических столбцов зависит от свойств объекта поля: при изменении свойств объекта типа TField соответственно изменяются свой-
144
Часть II. Технологии доступа к данным
ства объекта типа TColumn. К примеру, динамический столбец получает от поля такие характеристики, как имя и ширину.
Достоинством статических столбцов является то, что для их объектов можно установить значения свойств, отличные от свойств соответствующего поля и не зависящие от него. Например, если для некоторого статического столбца установить свое имя, то оно не будет меняться даже в случае, если с этим столбцом связывается другое поле набора данных. Кроме того, объекты типа TColumn статических столбцов создаются на этапе разработки приложения, и их свойства доступны через Инспектор объектов.
Для запуска Редактора столбцов (рис. 6.3) можно вызвать контекстное меню компонента DBGrid и выбрать в нем пункт Columns Editor. Редактор столбцов можно вызвать также щелчком мыши на свойстве Columns в окне Инспектора объектов.
В заголовке Редактора столбцов выводится составное имя массива столбцов, например, DBGridl.Columns. Под заголовком находится панель инструментов, видимостью которой можно управлять с помощью пункта Toolbar контекстного меню Редактора столбцов. Большую часть Редактора столбцов занимает список статических столбцов, при этом столбцы перечисляются в порядке их создания (этот порядок может отличаться от исходного порядка полей в наборе данных).
(_____ ЗамечаниеJ
При изменении порядка столбцов сетки автоматически изменяется порядок связанных с ними полей набора данных, что необходимо учитывать при доступе к полям по номерам объектов типа TField, а не по именам объектов.
Рис. 6.З. Диалоговое окно Редактора столбцов
Первоначально список статических столбцов пуст, показывая тем самым, что все столбцы сетки являются динамическими. Редактор столбцов позволяет:
□ создать статический столбец;
□ удалить статический столбец;
□ изменить порядок следования статических столбцов.
Кроме того, для любого выбранного в Редакторе статического столбца (объекта типа TColumn) через Инспектор объектов можно задать или изменить его свой-
Глава 6. Визуальные компоненты для работы с данными
145
ства и определить обработчики его событий. Это допустимо потому, что соответствующие статическим столбцам объекты типа TColumn доступны уже на этапе разработки приложения.
Статический столбец можно создать следующими способами:
□ нажатием кнопки L ^ | панели инструментов Редактора столбцов;
□ выбором пункта Add контекстного меню Редактора столбцов;
□ нажатием клавиши <Insert>.
В любом случае к списку добавляется строка, соответствующая новому статическому столбцу. В левой части строки содержится номер этого столбца в массиве столбцов, в правой — имя поля набора данных, с которым связан столбец. Сразу после добавления к списку столбец не связан ни с одним полем и вместо имени поля указывается TColumn. При выполнении приложения подобный столбец окажется пустым. Чтобы связать столбец с каким-либо полем, необходимо установить значение его свойства FieldName.
Для добавления в список статических столбцов, соответствующих всем полям
набора данных, следует нажать кнопку К^ панели инструментов Редактора столбцов или выбрать в его контекстном меню пункт Add All Fields.
Для удаления из списка статических столбцов необходимо их выделить, после чего выполнить одно из следующих действий:
□ нажать кнопку q^ панели инструментов Редактора столбцов;
□ выбрать пункт Delete контекстного меню Редактора столбцов;
□ нажать клавишу < Delete >.
Вновь создаваемые статические столбцы получают значения свойств по умолчанию, зависящие также от полей набора данных, с которыми эти столбцы связаны.
Если значения свойств были изменены через Инспектор объектов и требуется восстан овить их первоначальные значения, то это можно выполнить нажатием
или выбором пункта Restore Defaults (Восстановить параметры по умолчанию) контекстного меню Редактора столбцов.
Объект столбца доступен через свойство Columns типа TDBGridColumns. При проектировании приложения свойства этого объекта (т. е. столбца, выбранного в списке Редактора столбцов) доступны через Инспектор объектов.
Перечислим наиболее важные свойства объекта столбца.
□ Alignment типа TAlignment — управляет выравниванием значений в ячей
ках столбца и может принимать следующие значения:
• taLeft Justify (выравнивание по левой границе);
• taCenter (выравнивание по центру);
• taRightJustify (выравнивание по правой границе).
□ Count типа integer — указывает число столбцов сетки.
кнопки
146
Часть II. Технологии доступа к данным
П Field типа TField — определяет объект поля набора данных, связанный со столбцом.
□ FieldName типа string — указывает имя поля набора данных, с которым связан столбец. При установке этого свойства с помощью Инспектора объектов значение можно выбирать в списке.
□ PickList типа TStrings — представляет собой список для выбора заносимых в поле значений. Текущая ячейка совместно со списком PickList образуют своего рода компонент ComboBox или DBComboBox. Если для столбца сформирован список выбора, то при попытке редактирования ячейки этого столбца справа появляется стрелка, при нажатии которой список раскрывается и позволяет выбрать одно из значений. При этом можно ввести в ячейку любое допустимое значение.
□ Title типа TColumnTitle — представляет собой объект заголовка столбца. В свою очередь этот объект имеет такие свойства, как Caption, Alignment, Color и Font, определяющие название, выравнивание, цвет и шрифт заголовка соответственно.
Свойства столбца, управляющие форматированием, видимостью или возможностью модификации значений, не отличаются от соответствующих свойств поля.
Рассмотрим пример по установке свойств для столбцов сетки.
В наборе данных определено пять полей, для каждого из которых с помощью Редактора столбцов создан статический столбец. Текст процедуры, выполняемой при создании формы приложения, имеет следующий вид:
// Значения этих свойств можно установить также через Инспектор объектов
procedure TForial.FormCreate(Sender: TObject);
begin
// Скрытие первого столбца
DBGridl.Columns[0].Visible:= False;
// Установка параметров второго столбца
DBGridl.Columns[1].Title.Caption:= 'Дата поступления';
DBGridl.Columns[1].Title.Alignment:= taCenter;
DBGridl.Columns[1].Alignment:= taCenter;
// Скрытие третьего столбца
DBGridl.Columns[2].Visible:= False;
// Установка параметров четвертого столбца
DBGridl.Columns[3].Title.Caption:= 'Количество';
DBGridl.Columns[3].Title.Alignment:= taCenter;
DBGridl.Columns[3].Alignment:= taRightJustify;
// Устан*овка параметров пятого столбца
DBGridl.Columns[4].Title.Caption:= 'Примечание ';
DBGridl.Columns[4].Title.Alignment:= taCenter;
DBGridl.Columns[4].Title.Alignment:= taLeftJustify;
Глава 6. Визуальные компоненты для работы с данными
147
DBGridl.Columns[4].PickList.Clear;
DBGridl.Columns[4].PickList.Add('Товар на складе');
DBGridl.Columns[4].PickList.Add('Некондиция');
DBGridl.Columns[4].PickList.Add('Срок реализации не лимитирован');
end;
Первый и третий столбцы устанавливаются невидимыми, для остальных столбцов задаются название заголовка и его выравнивание, а также выравнивание значений. Кроме того, для пятого столбца, соответствующего полю примечания, создан список выбора. Установка свойств столбцов произведена при создании формы, эти же действия могут быть проделаны и через Инспектор объектов. При выполнении приложения форма имеет вид, показанный на рис. 6.4.
Рис. 6.4. Установка свойств для столбцов сетки
Рис. 6.5. Преобразование значений записей набора данных в текст |
В дальнейшем при использовании компонента DBGrid свойства его столбцов изменяться не будут, при этом состав и порядок следования столбцов сетки будут соответствовать составу и порядку следования полей набора данных, а в качестве заголовков столбцов сетки будут отображаться названия полей набора данных.
148
Часть II. Технологии доступа к данным
Рассмотрим еще один пример, в котором осуществляется преобразование значений записей набора данных в текст.
В качестве набора данных используется компонент Queryl, SQL-запрос для которого вводится в многострочное поле редактирования Memol. Выполнение запроса происходит при нажатии кнопки Выполнить SQL (Buttonl). Полученные в результате выполнения запроса записи отображаются в сетке DBGridl. При нажатии кнопки Преобразовать (Button2) происходит последовательный просмотр полей всех записей набора данных (сетки) и преобразование их в текст, который помещается в многострочное поле редактирования Мето2 (рис. 6.5).
Ниже приведен код обработчиков событий нажатия кнопок.
// Выполнение SQL-запроса
procedure TForml.ButtonlClick(Sender: TObject); begin
Queryl.Close;
Queryl.SQL.Assign(Memol.Lines); Queryl.Open; end;
// Преобразование значений записей набора данных в текст procedure TForml.Button2Click(Sender: TObject); var c, n:integer;
s, rs:string; begin
Memo2.Clear; Queryl.First;
// Перебор всех записей набора данных for n:= 1 to Queryl.RecordCount do begin
rs:= ''; s:= '';
// Чтение названий столбцов сетки
if n = 1 then begin
for с:= 0 to DBGridl.Columns.Count - 1 do begin
s:= DBGridl.Columns[c].FieldName + ' ';
rs:= rs + s;
end; Memo2.Lines.Add(rs); rs:= ''; s:= ''; end;
// Чтение значений полей текущей записи for с:= 0 to DBGridl.Columns.Count - 1 do begin
s:= DBGridl.Columns[c].Field.AsString + ' ';
rs:= rs + s;
end;
Глава 6. Визуальные компоненты для работы с данными
149
Memo2.Lines.Add(rs); Queryl.Next; end; end;
Для доступа к названиям и значениям полей набора данных использованы свойства FieldName, Count и Field столбцов сетки. При необходимости текст из поля редактирования Memo 2 можно скопировать в буфер.
Использование модифицированной сетки
Кроме компонента DBGrid, для управления записями таблицы предназначен компонент DBCtrlGrid — модифицированная сетка. Компонент DBCtrlGrid представляет собой несколько отдельных панелей, на которых располагаются визуальные компоненты (рис. 6.6).
Рис. 6.6. Вид компонента DBCtrlGrid при проектировании приложения
Модифицированная сетка DBCtrlGrid может отображать несколько одинаковых панелей, но текущей является только одна из них. При проектировании приложения визуальные компоненты, например, DBEdit или DBtext, располагаются на одной (верхней) панели. Когда визуальные компоненты помещаются на панель модифицированной сетки, у них автоматически устанавливается нужное значение свойства DataSource, взятое из аналогичного свойства модифицированной сетки. При выполнении приложения компоненты, размещенные на одной панели, дублируются на другие панели сетки. На приведенной на рис. 6.7 сетке расположены четыре компонента DBEdit — для названия, единицы измерения, цены товара и примечания, компонент DBtext — для количества товара на складе и надпись Label с текстом Наличие -.
Число панелей, одновременно видимых в модифицированной сетке, определяется свойством PanelCount типа Integer, доступным для чтения во время выполнения
150
Часть II. Технологии доступа к данным
приложения. Свойство Panelindex типа integer указывает текущую панель, на которой находится просматриваемая запись набора данных. Установив это свойство в соответствующее значение, можно сделать текущей нужную панель.
Рис. 6.7. Вид компонента DBCtrlGrid при выполнении приложения
Все панели сетки имеют одинаковые размеры, определяемые свойствами PanelHeight (высота) и PanelWidth (ширина) типа Integer. Каждая панель может иметь рамку, что определяется свойством PanelBorder типа
TDBCtrlGridBorder, принимающим следующие значения:
□ gbNone (рамки нет);
□ gbRaised (трехмерная приподнятая рамка) — по умолчанию.
Рис. 6.8. Вид сетки с панелями в две строки и два столбца |
Число одновременно видимых строк и столбцов сетки задают свойства RowCount и ColCount типа integer, значения которых по умолчанию равны трем и одному. Это соответствует трем панелям в одном столбце и наличию вертикальной полосы прокрутки. При задании более одного столбца у сетки появляется горизонтальная полоса прокрутки (рис. 6.8).
Глава 6. Визуальные компоненты для работы с данными
151
Свойство Orientation типа TDBCtrlGridOrientation при наличии нескольких столбцов определяет порядок размещения записей на панелях. Это свойство принимает следующие значения:
□ goVertical (записи выводятся по горизонтали: слева направо и сверху вниз) — по умолчанию;
□ goHorizontal (записи выводятся по вертикали: сверху вниз и слева направо).
На панели может отображаться прямоугольник фокуса (прямоугольная рамка), указывающий на текущую запись. Его отображением управляет свойство ShowFocus типа Boolean, которое по умолчанию имеет значению True, что соответствует отображению прямоугольника фокуса. Значение False свойства ShowFocus скрывает прямоугольник фокуса.
Свойства AllowDelete и Allowlnsert типа Boolean управляют возможностями удаления текущей и вставки новой записи в набор данных, записи которого отображаются на панелях сетки. По умолчанию оба свойства имеют значение True, и пользователь имеет возможность удалять и вставлять записи.
Свойство EditMode типа Boolean определяет, находится ли набор данных в режиме редактирования (значение True). Пользователь управляет его значением с помощью действий с визуальными компонентами, разработчик может устанавливать его программно.
С помощью мыши и клавиатуры пользователь управляет записями набора данных посредством компонента DBCtrlGrid так же, как и в случае компонента
DBGrid.
Программисту предоставляются дополнительные возможности управления набором данных, связанные с использованием метода DoKey. Процедура DoKey (Key: TDBCtrlGridKey) выполняет различные операции, которые задает параметр Key, принимающий следующие значения:
□ gkNull (пустое действие);
□ gkEditMode (переключение значения свойства EditMode);
□ gkPriorTab (передача фокуса ввода следующему элементу формы);
□ gkNextTab (передача фокуса ввода предыдущему элементу формы);
□ gkLeft (переход на один столбец влево);
□ gkRight (переход на один столбец вправо);
□ gkUp (переход на одну панель вверх);
□ gkDown (переход на одну панель вниз);
□ gkScrollUp (переход на одну строку вверх);
□ gkScrollDown (переход на одну строку вниз);
□ gkPageUp (переход вперед на число записей, равное произведению числа строк и столбцов панелей сетки Coicount * RowCount);
152
Часть II. Технологии доступа к данным
П gkPageDown (переход назад на число записей, равное произведению числа строк и столбцов панелей сетки);
□ gkHome (переход на первую запись);
□ gkEnd (переход на последнюю запись);
□ gkinsert (вставка новой записи методом insert и переход в режим редактирования);
□ gkAppend (вставка новой записи методом Append и переход в режим редактирования);
□ gkDelete (удаление текущей записи);
□ gkCancel (отмена режима редактирования).
При необходимости разработчик может выполнить программную прорисовку панелей, использовав для этого событие OnPaintPanel типа TPaintPanelEvent, возникающее непосредственно перед отображением панелей. Тип этого события описан как