Delphi. Data Controls — компоненты доступа к БД (теория2)

В прошлом посте посмотрели как подключиться с помощью технологии DBExpress, и, также как рассмотрели компоненты DataSource и DBGrid. В данном посте продолжим рассмотрение различных компонентов Delphi. Во многом, я пользовался книгой Д. Осипова Базы данных и Delphi.


 

Статический текст — компонент TDBText

Элемент управления TDBText предназначен только для отображения текущего
значения поля и не имеет абсолютно никаких навыков редактирования связанных с
ним данных. Компонент является прямым потомком класса TCustomLabel, от которого также берет начало обычная текстовая метка TLabel. Для подключения компонента к набору данных достаточно выполнить стандартные операции определения источника данных (свойство DataSource) и указать, какое именно поле нас интересует (свойство DataField).

Для обеспечения автоподстройки размеров компонента при выводе текста с
различным количеством символов установите в true свойство
property AutoSize: Boolean;

Если текстовые данные настолько необъятны, что никак не желают помещаться
в одну строку, следует перевести в true свойство
property WordWrap: Boolean;//по умолчанию false
В этом случае элемент управления самым “чудесным” образом вспомнит про
свои навыки вывода информации в несколько строк.


 

Строка ввода — компонент TDBEdit

Компонент класса TDBEdit представляет собой строку ввода, способную не
только отображать, но и редактировать текущее значение поля. Предок элемента
управления — класс TCustomMaskEdit (кстати, на его же основе построена строка
ввода с маской TMaskEdit).
Если вы имеете опыт программирования в Delphi, то я уверен, что все базовые
свойства и методы строки ввода вам уже известны. Кроме классических для всех
элементов управления, работающих с БД, свойств: DataSource и DataField при
работе с TDBEdit вам могут пригодиться еще несколько свойств и методов.

Доступ к тексту предоставляет свойство
property Text: TMaskedText;

Запрет на редактирование текста накладывает свойство
property ReadOnly: Boolean;
при установке его в true.

Установить предел на максимальное число символов, вводимых в компонент,
можно с помощью свойства
property MaxLength: Integer;

По умолчанию в свойстве установлено нулевое значение, т. е. длина строки не
ограничена.

Если планируется применение потомка класса TCustomEdit для ввода конфиденциальной информации (например, пароль доступа) и пользователь программного обеспечения не хочет знакомить с ними случайного прохожего, заглянувшего в монитор, то для скрытия вводимого текста рекомендуется воспользоваться свойством
property PasswordChar: Char;

