Отладка программы в Delphi

База данных "Архитектурные памятники СанктПетербурга"



Листинг 17.1. База данных "Архитектурные памятники Санкт-Петербурга"

unit peter_;
interface

uses

Windows, Messages, SysUtils,

Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls,

DBCtrls, Mask, Db, DBTables,
jpeg; // чтобы можно было выводить JPG-иллюстрации;

type


TForml = class(TForm)

Tablel: TTable; . // база данных — таблица

DataSourcel: TDataSource; // источник данных для полей

// редактирования-просмотра

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

DBEditl: TDBEdit;

DBEdit2: TDBEdit;

DBMemo1: TDBMemo;

Image1: ТImage;

DBEdit3: TDBEdit;

DBNavigatorl: TDBNavigator;

Label4: TLabel;

procedure TablelAfterScroll(DataSet: TDataSet);

procedure DBEdit3KeyPress(Sender: TObject; var Key: Char);

procedure DBNavigatorlClick(Sender: TObject; Button: TNavigateBtn)

procedure TablelBeforeOpen(DataSet: TDataSet);

private

{ Private declarations }
public

{ Public declarations }
end;

var

Forml: TForml;

BmpPath: string; // Путь к файлам иллюстраций. Иллюстрации

// находятся в подкаталоге Data каталога программы.

implementation

($R *.DFM}

// выводит фотографию в поле Imagel
procedure ShowFoto(foto: string);

begin
try

Forml.Imagel.Picture.LoadFromFile(BmpPath+foto);

Forml.Imagel.Visible:=True;
except

on EFOpenError do
begin

MessageDlg('Файл иллюстрации '+foto+' не найден.',

mtlnformation, [mbOk], 0) ;
end;
end;
end;

// переход к другой записи (следующей, предыдущей,
// первой или последней)

procedure TForm1.TablelAfterScroll(DataSet: TDataSet);

begin.

if form1.DBEdit3.Visible then
begin

form1.DBEditS.Visible := False;
form1.Label4.Visible:=False;
end;
if
Forml.DBEditS.Text <>
"

then ShowFoto(Form1.DBEditS.Text)
else form1.Imagel.Visible:=False;
end;

// нажатие клавиши в поле Фото

procedure TForml.DBEdit3KeyPress(Sender: TObject; var Key: Char);

begin

if (key = #13) then

if Forml.DBEdit3.Text <>
''

then ShowFoto(Forml.DBEdit3.Text) // показать иллюстрацию
else forml,Imagel.Visible:=False;
end;

// щелчок на компоненте Навигатор

procedure TForml.DBNavigatorlClick(Sender: TObject; Button:
TNavigateBtn);

begin

case Button of
nblnsert: begin

Imagel.Visible:=False;// скрыть область вывода иллюстрации
DBEdit3.Visible:=True; // показать поле Фото
Label4.Visible:=True; // показать метку Фото
end;
nbEdit: begin // редактирование записи

DBEdit3.Visible:=True; // показать поле Фото
Label4.Visible:=True; // показать метку Фото
end;

end;

end;

// перед открытием таблицы

procedure TForml.TablelBeforeOpen(DataSet: TDataSet);

begin

BmpPath:=ExtractFilePath(ParamStr(0))+'data\';
end;

end.

end.

Вызов процедуры вывода фотографии (showFoto) во время просмотра базы данных выполняет процедура TForm1.Table1AfterScroll, которая обеспечивает обработку события AfterScrool для компонента Table1. Событие AfterScrool происходит всякий раз после перехода к другой (следующей, предыдущей, первой, последней) записи таблицы как результат щелчка пользователя на соответствующей кнопке компонента DBNavigator. Процедура TForml.Table1AfterScroll анализирует содержимое поля (photo) Form1.DBEdit3.Text и, если оно не пустое, что свидетельствует о наличии ссылки на файл фотографии, выводит иллюстрацию.

При просмотре базы данных поле имени файла иллюстрации (DBEdits) и его заголовок (Label4) на форме не отображаются. Если пользователь нажимает одну из кнопок компонента DBNavigator, то как результат обработки события onclick вызывается процедура TForm1.DBNavigatorlciick, которая при щелчке кнопки Добавить или Редактировать делает доступным поле DBEdits, тем самым позволяя пользователю ввести или изменить имя файла иллюстрации.

Процедура TForm1.DBEdit3KeyPress обрабатывает событие OnKeyPress для компонента DBEdits. Если пользователь ввел в поле Edits (photo) имя файла иллюстрации и нажал клавишу <Enter>
(ее код равен 13), то процедура TForm1.DBEdit3KeyPress выводит иллюстрацию путем вызова процедуры ShowFoto.



Содержание раздела