
- •1. Наборы данных
- •Var I: integer;
- •1.1. Состояния наборов данных
- •If not CheckBoxl.Checked then Abort;
- •If not CheckBoxl.Checked then begin
- •If CheckBox2.Checked then
- •If CheckBox2.Checked then begin
- •1.2. Режимы наборов данных
- •1.3. Доступ к полям
- •Var n: integer;
- •Var X: integer;
- •Var X: integer;
- •1.4. Особенности набора данных Table
- •If OpenDialogl.Execute then begin
- •Var n: integer;
- •If Editl.CanFocus then Editl.SetFocus;
- •1.5. Особенности набора данных Query
- •Interface
- •Implementation
- •2. Объекты поля
- •2.1 Редактор полей
- •2.2. Операции с полями
- •Var X: integer;
- •Var s: string;
- •X: real;
- •Var s: string;
- •X: real;
- •If not Tablel.Fields[2].IsValidChar(Editl.Text[1]) then
- •If (TablelCode.Required) and (TablelCode.IsNull)
- •3. Источник данных
- •Var n: integer;
- •1. Отображение и редактирование значения логического поля
- •2. Отображение и выбор значения поля
- •3. Отображение и выбор значения поля из списка
- •3.1. Простой и комбинированный списки
- •3.2. Списки, сформированные по значениям поля набора данных
- •4. Представление записей в табличном виде
- •4.1 Характеристики сетки
- •Var r :tRect;
- •4.2. Столбцы сетки
- •Var c, n :integer;
- •4.3. Использование модифицированной сетки
- •5. Использование навигационного интерфейса
- •6. Вывод графических изображений
- •Interface
- •Implementat ion
- •If OpenPictureDialogl.Execute then
- •If SavePictureDialogl.Execute then
- •7. Построение диаграмм
- •Var n: integer;
Var c, n :integer;
s, rs :string;
begin
Memo2.Clear,•
Queryl.First;
// Перебор всех записей набора данных
for n:=l to Queryl.RecordCount do begin
rs: =' '; s: =' ' ;
// Чтение названий столбцов сетки
if n = 1 then begin
for c:=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 c:=0 to DBGridl.Columns.Count-1 do begin
s:=DBGridl.Columns[c].Field.AsString+' ';
rs:=rs+s;
end;
Memo2 . Lines. Add (rs) ; Queryl.Next;
end;
end;
Для доступа к названиям и значениям полей набора данных использованы свойства FieldName, Count и Field столбцов сетки. При необходимости текст из поля редактирования мето2 можно скопировать в буфер.
4.3. Использование модифицированной сетки
Кроме компонента DBGrid, для управления записями таблицы предназначен компонент DBCtrlGrid — модифицированная сетка. Компонент DBCtrlGrid представляет собой несколько отдельных панелей, на которых располагаются визуальные компоненты (рис. 8.6).
Рис. 8.6. Вид компонента DBCtrlGrid на этапе проектирования приложения
Модифицированная сетка DBctriGrid может отображать несколько одинаковых панелей, но текущей является только одна из них. При проектировании приложения визуальные компоненты, например, DBEdit или DBText, располагаются на одной (верхней) панели. Когда визуальные компоненты помещаются на панель модифицированной сетки, у них автоматически устанавливается нужное значение свойства Datasource, взятое из аналогичного свойства модифицированной сетки. При выполнении приложения компоненты, размещенные на одной панели, дублируются на другие панели сетки. На приведенной на рис. 8.7 сетке расположены четыре компонента DBEdit — для названия, единицы измерения, цены товара и примечания, компонент DBText — для количества товара на складе и надпись Label с текстом Наличие -.
Рис. 8.7. Вид компонента DBCtrlGrid при выполнении приложения
Число панелей, одновременно видимых в модифицированной сетке, определяет свойство Paneicount типа integer, доступное для чтения во время выполнения приложения. Свойство Panelindex типа integer указывает текущую панель, на которой находится просматриваемая запись набора данных. Установив этому свойству соответствующее значение, можно сделать текущей нужную панель.
Все панели сетки имеют одинаковые размеры, определяемые свойствами PanelHeight (высота) И PanelWidth (ширина) типа Integer. Каждая панель может иметь рамку, что определяется свойством PanelBorder типа TDBCtrlGridBorder, принимающим следующие значения:
gbNone — рамки нет;
gbRaised — трехмерная приподнятая рамка (по умолчанию).
Число одновременно видимых строк и столбцов сетки задают свойства Rowcount и coicount типа integer, значения которых по умолчанию равны трем и одному. Это соответствует трем панелям в одном столбце и наличию вертикальной полосы прокрутки. При задании более одного столбца у сетки появляется горизонтальная полоса прокрутки (рис. 8.8).
Свойство Orientation типа TDBCtrlGridOrientation при наличии нескольких столбцов определяет порядок размещения записей на панелях.
Это свойство принимает следующие значения:
goVertical — записи выводятся по горизонтали: слева направо и сверху вниз
(по умолчанию);
goHorizontal — записи выводятся по вертикали: сверху вниз и слева направо.
Рис. 8.8. Вид сетки с панелями в две строки и два столбца
На панели может отображаться прямоугольник фокуса (прямоугольная рамка), указывающий на текущую запись. Его отображением управляет свойство showFocus типа Boolean, которое по умолчанию имеет значению True, что соответствует отображению прямоугольника фокуса. Установка свойству ShowFocus значения False скрывает прямоугольник фокуса.
Свойства AllowDelete И Allowlnsert типа Boolean управляют возможностями удаления текущей и вставки новой записи в набор данных, записи которого отображаются на панелях сетки. По умолчанию оба свойства имеют значение True, и пользователь имеет возможность удалять и вставлять записи.
Свойство EditMode типа Boolean определяет, находится ли набор данных в режиме редактирования (значение True). Пользователь управляет его значением с помощью действий с визуальными компонентами, разработчик может устанавливать его программно.
Пользователь с помощью мыши и клавиатуры управляет записями набора данных с помощью компонента DBCtrlGrid таким же образом, как и в случае компонента DBGrid.
Программисту предоставляются дополнительные возможности управления набором данных, связанные с использованием метода DoKey. Процедура DoKey (Key: TDBCtriGridKey) выполняет различные операции, которые задает параметр Key, принимающий следующие значения:
gkNull — пустое действие;
gkEditMode — переключение значения свойства EditMode;
gkPriorTab — передача фокуса управления на следующий элемент формы;
gkNextTab — передача фокуса управления на предыдущий элемент формы;
gkLeft — переход на один столбец влево;
gkRight — переход на один столбец вправо;
gkUp — переход на одну панель вверх;
gkDown — переход на одну панель вниз;
gkScrollUp — переход на одну строку вверх;
gkScrollDown — переход на одну строку вниз;
gkPageUp — переход вперед на число записей, равное произведению числа строк и
столбцов панелей сетки (colCount * RowCount);
gkPageDown — переход назад на число записей, равное произведению числа строк и
столбцов панелей сетки;
gkHome — переход на первую запись;
gkEnd — переход на последнюю запись;
gkInsert — вставка новой записи методом insert и переход в режим редактирования;
gkAppend — вставка новой записи методом Append и переход в режим редактирования;
gkDelete — удаление текущей записи;
gkCancel — отмена режима редактирования.
При необходимости разработчик может выполнить программную прорисовку панелей, использовав для этого событие onPaintPanel типа TPaintPaneiEvent, возникающее непосредственно перед отображением панелей. Тип этого события описан как
type TPaintPanelEvent = procedure (DBCtrlGrid: TDBCtrlGrid; Index: Integer) of object;
Параметр Index указывает номер панели, отображение элементов которой выполняется в настоящий момент. Кроме прорисовки, в обработчике события OnPaintPanel можно выполнить и другие действия, например, обработку связанных с панелью данных.