Компоненты для работы с графиками и таблицами

ГЛАВА 15 Компоненты отображения данных. Классификация компонентов отображения данных Табличное представление данных Компонент TDBGrid Компонент TDBCtrlGrid Навигация по набору данных Представление отдельных полей Компонент TDBText Компонент TDBEdit Компонент TDBCheckBox Компонент TDBRadioGroup Компонент TDBListBox Компонент TDBComboBox Компонент TDBMemo Компонент TDBImage Компонент TDBRichEdit Синхронный просмотр данных Механизм синхронного просмотра Компонент TDBLookupListBox Компонент TDBLookupComboBox Графическое представление данных Резюме До этого момента мы рассмотрели аспекты создания приложений баз данных, касающиеся организации доступа к данным и создания в приложениях наборов данных.

Теперь более подробно остановимся на вопросах отображения данных в приложениях интерфейс приложений. Отображение данных обеспечивает достаточно представительный набор компонентов VCL Delphi. Многие из них унаследованы от компонентов, инкапсулирующих стандартные элементы управления.

Для связи с набором данных эти компоненты используют компонент TDataSource. Механизмы управления данными реализованы в компонентах наборов данных и активно взаимодействуют с компонентами отображения данных. В этой главе рассматриваются следующие вопросы: Классификация компонентов отображения данных.

Все компоненты отображения данных можно разделить на группы по нескольким критериям рис. Большинство компонентов предназначены для работы с отдельным полем, т. Для соединения с набором данных через компонент TDataSource предназначено свойство DataSource. Поле задается свойством DataField. Компоненты TDBGrid и TDBCtrlGrid обеспечивают просмотр наборов данных целиком или в произвольном сочетании полей. В них присутствует только свойство DataSource.

Особенную роль среди компонентов отображения данных играет компонент TDBNavigator. Он не показывает данные и не предназначен для их редактирования, зато обеспечивает навигацию по набору данных. Наиболее часто в практике программирования используются компоненты TDBGrid, TDBEdit И TDBNavigator.

Для представления и редактирования информации, содержащейся в полях типа Memo, используются специальные компоненты TDBMemo и TDBRichEdit. Для просмотра без редактирования изображений предназначен компонент TDBImage. Отдельную группу составляют компоненты синхронного просмотра данных. Они обеспечивают показ значений поля из одной таблицы в соответствии со значениями поля из другой таблицы.

Наконец, данные можно представить в виде графика. Для этого предназначен компонент TDBChart. Как видите, набор компонентов отображения данных весьма разнообразен и позволяет решать задачи по созданию любых интерфейсов для приложений баз данных. Ввиду общности решаемых задач, компоненты отображения данных имеют несколько важных общих свойств, которые представлены в табл. Общие свойства компонентов отображения данных. Поле связанного с компонентом набора данных.

Связываемый с компонентом компонент. Обеспечивает доступ к классу TField, который соответствует полю набора данных, заданному свойством DataField.

Управляет работой режима "только для чтения". Этот компонент инкапсулирует двумерную таблицу, в которой строки представляют собой записи, а столбцы — поля набора данных.

Компонент TDBGrid является потомком классов TDBCustomGrid И TCustomGrid. От класса TCustomGrid наследуются все функции отображения и управления работой двумерной структуры данных.

Класс TDBCustomGrid обеспечивает визуализацию и редактирование полей из набора данных, причем TDBGrid только публикует свойства и методы класса TDBCustomGrid , не добавляя собственных. В компоненте TDBGrid можно отображать произвольное подмножество полей используемого набора данных, но число записей ограничить нельзя — в компоненте всегда присутствуют все записи связанного набора данных. Требуемый набор полей можно составить при помощи специального Редактора столбцов, который открывается при двойном щелчке на компоненте, перенесенном на форму, или кнопкой свойства columns в Инспекторе объектов.

Новая колонка добавляется при помощи кнопки Add New , после этого ее название появляется в списке колонок рис. Для выбранной в списке колонки доступные для редактирования свойства появляются в Инспекторе объектов. Колонки в списке можно редактировать, удалять, менять местами. При помощи кнопки Add All Fields в сетку можно добавить все поля набора данных.

Каждая колонка компонента TDBGrid описывается специальным классом TColumn, а совокупность колонок доступна через свойство columns компонента, оно имеет тип TDBGridColumns и представляет собой индексированный список объектов колонок. Поле набора данных связывается с конкретной колонкой при помощи свойства FieldName класса TColumn. При этом в колонку автоматически переносятся все необходимые параметры поля, в частности заголовок поля, настройки шрифтов, ширина поля.

После ручного изменения параметров первоначальные значения восстанавливаются методами соответствующих объектов Icolumn. Редактор колонок компонента TDBGrid. Метод DefaultorawDataCelll предназначен только для обеспечения обратной совместимости по коду с более ранними версиями.

Настройка параметров компонента TDBGrid, от которых зависит его внешний вид и некоторые функции, осуществляется при помощи свойства options табл. Текущая позиция в двумерной структуре данных может быть определена свойствами SelectedField, SelectedRows, Selectedlndex. При необходимости разработчик может использовать разнообразные методы-обработчики событий. Среди них есть как стандартные методы, присущие всем элементам управления, так и специфические.

Например, при помощи метода-обработчика OnEditButtonClick можно предусмотреть вызов специализированной формы при щелчке на кнопке в ячейке: Объект колонки TColumn имеет свойство ButtonStyle. Если ему присвоить значение cbsEllipsis , то при активизации ячейки этой колонки в правой части ячейки появляется кнопка. Свойства и методы компонента WBGrid. Содержит коллекцию объектов TColumn, описывающих колонки компонента.

Определяет способ визуализации данных в сетке. При значении True данные отображаются автоматически. При значении False используется метод-обработчик OnDrawColumnCell. Возвращает число видимых колонок сетки. Массив объектов полей набора данных, отображаемых в компоненте. Определяет особенности визуализации и поведения компонента: Содержит объект текущего поля. Содержит номер текущей колонки в массиве свойства Columns. Набор закладок на записи набора данных, соответствующих выделенным строкам сетки.

Показывает, можно ли редактировать текущую ячейку. Цвет фона неподвижных ячеек сетки. Перерисовывает текст в ячейке колонки с номером DataCol.

Ячейка задается прямоугольником Rect на канве сетки. Параметр state определяет состояние ячейки после перерисовки. Параметр Column содержит экземпляр класса колонки, которой принадлежит ячейка. Перерисовывает текст в ячейке колонки, определяемой параметром Field, содержащим связанный с колонкой объект поля.

Параметр State определяет состояние ячейки после перерисовки. Вызывает всплывающее меню для колонки, которой соответствуют текущие координаты мыши. Компонент должен обрабатывать сообщение WM RBUTTONUP. Открывает набор данных, связанный с передаваемой параметром Column колонкой в новом окне. Работает только для типов данных абстрактный и набор данных.

Параметры X и Y определяют положение нового окна. Возвращает значение True, если колонка с номером Fieldlndex связана с полем набора данных. Возвращает номера строки и столбца, соответствующие ячейке, которой принадлежат экранные координаты X и Y.

TColumn 1 of object;. Вызывается при щелчке мышью на ячейке. Параметр Column содержит колонку, которой принадлежит ячейка. Вызывается при переносе фокуса на новую колонку сетки. Вызывается перед переносом фокуса из текущей колонки.

Вызывается при переносе колонки в сетке на новое место при помощи мыши. Параметр Fromindex возвращает номер старого положения колонки. Параметр Tolndex возвращает номер нового положения колонки. Вызывается при перерисовке ячейки. Параметр Rect определяет ячейку по координатам прямоугольника на канве. Параметр DataCol возвращает номер колонки в сетке. Параметр Column содержит объект колонки. Параметр State возвращает состояние колонки. Этот метод лучше не применять, т.

Вызывается при щелчке мышью на кнопке в ячейке. Вызывается при щелчке мышью на заголовке колонки. Колонка определяется параметром Column. В работе компонента TDBGrid важную роль играет класс TColumn , который инкапсулирует свойства колонки или столбца сетки табл. Его основным назначением является правильное отображение данных из поля набора данных, связанного с этой колонкой. Поэтому объект колонки обладает свойствами и методами, которые позволяют произвольным образом задавать параметры отображения данных цвет, шрифт, ширину и т.

Первоначальные значения берутся из связанных с колонками полей. Измененные свойства можно восстановить при помощи группы специальных методов DefauitColor, DefaultFont И др. Свойство Assignedvalues позволяет в любой момент определить, какие первоначальные настройки были изменены. За отображение заголовка колонки отвечает свойство Title, представляющее собой ссылку на экземпляр объекта TColumnTitie.

Здесь можно задать текст заголовка, параметры шрифта текста заголовка и цвет фона заголовка. По умолчанию текст заголовка берется из свойства DispiayLabel объекта TField CM. Каждой колонке можно придать список, который разворачивается при щелчке на кнопке в активной ячейке колонки.

Выбранное в списке значение автоматически заносится в ячейку. Для реализации этой возможности применяется свойство pickList типа TStrings. Достаточно лишь заполнить список значениями во время разработки или выполнения рис. Список колонки в компоненте TDBGrid. Свойства и методы класса TColumn. Название колонки в списке Редактора столбцов. Определяет число строк разворачивающегося списка ячейки. В значении True разрешает показ связанных с полем колонки дочерних полей абстрактного, ссылочного типов и массивов.

При значении True каждое дочернее поле отображается в новой колонке. При значении False дочерние поля отображаются через точку с запятой и не доступны для редактирования. Название поля, связанного с колонкой. Определяет сетку, содержащую эту колонку. Определяет колонку-владельца текущей колонки. Используется для дочерних полей. Содержит разворачивающийся список, используемый при редактировании данных. Связывает с колонкой всплывающее меню.

Возвращает значение True, если колонка видима. Задает текст заголовка и его параметры. Задает ширину колонки в пикселах. Копирует колонку Source в текущую колонку. Возвращает первоначальное значение выравнивания колонки.

Возвращает первоначальный фоновый цвет колонки. Возвращает первоначальный шрифт данных в колонке. Возвращает первоначальный способ ввода символов. Возвращает первоначальное имя редактора способа ввода символов.

При работе с компонентом TDBGrid все операции с отдельными колонками осуществляются при помощи экземпляра класса TDBGridColumns, который инкапсулирует список объектов колонок свойство Columns компонента TDBGrid. Доступ к колонкам осуществляется при помощи свойства items. Нумерация колонок начинается с нуля. При помощи свойств и методов класса TDBGridColumns можно изменять настройки полей компонента TDBGrid во время выполнения табл.

Свойство state определяет способ создания колонок. Его значение устанавливается автоматически. При создании колонок для всех полей сразу кнопка Add All Fields Редактора столбцов устанавливается значение csDefault. При любом ручном изменении свойств устанавливается значение csCustomized. При программном изменении значения свойства во время выполнения все существующие колонки удаляются.

Все данные из существующих колонок можно сохранить в файле или потоке при помощи методов SaveToFile и saveToStream, а затем загрузить их обратно методами LoadFromFile И LoadFromStream.

Свойства и методы класса TDBGridColumns. Возвращает ссылку на сетку, владеющую данным объектом. Индексный список объектов колонок сетки: Определяет способ создания колонок сетки: Возвращает общее число колонок.

Добавляет новый объект TColumn. Загружает данные в объект из файла FileName. Загружает данные в объект из потока s. Удаляет существующие колонки и создает новые, основываясь на параметрах полей набора данных. Восстанавливает первоначальные настройки колонок. Сохраняет данные из колонок в файле FileName. Сохраняет данные из колонок в потоке s. Компонент TDBCtrlGrid внешне напоминает компонент TDBGrid, но никак не связан с классом TCustomDBGrid , а наследуется напрямую от класса TWinControl.

Этот компонент позволяет отображать данные в строках в произвольной форме. Компонент представляет собой набор панелей, каждая из которых служит платформой для размещения данных отдельной записи набора данных. На панели могут размещаться любые компоненты отображения данных, предназначенные для работы с отдельным полем. С каждым таким компонентом можно связать нужное поле набора данных. При открытии набора данных в компоненте TDBCtrlGrid на каждой новой панели создается набор компонентов отображения данных, аналогичный тому, который был создан на одной панели во время разработки.

На панель можно переносить только те компоненты отображения данных, которые показывают значение одного поля для единственной записи набора данных. Нельзя использовать компоненты TDBGrid, TDBCtrlGrid, TDBRichEdit, TDBListBox, TDBRadioGroup, TDBLookupListBox. После того, как для компонента TDBCtrlGrid задано значение свойства DataSource , все переносимые на панель компоненты отображения данных автоматически связываются с указанным компонентом TdataSource табл.

Самостоятельное задание свойства DataSource для дочерних компонентов отображения данных не допускается. В них требуется определить только поля. Компонент может отображать панели в одну или несколько колонок. Для задания числа колонок панелей используется свойство colcount.

Число видимых строк панелей определяется свойством RowCount. Вертикальное или горизонтальное размещение колонок панелей зависит от значения свойства Orientation. При использовании нескольких колонок панелей курсор перемещается по колонке сверху вниз с последующим переходом на следующую колонку. Направление движения курсора не зависит от значения свойства Orientation. Размеры одной панели определяются свойствами panelHeight и Panelwidth.

Они взаимосвязаны с размерами самого компонента. При изменении значений свойств PanelHeight и Panelwidth размеры компонента изменяются таким образом, чтобы в нем помещалось указанное в свойствах colcount и RowCount число панелей и наоборот. Не рекомендуется размещать на панели компоненты TDBMemo и TDBimage, т. Свойства и методы компонента TDBCtrlGrid.

Разрешает или запрещает удаление текущей записи. Разрешает или запрещает вставку новой записи. Определяет число колонок с панелями. Разрешает или запрещает редактирование данных.

Определяет порядок следования записей — по горизонтали или по вертикали. Определяет способ отображения границы панели. Содержит число видимых одновременно панелей.

Определяет высоту панелей в пикселах. Определяет индекс панели текущей записи. Определяет ширину панелей в пикселах. Определяет число строк видимых панелей. Определяет фоновый цвет панели текущей записи. Разрешает или запрещает выделение вокруг панели текущей записи.

Выполняет операцию, заданную при помощи параметра Key. Доступны операции навигации по записям, перевода в режим редактирования, вставки, удаления записей, отмены изменений.

Используется при нажатии клавиши для трансляции кодов клавиш. Вызывается при перерисовке панели. Параметр Index соответствует индексу панели. Навигация по набору данных. Перемещение или навигация по записям набора данных может осуществляться несколькими путями. Например, в компонентах TDBGrid и TDBCtrlGrid , которые отображают сразу несколько записей набора данных, можно использовать клавиши вертикального перемещения курсора или вертикальную полосу прокрутки. Но что делать, если на форме находятся только компоненты, отображающие одно поле только текущей записи набора данных TDBEdit, TDBCombоВох и т.

Очевидно, что в этом случае на форме должны быть расположены дополнительные элементы управления, отвечающие за перемещение по записям. Аналогично, ни один компонент отображения данных не имеет встроенных средств для создания и удаления записей целиком.

Для решения указанных задач и предназначен компонент TDBNavigator, который представляет собой совокупность управляющих кнопок, выполняет операции навигации по набору данных и модификации записей целиком.

Компонент TDBNavigator при помощи свойства DataSource связывается с компонентом TDataSource и через него с набором данных. Такая схема позволяет обеспечить изменение текущих значений полей сразу во всех связанных с TDataSource компонентах отображения данных. Таким образом, TDBNavigator только дает команду на выполнение перемещения по набору данных или другой управляющей операции, а всю реальную работу выполняют компонент набора данных и компонент TDataSource.

Компонентам отображения данных остается только принять новые данные от своих полей. Назначение кнопок компонента TDBNavigator. Компонент TDBNavigator содержит набор кнопок, каждая из которых отвечает за выполнение одной операции над набором данных.

Всего имеется 10 кнопок, разработчик может оставить в наборе любое количество кнопок в любом сочетании. Видимостью кнопок управляет свойство visibleButtons: Каждый элемент типа TNavigateBtn представляет одну кнопку, их назначение описывается ниже: Самой критичной к возможной потере данных вследствие ошибки является операция удаления записи, поэтому при помощи свойства confirmDelete можно включить механизм контроля удаления.

При каждом удалении записи нужно будет дать подтверждение выполняемой операции. Нажатие любой кнопки можно эмулировать программно при помощи метода BtnClick. В случае необходимости выполнения дополнительных действий при щелчке на любой кнопке можно воспользоваться обработчиками событий BeforeAction и Onciick, в которых параметр Button определяет нажатую кнопку. Свойства и методы компонента TDBNavigator представлены в табл. Свойства и методы компонента TDBNavigator.

Включает или отключает подтверждение удаления записи. Содержит список подсказок для каждой кнопки. Определяет внешний вид кнопок компонента. Эмулирует щелчок на кнопке index. Задает положение параметры ALeft, АТор и размер компонента параметры AWidth, AHeight. TNavigateBtn of object; Iproperty BeforeAction: Выполняется при щелчке на кнопке Button после выполнения операции, связанной с кнопкой.

Большинство компонентов отображения данных предназначено для представления данных из отдельных полей. Для этого все они имеют свойство DataField, которое указывает на требуемое поле набора данных. В зависимости от типа данных поля могут использовать различные компоненты. Для большинства стандартных полей используются компоненты TDBText, TDBEdit, TDBComboBox, TDBListBox.

Данные в формате Memo отображаются компонентами TDBMemo и TDBRichEdit. Для показа изображений предназначен компонент TDBImage.

Этот компонент представляет собой статический текст, который отображает текущее значение некоторого поля связанного набора данных. При этом данные можно просматривать в режиме "только для чтения". Непосредственным предком компонента является класс TCustomLabel, поэтому он очень похож на компонент TLabel.

При использовании компонента следует обратить внимание на возможную длину отображаемых данных. Для предотвращения обрезания текста можно использовать свойства AutoSize И Wordwrap. Компонент представляет собой стандартный однострочный текстовый редактор, в котором отображаются и изменяются данные из поля связанного набора данных. Прямой предок компонента — класс TCustomMaskEdit , который также является прямым предком компонента TEdit. Компонент может осуществлять проверку редактируемых данных по заданной для поля маске.

Непосредственно для редактора задать маску нельзя, т. Тем не менее механизм контроля полностью унаследован. Саму же маску можно задать в связанном с редактором поле. Объект TField имеет собственное свойство EditMask, которое и используется при проверке данных в редакторе см. Проверка редактируемого текста на соответствие маске осуществляется методом validateEdit после каждого введенного или измененного символа.

В случае ошибки генерируется исключение validateError и курсор устанавливается на первый ошибочный символ. В компоненте можно использовать буфер обмена. Это делается средствами операционной системы пользователем или программно при помощи методов CopyToClipboard, CutToClipboard, PasteFromCiipboard. Компонент представляет собой почти полный аналог обычного флажка компонент TCheckBox и предназначен для отображения и редактирования любых данных, которые могут иметь только два значения.

Это может быть логический тип данных или любые строковые значения, но поле может принимать значения только из двух строк. Предопределенные значения задаются свойствами valuechecked и ValueUnchecked. По умолчанию они имеют значения True И False.

Этим свойствам можно также присваивать любые строковые значения, причем одному свойству можно назначить несколько возможных значений, разделенных точкой с запятой. Включение флажка происходит, если значение поля набора данных совпадает со значением свойства valuechecked единственным или любым из списка. Если же флажок включил пользователь, то значение поля данных приравнивается к единственному или первому в списке значению свойства ValueChecked.

Аналогичные действия происходят и со свойством ValueUnchecked. Компонент представляет собой стандартную группу переключателей, состояние которых зависит от значений поля связанного набора данных. В поле можно передавать фиксированные значения, связанные с отдельными переключателями в группе. Если текущее значение связанного поля соответствует значению какого-либо переключателя, то он включается.

Если пользователь включает другой переключатель, то связанное с переключателем значение заносится в поле. Возможные значения, на которые должны реагировать переключатели в группе, заносятся в свойство Values при помощи специального редактора в Инспекторе объектов или программно посредством методов класса Tstrings.

Каждому элементу свойства values соответствует один переключатель порядок следования сохраняется. Свойство items содержит список поясняющих надписей для переключателей группы. Если для какого-либо переключателя нет заданного значения, но есть поясняющий текст, то такой переключатель включается при совпадении значения связанного поля с поясняющим текстом. Текущее значение связанного поля содержится в поле value.