Если значение свойства отличается от символа с кодом ноль (#0), то при отображении содержимого строки реальные символы будут подменяться символом из
PasswordChar.
Из достаточно большого перечня событий компонента TDBEdit для программиста БД крайне полезно событие, возникающее в момент нажатия клавиши клавиатуры:

property OnKeyPress: TKeyPressEvent;
TKeyPressEvent = procedure (Sender: TObject; var Key: Char) of object;
Благодаря параметру Key (в котором передается код выбранного пользователем
символа) событие позволяет создавать “передовую линию обороны”, обеспечивающую корректность данных, передаваемых в БД. Допустим, что строка ввода
предназначена для ввода в поле семизначного номера телефона, тогда можно предложить следующий вариант обработки события


Многострочный редактор — TDBMemo

Основой многострочного текстового редактора служит абстрактный класс
TCustomMemo. Непосредственно элемент управления TDBMemo спроектирован для
работы с текстовыми полями больших размеров или с BLOB-полями, специализи-
рующимися на хранении неформатированных текстовых данных.
Многострочный редактор представляет собой симбиоз оконного элемента
управления и класса TStrings, инкапсулированного в компонент и доступного бла-
годаря свойству
property Lines: TStrings;
Именно свойство Lines и позволяет хранить многострочные текстовые данные.
Если элемент управления TDBMemo подключен к BLOB-полю, то программист
может определить порядок загрузки данных из таблицы в компонент при помощи
свойства
property AutoDisplay: Boolean; //по умолчанию true
Если оно установлено в true, то обновление строк в компоненте осуществляет-
ся автоматически после каждого изменения данных в поле, например, при переходе
к следующей строке в наборе данных. Если в свойстве содержится значение false,
то вместо реальных данных компонент будет отображать название поля. Отказ от
автоматического режима загрузки BLOB-данных в редактор TDBMemo несколько ус-
коряет процесс вывода данных, т. к. мы освобождаемся от необходимости обработ-
ки достаточно большого массива информации при открытии набора данных и пе-
ремещении по его записям. Но в последнем случае каждый раз при необходимости
загрузить данные в элемент управления, потребуется вызов метода
procedure LoadMemo; virtual;
Во всем остальном элемент управления практически повторяет своего колле-
гу — стандартный текстовый редактор TMemo.


Редактор расширенного формата TDBRichEdit

Создав многострочный текстовый редактор, позволяющий обрабатывать тек-
стовые данные в полях BLOB, разработчики Delphi не смогли остановиться и “по
инерции” решили аналогичную задачу для текстовых данных, представленных в
расширенном текстовом формате (Rich-text Format, RTF). Тем более что для это-
го была создана превосходная база — класс TCustomRichEdit.
Кроме работы с форматированным текстом, никаких принципиальных особен-
ностей у TDBRichEdit нет. Если вы применяли родственный компонент TRichEdit,
то с легкостью справитесь и с его более “продвинутым” коллегой.


Изображение — компонент TDBImage

Элемент TDBImage специализируется на обработке графических данных, содер-
жащихся в BLOB-полях. Несмотря на сильную схожесть с обычным компонентом
TImage, у них разные предки. Если предтечей классического TImage служит класс
TGraphicControl, то ближайший родственник нашего нового знакомого —
TCustomControl. Однако, по крайней мере, для сохранения видимости преемствен-
ности в классе TDBImage вновь реализованы практически все одноименные с TImage
свойства и методы для работы с изображениями. И точно так же интегрировано
ключевое свойство
property Picture: TPicture;
инкапсулирующее “золотой” минимум возможностей для работы с растровой графикой и метафайлами.

Для ускорения работы с BLOB-полями в элементе управления объявлено свойство
property AutoDisplay: Boolean;
задача которого аналогична функции одноименного поля компонента TDBMemo —
включение/отключение автозагрузки данных из поля. Если свойство установлено в
false, то для инициализации процесса загрузки изображения в компонент вызывают метод
procedure LoadPicture;
Также упомяну о существовании свойств Center и Stretch, соответственно центрующих и растягивающих изображение.


Список — TDBListBox

Список TDBListBox — ближайший родственник обычного списка TListBox.
Элемент управления позволяет пользователю передавать в поле таблицы одно из
заранее подготовленных текстовых значений. Перечень допустимых значений хранится в свойстве
property Items : TStrings;
Заполнение списка строк может осуществляться как в период разработки проекта во встроенном редакторе, так и во время работы приложения. В последнем случае все определяется знаниями программиста. Он может научить элемент управления загружать справочные данные из текстового файла, из таблицы или вводить их вручную — кому как больше нравится. Единственное условие для этого — знание возможностей класса TStrings

5


Комбинированный список — TDBComboBox

Комбинированный список выбора TDBComboBox обладает всеми чертами классического списка выбора TComboBox. Компонент (точно так же, как и рассмотренный ранее список TDBListBox) призван помочь пользователю выбрать определенное значение из заранее подготовленного списка и передать его в поле таблицы.
Работа с компонентами TDBComboBox и TDBListBox практически ничем не отличается. Текущее значение поля, связанного с компонентом, отображается в строке редактирования элемента управления. Список значений содержится в свойстве Items, индекс текущего значения — в ItemIndex.


Группа переключателей — TDBRadioGroup

Компонент TDBRadioGroup реализует группу переключателей, состояние кото-
рых определяется значением текущего поля присоединенного набора данных. Од-
новременно может быть отмечена только одна из кнопок группы. При выборе
пользователем кнопки, связанное с ним значение передается в базу данных. Бли-
жайший родственник рассматриваемого элемента управления — обычный компо-
нент TRadioGroup.
Список заголовков кнопок определяется содержимым свойства Items:
property Items: TStrings;
Перечень возможных значений в свою очередь определяется свойством
property Values: TStrings;
Оба свойства доступны во время как разработки, так и выполнения программы

Текущее значение связанного поля мы можем выяснить из свойства
property Value: String;
Индекс выбранной кнопки в группе находится в свойстве
property ItemIndex: Integer;


Флажок — TDBCheckBox

Элемент управления TDBCheckBox позволяет пользователю обслуживать поля
логического типа — выбирать или отказываться от выбора какого-то значения. Хотя флажок нацелен на взаимодействие с полями данных типа Boolean, его также можно научить передавать в базу текстовые значения. Для этого предназначены
свойства
property ValueChecked: String; //значение на включение флажка
property ValueUnchecked: String;//значение на отключение флажка
по умолчанию содержащие текст “True” и “False” соответственно. Теперь, если в
присоединенном к компоненту текстовом поле базы данных обнаруживается значение True, то этот факт найдет свое отражение — в виде “галочки” на поверхности элемента. Значение False, наоборот, прогонит всех “галок”.

Компонент способен отслеживать одновременно несколько значений, но тогда их нужно разделять точкой с запятой:
DBCheckBox1.ValueChecked := ‘Да;Вкл’;
DBCheckBox1.ValueUnchecked := ‘Нет;Выкл’;
В заключение упомяну два свойства (унаследованные от класса
TCustomCheckBox), позволяющие как проверять текущее состояние элемента управ-
ления, так и включать/отключать флажок:
property Checked: Boolean;
и
type TCheckBoxState = (cbUnchecked, cbChecked, cbGrayed);
property State: TCheckBoxState;
Причем последнее свойство позволяет контролировать и третье неактивное со-
стояние, возвращая значение cbGrayed.


Компонент — TDBCtrlGrid

Класс TDBCtrlGrid — единственный компонент страницы Data Controls среды программирования Delphi, название которого не поддается дословному переводу.
Если за корень названия принять слово “grid” (англ. сетка) и на этом основании сделать вывод о функциональном назначении компонента, то можно серьезно ошибиться, т. к. сетку элемент управления напоминает весьма отдаленно.

Косвенным доказательством этому утверждению послужит иерархия наследования — непосредственный предок компонента класс TWinControl, не имеющий о сетках VCL даже поверхностного представления. Корректнее говорить о TDBCtrlGrid, как о наборе динамически создаваемых панелей. Как и все элементы управления, пред назначенные для работы с набором данных, рассматриваемый компонент требует подключения к источнику данных DataSource. После открытия связанного с ним набора данных компонент самостоятельно создает несколько панелей.

Каждая панель ассоциируется с отдельной записью набора. А теперь главная черта
TDBCtrlGrid — этот элемент управления может являться владельцем других ком-
понентов, предназначенных для работы с данными, и не только их. Например, в
период разработки проекта на поверхности TDBCtrlGrid программист имеет право
разместить строки ввода TDBEdit и поясняющие текстовые метки TLabel. После
запуска приложения наша “сетка” самым “чудесным” образом размножит доверенные ей элементы управления.

This entry was posted in DBExpress, Delphi. Bookmark the permalink.