ЛР_8 (1076760), страница 4
Текст из файла (страница 4)
С
войство Компонент
DBEdit1 DBEdit2 DBEdit3 DBMemo1
DataSource DataSource1 DataSource1 DataSource1 DataSource1
DataField Monument Architect Photo Note
Так как значению свойства Active компонента Tablel присвоено значение True, то сразу после того, как будет присвоено значение свойству DataField, в поле компонента DBEdit появится содержимое соответствующего поля первой записи таблицы базы данных. Если таблица не содержит данных, поле остается незаполненным. Если значение свойства Active компонента Table1 равно False, то в поле компонента DBEdit появляется его имя, значение свойства Name.
Кроме компонентов просмотра-редактирования полей базы данных, в форму нужно добавить компонент Image, который используется для просмотра иллюстраций, и четыре компонента Label для вывода пояснительного текста. Свойству Visible компонентов Image1, Label4 и DBEdit3 следует присвоить значение False.
Теперь, если откомпилировать и запустить программу, на экране появится форма, в полях которой будет находиться содержимое первой записи файла данных.
Для того чтобы иметь возможность просматривать другие записи файла данных, в форму приложения нужно добавить компонент DBNavigator, значок которого находится на вкладке Data Controls (рис. 17). Компонент DBNavigator (рис. 18) представляет собой набор кнопок, при щелчках на которых во время работы программы происходит перемещение указателя текущей записи к следующей, предыдущей, первой или последней записи базы данных, а также добавление к файлу данных новой записи, удаление текущей записи.
Рис. 17. Значок компонента DBNavigator находится на вкладке Data Controls
Рис.18. Компонент DBNavigator
Табл. 12 содержит описания действий, которые выполняются в результате щелчка на
соответствующей кнопке компонента DBNavigator.
Таблица 12. Кнопки компонента DBNavigator
Кнопка Обозначение Действие
К первой nbFirst Указатель текущей записи перемещается к первой записи файла
данных
К предыдущей nbPrior Указатель текущей записи перемещается к предыдущей записи
файла данных
К следующей nbNext Указатель текущей записи перемещается к следующей записи
файла данных
К последней nbLast Указатель текущей записи перемещается к последней записи
файла данных
Добавить nblnsert В файл данных добавляется новая
запись
Удалить nbDelete Удаляется текущая запись файла данных
Редактирование nbEdit Устанавливает режим редактирования текущей записи
Сохранить nbPost Изменения, внесенные в текущую запись, записываются в файл
данных
Отменить Cancel Отменяет внесенные в текущую запись изменения
Обновить nbRefresh Записывает внесенные изменения в файл
Свойства компонента DBNavigator перечислены в табл. 13.
Таблица 13. Свойства компонента DBNavigator
Свойство Определяет
N
ame Имя компонента. Используется для доступа к свойствам компонента
DataSource Имя компонента, являющегося источником данных. В качестве источника данных
может выступать база данных (компонент Database), таблица (компонент Table) или
результат выполнения запроса (компонент Query)
VisibleButtons Видимые командные кнопки
Следует обратить внимание на свойство VisibleButtons. Оно позволяет скрыть некоторые кнопки компонента DBNavigator и тем самым запретить выполнение соответствующих операций
над файлом данных. Запретите удаление записей, присвоив значение False СВОЙСТВУ VisibleButtons.nbDelete.
На рис. 19 приведен вид формы приложения Архитектурные памятники Санкт-Петербурга после добавления компонента DBNavigator. Свойству DataSource компонента DBNavigator1 следует присвоить значение DataSource1 (компонент DataSource1 связан с Table1).
Рис. 19. Окончательный вид формы приложения Архитектурные памятники Санкт-Петербурга
В принципе, после добавления в форму компонента DBNavigator простейшая программа управления базой данных готова. Эта программа обеспечивает просмотр, редактирование, добавление новых и удаление ненужных записей.
Теперь рассмотрим, что надо сделать, чтобы во время просмотра в поле Image1 автоматически появлялись фотографии памятников, а компоненты DBEdit3 и Label4 были бы не видны, а во время добавления информации в базу данных пользователь мог бы вводить в поле photo имя файла фотографии.
Такой алгоритм работы с фотографиями можно реализовать следующим образом. При просмотре базы данных поле имени файла иллюстрации (DBEdit3) и его заголовок (Label4) на форме не отображаются. Если пользователь нажимает одну из кнопок компонента DBNavigator, то как результат обработки события OnClick вызывается процедура TForml.DBNavigatorlClick, которая, если были нажаты кнопки Добавить или Редактировать, делает видимым поле DBEdit3, тем самым позволяя пользователю ввести или изменить имя файла иллюстрации.
Разрабатываемое приложение предполагает, что изображения (фотографии) архитектурных памятников находятся в подкаталоге Data каталога, в котором размещена программа работы с базой данных. Имя этого каталога можно определить во время работы программы путем обращения к функциям Paramstr(0) и ExtractFilePatch. Значение первой — полное имя выполняемого файла программы, второй — путь к этому файлу (удаляет имя файла из Paramstr(0)). Это уместно сделать при активации таблицы (процедура Table1BeforeOpen).
В листинге 1 приведен текст модуля программы Архитектурные памятники Санкт-Петербурга.
unit peter_;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, DBCtrls, Mask, Db, DBTables,
jpeg; // чтобы можно было выводить jpg иллюстрации
type
TForm1 = class(TForm)
Table1: TTable; // база данных - таблица
DataSource1: TDataSource; // источник данных для полей редактирования-просмотра
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBMemo1: TDBMemo;
Image1: TImage;
DBEdit3: TDBEdit;
DBNavigator1: TDBNavigator;
Label4: TLabel;
procedure Table1AfterScroll(DataSet: TDataSet);
procedure DBEdit3KeyPress(Sender: TObject; var Key: Char);
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
procedure Table1BeforeOpen(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
BmpPath: string; // Путь к файлам иллюстраций. Иллюстрации
// находятся в подкаталоге Data каталога программы.
implementation
{$R *.DFM}
// выводит фотографию в поле Image1
procedure ShowFoto(foto: string);
begin
try
Form1.Image1.Picture.LoadFromFile(BmpPath+foto);
Form1.Image1.Visible:=True;
except
on EFOpenError do
begin
MessageDlg('Файл иллюстрации '+foto+' не найден.', mtInformation, [mbOk], 0);
end;
end;
end;
// переход к другой записи (следующей, предыдущей, первой или последней)
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
if form1.DBEdit3.Visible
then
begin
form1.DBEdit3.Visible := False;
form1.Label4.Visible:=False;
end;
if Form1.DBEdit3.Text <> ''
then ShowFoto(Form1.DBEdit3.Text)
else form1.Image1.Visible:=False;
end;
// нажатие клавиши в поле Фото
procedure TForm1.DBEdit3KeyPress(Sender: TObject; var Key: Char);
begin
if (key = #13) then
if Form1.DBEdit3.Text <> ''
then ShowFoto(Form1.DBEdit3.Text) // показать иллюстрацию
else form1.Image1.Visible:=False;
end;
// щелчок на компоненте Навигатор
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
case Button of
nbInsert: begin
Image1.Visible:=False; // скрыть область вывода иллюстрации
DBEdit3.Visible:=True; // показать поле Фото
Label4.Visible:=True; // показать метку Фото
end;
nbEdit: begin // редактирование записи
DBEdit3.Visible:=True; // показать поле Фото
Label4.Visible:=True; // показать метку Фото
end;
end;
end;
//перед открытием таблицы
procedure TForm1.Table1BeforeOpen(DataSet: TDataSet);
begin
BmpPath:=ExtractFilePath(ParamStr(0))+'data\';
end;
end.
Вызов процедуры вывода фотографии (ShowFoto) во время просмотра базы данных выполняет процедура TForml.Table1AfterScroll, которая обеспечивает обработку события AfterScroll для компонента Table1. Событие AfterScroll происходит всякий раз после перехода к другой (следующей, предыдущей, первой, последней) записи таблицы как результат щелчка пользователя на соответствующей кнопке компонента DBNavigator. Процедура TForm1.TabielAfterScroll анализирует содержимое поля (photo) Form1.DBEdit3.Text и, если оно не пустое, что свидетельствует о наличии ссылки на файл фотографии, выводит иллюстрацию.
При просмотре базы данных поле имени файла иллюстрации (DBEdit3) и его заголовок (Label4) на форме не отображаются. Если пользователь нажимает одну из кнопок компонента DBNavigator, то как результат обработки события OnClick вызывается процедура TForml.DBNavigatorlClick, которая при щелчке кнопки Добавить или Редактировать делает доступным поле DBEdit3, тем самым позволяя пользователю ввести или изменить имя файла иллюстрации.
Процедура TForm1.DBEdit3KeyPress обрабатывает событие OnKeyPress для компонента DBEdit3. Если пользователь ввел в поле Edit3 (photo) имя файла иллюстрации и нажал клавишу <Enter> (ее код равен 13), то процедура TFormi.DBEdit3KeyPress выводит иллюстрацию путем вызова процедуры ShowFoto.