Компонент отображает текущее значение связанного с ним поля набора данных и позволяет изменить его на любое фиксированное из списка. Функционально компонент ничем не отличается от компонента TListBox. Значение поля должно совпадать с одним из элементов списка. Специальных методов компонент не содержит. Компонент отображает текущее значение связанного с ним поля набора данных в строке редактирования, при этом значение поля должно совпадать с одним из элементов разворачивающегося списка.

Текущее значение можно изменить на любое фиксированное из списка компонента. Функционально компонент ничем не отличается от компонента TDBCombовох , представляющего собой комбинированный список. Компонент может работать в пяти различных стилях, которые определяются свойством Style.

Компонент представляет собой обычное поле редактирования, к которому подключается поле с типом данных Memo или BLOB. Основное его преимущество — возможность одновременного просмотра и редактирования нескольких строк переменной длины.

Компонент может отображать только строки, которые целиком видны по высоте. В компоненте можно использовать буфер обмена при помощи стандартных средств операционной системы или унаследованными от предка TCustomMemo методами CopyToClipBoard, CutToClipBoard, PasteFromClipBoard. Для ускорения навигации по набору данных при отображении полей типа BLOB можно использовать свойство AutoDisplay.

При значении True любое новое значение поля автоматически отображается в компоненте. Поведением компонента при работе со слишком длинными строками можно управлять при помощи свойства wordwrap. При значении True слишком длинная строка сдвигается влево при перемещении текстового курсора за правую границу компонента. При значении False остаток длинной строки переносится на новую строку, при этом реально новая строка в данных не создается.

Компонент предназначен для просмотра изображений, хранящихся в базах данных в графическом формате. Редактировать изображения можно только в каком-либо графическом редакторе, перенося исходное и измененное изображение при помощи буфера обмена. Это делается средствами операционной системы пользователем или программно при помощи методов CopyToClipboard, CutToClipboard, PasteFromClipboard.

Визуализация изображения осуществляется при помощи свойства Picture, которое представляет собой экземпляр класса TPicture. Также можно полностью заменить существующее изображение или сохранить новое в новой записи набора данных. Для этого используются методы свойства Picture. Свойство AutoDisplay позволяет управлять процессом загрузки новых изображений из набора данных в компонент. Для ускорения просмотра изображений можно применять свойство QuickDraw , которое задает используемую изображением палитру.

При значении True применяется стандартная системная палитра. В результате уменьшается время загрузки изображения, но может ухудшиться и качество изображения, в некоторых случаях до полного искажения.

При значении False используется собственная палитра изображения и процесс загрузки замедляется. Компонент предоставляет возможности полноценного текстового редактора для просмотра и изменения текстовых данных, хранящихся в связанном поле набора данных. Поле должно содержать информацию о форматировании текста. Внешне компонент ничем не отличается от поля редактирования, поэтому о реализации доступа к гораздо более богатым возможностям редактора через интерфейс пользователя должен позаботиться разработчик.

Для этого можно использовать дополнительные элементы управления. При разработке приложений для работы с базами данных часто возникает необходимость в связывании двух наборов данных по ключевому полю. Например, в таблице Orders содержит данные о заказах демонстрационной базы данных DBDEMOS имеется поле custNo, которое содержит идентификационный номер покупателя.

Под этим же номером в таблице Customers хранится информация о покупателе адрес, телефон, реквизиты и т. При разработке пользовательского интерфейса приложения баз данных необходимо, чтобы при просмотре перечня заказов в форме приложения отображались не идентификационные номера покупателей, а их параметры. Таким образом, в наборе данных заказов вместо поля номера покупателя должно появиться поле имени покупателя из таблицы Customers.

Механизм связывания полей из различных наборов данных по ключевому полю называется синхронным просмотром. В рассмотренном примере ключевым является поле CustNo из таблицы Customers, а выбор конкретного наименования производится по совпадению значений ключевого поля и заменяемого поля из исходного набора данных — Orders.

Причем необходимо, чтобы в таблице Customers поле custNo было уникальным составляло первичный или вторичный ключ. Таблицу, в которой расположено поле, значения которого замещаются на синхронные, будем называть исходной таблицей это таблица Orders.

