Редактирование графических полей

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

Для этого у нас есть кнопка sbOpenImage и диалоговое окно OpenPictureDialog1. Назначение или замена картинки производится щелчком на кнопке. При этом вызывается окно графического диалога для выбора файла с картинкой формата jpeg. Если такой файл выбран, то картинка вставляется из него в поле Graphic таблицы. Для кнопки создадим всплывающую подсказку (свойство Hint кнопки) с текстом Добавить картинку. Чтобы подсказка появлялась при наведении курсора на кнопку, установим ее свойство ShowHint (показывать подсказку) в true.

Дважды щелкните на кнопке sbOpenImage и создайте событие для щелчка на кнопке. Перед ним разместите вспомогательную процедуру передачи содержимого файла в Bitmap (растровое изображение картинки):

procedure JPEGtoBMP(FileName: TFileName; var Bmp: TBitmap);
// процедура передачи содержимого графического файла в объект Bitmap
var jpg:TJPEGImage;
begin
jpg:=TJPEGImage.Create; // создание JPEG-картинки в памяти
jpg.CompressionQuality:=100; // качество сжатия
jpg.Compress; // сжать
jpg.LoadFromFile(FileName); // загрузка изображения из указанного файла
Bmp.Assign(jpg); // передача изображения из JPEG в Bitmap
FreeAndNil(jpg); // освобождение памяти, занятой JPEG
end;

Текст обработчика события для щелчка на кнопке:

procedure TForm1.sbOpenImageClick(Sender: TObject);
var FileName: TFileName;
Bmp: TBitmap;
begin
if Table1.Active then // если таблица открыта, то
if Table1.RecordCount > 0 then // если в таблице есть записи, то
if OpenPictureDialog1. Execute then // если файл картинки выбран, то
begin

if not (Table1.State in [dsEdit]) then Table1.Edit; // перевод таблицы в режим редактирования
FileName:= OpenPictureDialog1.FileName; // имя файла с картинкой
Bmp:= TBitmap.Create; // создаем Bitmap в памяти
try
JPEGtoBMP(FileName, Bmp); // передача картинки из файла в Bitmap
Table1Graphic.Assign(Bmp); // передача картинки из Bitmap в поле Graphic
FreeAndNil(bmp); // освободить память Bitmap
except // в случае исключительной ситуции делать:
ShowMessage('Не удалось загрузить картинку.');
FreeAndNil(bmp); // освободить память Bitmap
end;
end;
end;

Суть этого программного кода ясна из комментариев к каждому оператору. Добавим лишь, что поле Graphic хранит картинку в формате BMP (простейший растровый формат), поэтому нам потребовалась дополнительная процедура конвертации картинки из формата JPEG в формат BMP.

После ввода картинки в поле Graphic можно изменения сохранить или отменить при помощи соответствующих кнопок навигатора.

Указанным способом в таблицу ведена запись о новой рыбке Барбус. Вид окна с этой записью приведен на рис. 4.7.

Рис. 4.7. В таблицу добавлена новая запись с данными по рыбке Барбус

Для того чтобы убрать картинку из записи добавим новую кнопку с типом SpeedButton с именем sbClearImage. Для нее создадим всплывающую подсказку (свойство Hint кнопки) с текстом Удалить картинку. Чтобы подсказка появлялась при наведении курсора на кнопку, установим ее свойство ShowHint (показывать подсказку) в true.

Двойным щелчком на это кнопке создадим событие для очистки картинки:

procedure TForm1.sbClearImageClick(Sender: TObject);
begin
if Table1.Active then
if Table1.RecordCount > 0 then
begin
if not (Table1.State in [dsEdit]) then Table1.Edit;
DBImage1.Picture:= Nil; // освобождение памяти, занятой картинкой
end;
end;

Вид окна, с удаленной картинкой и новой кнопкой показан на рис. 4.8.

Рис. 4.8. Из записи о рыбке Барбус удалена картинка

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

Теперь наша программа умеет делать все намеченные процедуры.

2.5. Автономизация приложения


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: