Для визуализации больших текстовых
фрагментов используются компоненты
Memo
(
,
страница Standard,
компонент визуализирует только текст)
и RichEdit
(
,
страница Win32,
визуализируется текст в обогащенном
формате rtf).
Memo – многострочный текстовый редактор, позволяющий редактировать текст окна, в которое можно вводить множество строк. Формат всего текста одинаков и определяется свойством Font. Свойство Lines, доступное как во время проектирования, так и во время выполнения, имеет множество свойств и методов типа TStrings, которые обычно используются для формирования и редактирования текста. Весь текст содержится в свойстве Text.
Окно редактирования снабжено многими функциями, свойственными большинству редакторов. Например, в нем предусмотрены типичные комбинации "горячих" клавиш: Ctrl+C – копирование выделенного текста в буфер обмена Clipboard (команда Copy), Ctrl+X – вырезание выделенного текста в буфер Clipboard (команда Cut), Ctrl+V – вставка текста из буфера обмена в позицию курсора (команда Paste), Ctrl+Z – отмена последней команды редактирования.
Компонент RichEdit представляет собой многофункциональное средство редактирования текстов, позволяющее работать с обогащенным rtf-форматом, т.е. выбирать различные атрибуты форматирования для разных фрагментов текста. В этом основное отличие RichEdit от подобного, но более простого компонента Memo.
Для изменения атрибутов вновь вводимого фрагмента текста задается свойство SelAttributes, которое в свою очередь имеет подсвойства: Color (цвет), Name (имя шрифта), Size (размер), Style (стиль) и ряд других. Например, если приложение имеет компонент RichEdit1 и диалог выбора шрифта FontDialog1, то следующий код позволит менять атрибуты вновь вводимого или выделенного текста:
if FontDialog1.Execute then
with RichEdit1.SelAttributes do begin
Color:=FontDialog1.Font.Color;
Name :=FontDialog1.Font.Name;
Size :=FontDialog1.Font.Size;
Style:=FontDialog1.Font.Style;
end;
RichEdit1.SetFocus;
Приведенный код можно сократить, воспользовавшись тем, что объекты SelAttributes и Font совместимы по типу.
if FontDialog1.Execute then
RichEdit1.SelAttributes.Assign(FontDialog1.Font);
RichEdit1.SetFocus;
В компоненте имеется также свойство DefAttributes, содержащее атрибуты по умолчанию.
За выравнивание, отступы и т.д. в пределах текущего абзаца отвечает свойство Paragraph типа TParaAttributes. Этот тип в свою очередь имеет ряд свойств:
Alignment – определяет выравнивание текста;
FirstIndent – число пикселей отступа красной строки;
Numbering – управляет вставкой маркеров, как в списках;
LeftIndent – отступ в пикселях от левого поля;
RightIndent – отступ в пикселях от правого поля;
TabCount – количество позиций табуляции;
Tab – значения позиций табуляции в пикселях.
Значения подсвойств свойства Paragraph можно задавать только в процессе выполнения приложения. Значения подсвойств свойства Paragraph относятся к тому абзацу, в котором находится курсор. Например, каждый из следующих операторов осуществит соответственное выравнивание:
RichEdit1.Paragraph.Alignment:=taLeftJustify; // влево
RichEdit1.Paragraph.Alignment:=taCenter; // по центру
RichEdit1.Paragraph.Alignment:=taRightJustify;// вправо
Следующий оператор приведет к тому, что текущий абзац будет отображаться как список, т.е. с маркерами:
RichEdit1.Paragraph.Numbering:=nsBullet;
Уничтожение списка в текущем абзаце осуществляется оператором
RichEdit1.Paragraph.Numbering:=nsNone;
Отметим, что компонент RichEdit также позволяет работать с графикой и OLE-объектами.
Более сложными элементами интерфейса являются компоненты визуализации структурированных данных, которые позволяют отображать данные в виде дерева, списков, таблиц, значков (пиктограмм).
Одним из таких компонентов является
ListView
(
,
страница Win32),
который позволяет отображать данные в
виде списков, таблиц, крупных и мелких
пиктограмм в стиле интуитивно понятного
интерфейса Windows.
Стиль отображения информации определяется свойством ViewStyle, которое может устанавливаться в процессе проектирования или программно во время выполнения. Основное свойство компонента, описывающее состав отображаемой информации – Items. Во время проектирования оно может быть установлено специальным редактором в окне Инспектора Объектов. В нем можно вводить новые узлы и дочерние узлы. Смысл дочерних узлов – это информация, которая появляется только в режиме vsReport (в виде таблицы). Для каждого нового узла можно указать ряд свойств. Свойство Caption – надпись, появляющаяся около пиктограммы (для дочерних узлов это свойство соответствует надписи, появляющейся в ячейках таблицы в соответствующем режиме). Свойство ImageIndex определяет индекс пиктограммы. Индексы соответствуют спискам изображений, хранящихся в отдельных компонентах TImageList, на которые указывают свойства LargeImages (для режима vsIcon) и SmallImages (для режимов vsSmallIcon, vsList и vsReport). Свойство узла StateIndex позволяет добавить вторую пиктограмму в данный объект для его дополнительной характеристики. Индекс соответствует списку изображений, хранящихся в отдельном компоненте ImageList, указанном в свойстве StateImages класса TListView.
Свойство Columns определяет список заголовков таблицы в режиме vsReport при свойстве ShowColumnHeaders (показать заголовки), установленном в true. Свойство Checkboxes определяет отображение индикатора с флажком около каждого элемента списка. Индикаторы можно устанавливать программно или их может изменять пользователь во время выполнения. Определить установку индикатора в некотором элементе Items[i] можно проверкой его свойства Checked. Свойства HotTrack и HotTrackStyles определяют появление выделения при перемещении курсора над элементом списка и стиль этого выделения. Свойство HoverTime задает в миллисекундах задержку появления такого выделения. Свойство списка Selected определяет выделенный пользователем элемент списка. Свойство DragMode определяет режим перетаскивания элементов списка.
Метод Arrange позволяет упорядочить пиктограммы в режимах vsIcon и vsSmallIcon. Упорядочивание пиктограмм происходит в пределах той области, в которой они находятся. Способ упорядочивания определяется соответствующим заданием свойства SortType, определяющего характер сортировки.
Компонент TreeView
(
,
страница Win32)
представляет собой окно для отображения
иерархических данных в виде дерева, в
котором пользователь может выбрать
нужный ему узел или узлы. Иерархическая
информация может быть самой разной –
структура некоторого предприятия,
структура документации учреждения,
структура отчета и т.п. С каждым узлом
дерева могут быть связаны некоторые
данные.
Основным свойством класса TTreeView, содержащим информацию об узлах дерева, является индексированный список узлов Items. Каждый узел является объектом типа TTree-Nodes, обладающим своими свойствами и методами, которые позволяют эффективно изменять внешний вид компонента и перестраивать дерево во время выполнения приложения.
Во время проектирования формирование дерева осуществляется в специальном редакторе узлов. Для каждого нового узла дерева можно указать ряд свойств: Text – надпись, появляющаяся в дереве около данного узла, ImageIndex и SelectedIndex – индексы пиктограмм, отображаемых для узла, который соответственно не выделен и выделен пользователем в данный момент (индексы соответствуют списку изображений, хранящихся в компоненте ImageList, на который указывает свойство Images класса TTreeView). Свойство узла StateIndex позволяет добавить вторую пиктограмму в данный узел, не зависящую от состояния узла, которая может служить дополнительной характеристикой узла. Свойство StateIndex соответствует списку изображений отдельного компонента ImageList (свойство StateImages).
Для отображения табличных данных
используются компоненты DrawGrid
(таблица, ячейки которой содержат
графические изображения –
,
страница Additional)
и, если таблица должна содержать текстовую
или текстовую и графическую информацию,
то следует использовать компонент
StringGrid
(
,
страница Additional).
Основные свойства, доступные во время выполнения:
Cells – строка, содержащаяся в ячейке с заданными индексами столбца и строки,
Cols и Rows – списки строк, содержащихся соответственно в столбце или в строке с заданным индексом,
Objects – объект, связанный со строкой, содержащейся в ячейке с заданными индексами столбца и строки.
Таблица может иметь полосы прокрутки (свойство ScrollBars), причем полосы прокрутки появляются и исчезают автоматически в зависимости от того, помещается таблица в соответствующий размер или нет. Заданное число первых строк и столбцов может быть фиксированным и не прокручиваться. Таким образом, можно задать заголовки столбцов и строк, постоянно присутствующие в окне компонента. Свойства ColCount и RowCount определяют соответственно число столбцов и строк, свойства FixedCols и FixedRows – число фиксированных столбцов и строк. Цвет фона фиксированных ячеек определяется свойством FixedColor. Свойства LeftCol и TopRow определяют соответственно индексы первого видимого на экране в данный момент прокручиваемого столбца и первой видимой прокручиваемой строки.
Свойство Options является множеством, определяющим многие свойства таблицы: наличие разделительных вертикальных и горизонтальных линий в фиксированных (goFixedVertLine и goFixedHorzLine) и не фиксированных (goVertLine и goHorzLine) ячейках, возможность для пользователя изменять с помощью мыши размеры столбцов и строк (goColSizing и goRowSizing), перемещать столбцы и строки (goColMoving и goRowMoving) и многое другое. Важным элементом в свойстве Options является goEditing – возможность редактировать содержимое таблицы.
Для отображения изображений компонент имеет свойство Canvas (некоторую область для рисования – канву). Имеется метод CellRect, возвращающий область канвы, отведенную под ячейку с заданными индексами столбца и строки.
Использование баз данных (БД) является одним из приоритетных направлений развития прикладного ПО. Среда Delphi всегда отличалась богатыми возможностями по поддержке механизмов доступа к базам данных и многоуровневым распределенным системам.
Изначально доступ к БД в Delphi обеспечивался процессором баз данных BDE (Borland Database Engine). Обращение к базам данных производится с помощью специальных компонентов, использующих функции BDE, обеспечивая доступ как к локальным, так и к распределенным БД. Взаимодействие осуществляется через драйверы. В поставку Delphi включены стандартные драйверы для работы с локальными базами данных dBase, Paradox и FoxPro, а также с SQL-серверами Oracle, Informix, Sybase, DB2 и InterBase. Кроме того, имеется возможность подключения любых драйверов ODBC.
Начиная с пятой версии, в Delphi добавлен новый механизм доступа к данным с использованием технологии ADO (ActiveX Data Objects), разработанной и поддерживаемой фирмой Microsoft и реализующей стандарт обращения этой фирмы к реляционным базам данных. Технология ADO аналогична BDE по назначению и довольно близка по возможностям.
При работе с базами данных удобно использовать специальные модули данных. Они представляют собой контейнеры, в которые можно помещать невизуальные компоненты доступа к данным. Новый модуль данных создается с помощью команды главного меню File | New, после чего из депозитария выбирается объект Data Module. При этом открывается окно редактора модуля данных, содержащее закладки Components и Data Diagram. Закладка Components предназначена для размещения компонентов доступа к данным. На странице Data Diagram отображается диаграмма связей между используемыми компонентами, которые можно проектировать визуально, а также сопровождать их комментариями. Для использования модуля данных он должен быть объявлен в разделе uses модуля проектируемого приложения.
Любое приложение, работающее с БД, должно обеспечивать ряд типовых функциональных возможностей:
подключение к базе данных;
считывание информации из таблиц этой БД;
редактирование данных;
навигацию по набору данных.
Набор данных представляет собой двумерную таблицу. Строки таблицы называются записями, а столбцы – полями.
Таблицы БД не загружаются в память полностью из-за их большого размера. Загружаются только значения полей, относящиеся к какой-либо записи таблицы. Запись, значения полей которой загружены в память, называется текущей записью. Перемещение по набору данных означает загрузку в выделенную для хранения текущей записи память новых значений полей из таблицы данных. С текущей записью связано понятие курсора набора данных, который представляет собой объект, содержащий значения текущей записи и инкапсулирующий методы, позволяющие загружать новые записи и при этом сохранять изменения, занесенные в текущую запись.
Для отображения и редактирования данных в VCL реализован ряд компонентов, специально ориентированных на работу с базами данных. Например, для организации доступа к БД используются следующие компоненты:
для доступа к таблицам
локальных баз данных и управление ими
– Table
(
,
страница BDE
палитры компонентов), ADOTable
(
,
страница ADO);
компоненты Query
(
,
страница BDE)
и ADOQuery
(
,
страница ADO)
используют для доступа к БД SQL-запросы,
поэтому позволяет работать как с
локальными, так и с распределенными
базами данных.