Таблицу, содержащую ключевое поле и поле данных для синхронного просмотра, будем называть таблицей синхронного просмотра таблица Customers. В Delphi механизм синхронного просмотра реализован на уровне отдельных полей и компонентов. В наборе данных динамически можно создать специальное поле синхронного просмотра, которое будет автоматически замещать одно значение другим в зависимости от значения ключевого поля. Такое поле можно связать с любым рассмотренным выше компонентом отображения данных см.

Помимо простого синхронного просмотра данных может возникнуть задача редактирования данных в аналогичной ситуации. Для этого предназначены специальные компоненты синхронного просмотра данных, которые позволяют, например, выбирать покупателя из списка, а изменится при этом номер покупателя в наборе данных заказов. Использование таких компонентов делает пользовательский интерфейс значительно более удобным и наглядным.

В VLC Delphi есть два таких компонента: На странице Win 3. Они обладают тем же набором функций, используются для обеспечения совместимости с приложениями, созданными в среде разработки Delphi 1, и поэтому здесь не рассматриваются. Непосредственным предком компонентов синхронного просмотра данных является класс TDBLookupControl, который инкапсулирует список значений для просмотра и сам механизм синхронного просмотра.

Как и в любом другом компоненте отображения данных, в компонентах синхронного просмотра должны присутствовать средства связывания с требуемым полем некоторого набора данных табл. Это уже известные свойства: Datasource — применяется для задания набора данных через компонент TDataSource и DataField — для определения требуемого поля набора данных.

Для синхронного просмотра следует выбирать такое поле, значения которого не дают пользователю полной информации об объекте и совпадают с ключевым полем в таблице синхронного просмотра. Название этого поля может не совпадать с названием ключевого поля, но типы данных должны быть одинаковыми.

При проектировании баз данных желательно, чтобы такие поля все же носили одинаковые названия. Теперь необходимо задать таблицу синхронного просмотра, ключевое поле и поле синхронного просмотра. Набор данных, содержащий указанные поля, определяется через соответствующий rомпонент TDataSource в свойстве ListSource.

Ключевое поле задается свойством KeyField. Во время работы компонента в свойстве KeyValue содержится текущее значение, которое связывает между собой два набора данных. Поле синхронного просмотра определяется свойством ListField. Здесь можно задавать сразу несколько полей, которые будут отображаться в компоненте синхронного просмотра.

Названия полей разделяются точкой с запятой. Если свойство не определено, то в компоненте будут отображаться значения ключевого поля. Свойство ListFieldindex служит для выбора основного поля из списка.

Часть 1. Компоненты Chart и Spreadsheet

Дело в том, что компоненты синхронного просмотра поддерживают механизм наращиваемого поиска, который позволяет быстро находить нужное значение в больших списках. Свойство ListFieldindex определяет, какое поле используется при наращиваемом поиске.

В компоненте TDBiookupComboBox свойство ListFieldindex также определяет, какое поле будет передано в строку редактирования. Основные свойства, включающие механизм синхронного просмотра.

Ключевое поле таблицы синхронного просмотра. Текущее значение ключевого поля. Поле или список полей синхронного просмотра в таблице синхронного просмотра. Номер основного поля синхронного просмотра используется, когда свойство ListField содержит список полей. Указывает на компонент TDataSource, связанный с таблицей синхронного просмотра. Определяет комбинацию клавиш, нажатие которых задает нулевое значение поля. В качестве примера рассмотрим приложение Demo Lookup рис. Во втором компоненте при перемещении по записям набора данных отображается имя покупателя, оформившего текущий заказ.

Главная форма проекта DemoLookup. Ключевые свойства компонента настроены следующим образом. Свойство Listsource указывает на компонент custsource типа TDataSource , который связан с набором данных синхронного просмотра custTable.

Свойство ListFieid указывает на поле company, все значения которого доступны в списке компонента. Свойство KeyField указывает на поле custNo, которое имеется в двух таблицах и по которому осуществляется связь. Рассмотрим основные свойства и методы самих компонентов отображения данных, за исключением тех, которые представлены в табл. Компонент представляет собой список значений поля синхронного просмотра для поля, заданного свойством DataField, из набора данных DataSource.

Его основное назначение — автоматически устанавливать соответствие между полями двух наборов данных по одинаковому значению заданного поля исходной таблицы и ключевого поля таблицы синхронного просмотра. В списке синхронного просмотра отображаются возможные значения для редактирования поля основной таблицы. По своим функциональным возможностям компонент совпадает с компонентом TDBListBox. Компонент представляет собой комбинированный список значений поля синхронного просмотра для поля, заданного свойством DataField, из набора данных DataSource.

По своим функциональным возможностям компонент совпадает с компонентом TDBComboBox. Для представления данных из некоторого набора данных в виде графиков различных видов предназначен компонент TDBChart табл. В нем можно одновременно показывать графики для нескольких полей данных.

Графики строятся на основе всех имеющихся в наборе данных значений полей. Функционально компонент ничем не отличается от компонента TChart. Настройка параметров компонента осуществляется специальным редактором, который можно открыть двойным щелчком на перенесенном на форму компоненте. Здесь мы не будем подробно останавливаться на богатейших изобразительных возможностях этого компонента, рассмотрим только процесс подключения к нему набора данных и построение графиков.

Основой любого графика в компоненте TDBChart является так называемая серия, свойства которой представлены классом Tchartseries.

Для того чтобы построить график значений некоторого поля набора данных, необходимо. Создать новую серию и определить ее тип. Задать для серии набор данных. Связать с осями координат нужные поля набора данных и, в зависимости от типа серии, задать дополнительные параметры. Редактор имеет две главные страницы — Chart и Series. Страница Chart содержит многостраничный блокнот и предназначена для настройки параметров самого графика. Страница Series также содержит многостраничный блокнот и используется для настройки серий значений данных.

Для создания новой серии необходимо в редакторе перейти на главную страницу Chart, а на ней открыть страницу Series рис.

На этой странице нужно щелкнуть на кнопке Add , а затем в появившемся диалоге выбрать тип серии. После этого в списке на странице Series появляется строка новой серии.

Здесь можно переопределить тип, цвет и видимость серии, щелкнув на соответствующей зоне строки. Все остальные страницы блокнота на главной странице Chart предназначены для настройки параметров графика. Теперь необходимо перейти на главную страницу Series и на ней из списка названий серий выбрать необходимую.

После этого на странице Data Source из списка выбирается строка DataSet. Далее в появившемся списке DataSet выбирается нужный набор данных. Специализированный редактор компонента TDBChart. Список X позволяет выбрать поле набора данных, значения которого будут последовательно откладываться по оси абсцисс.

Список Y позволяет выбрать поле набора данных, значения которого будут отложены по оси ординат. Соответствие между значениями полей по двум осям определяется принадлежностью к одной записи набора данных. Выбор поля в списке Labels привязывает его значения в виде меток к оси абсцисс. Здесь описан набор элементов управления для линейного типа серии. Для других типов элементы управления могут отличаться.

Теперь осталось только открыть набор данных и компонент TDBChart построит график. Аналогичным образом на этот же компонент можно поместить и другие графики. Свойства и методы компонента TDBChart. Разрешает или запрещает обновление данных в серии при открытии связанного набора данных. Задает временной интервал в секундах между обновлениями данных в сериях из связанных наборов данных. Разрешает показ курсора "песочные часы" при обновлении данных.

Обновляет данные в сериях. Проверяет, связан ли набор данных AComponent с серией ASeries. В случае успеха проверки возвращает True. Обновляет данные во всех сериях. Считывает все записи в наборе данных AdataSet и переносит их в серию ASeries. Вызывается при переносе данных из отдельной записи набора данных в серию. Компоненты отображения данных играют важную роль при создании интерфейсов приложений баз данных.

Разнообразие предлагаемых элементов управления позволяет решать любые задачи по организации взаимодействия пользователя с базой данных. Все они взаимодействуют с набором данных через компонент TDataSource. Связываемый с компонентом компонент TDataSource.

TColumn 1 of object; property OnCellClick: TGridDrawState of object; property OnDrawDataCell: TColumn of object; property OnTitleClick: Шрифт данных в колонке.

Общие свойства компонентов отображения данных.

Если вы часто печатаете фотографии и уже утомились менять картриджи в своем принтере, обратите внимание на МФУ Epson L Текущая позиция в двумерной структуре данных может быть определена свойствами SelectedField, SelectedRows, Selectedlndex.