Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Редактирование графических полей
Одно из полей таблицы является графическим. Оно предназначено для хранения картинки того биологического объекта, который представлен в текущей записи таблице. Мы должны научить программу вставлять такие картинки в данное поле и при необходимости заменять их. Для этого у нас есть кнопка sbOpenImage и диалоговое окно OpenPictureDialog1. Назначение или замена картинки производится щелчком на кнопке. При этом вызывается окно графического диалога для выбора файла с картинкой формата jpeg. Если такой файл выбран, то картинка вставляется из него в поле Graphic таблицы. Для кнопки создадим всплывающую подсказку (свойство Hint кнопки) с текстом Добавить картинку. Чтобы подсказка появлялась при наведении курсора на кнопку, установим ее свойство ShowHint (показывать подсказку) в true. Дважды щелкните на кнопке sbOpenImage и создайте событие для щелчка на кнопке. Перед ним разместите вспомогательную процедуру передачи содержимого файла в Bitmap (растровое изображение картинки): procedure JPEGtoBMP(FileName: TFileName; var Bmp: TBitmap); Текст обработчика события для щелчка на кнопке: procedure TForm1.sbOpenImageClick(Sender: TObject); Суть этого программного кода ясна из комментариев к каждому оператору. Добавим лишь, что поле Graphic хранит картинку в формате BMP (простейший растровый формат), поэтому нам потребовалась дополнительная процедура конвертации картинки из формата JPEG в формат BMP. После ввода картинки в поле Graphic можно изменения сохранить или отменить при помощи соответствующих кнопок навигатора. Указанным способом в таблицу ведена запись о новой рыбке Барбус. Вид окна с этой записью приведен на рис. 4.7. Рис. 4.7. В таблицу добавлена новая запись с данными по рыбке Барбус Для того чтобы убрать картинку из записи добавим новую кнопку с типом SpeedButton с именем sbClearImage. Для нее создадим всплывающую подсказку (свойство Hint кнопки) с текстом Удалить картинку. Чтобы подсказка появлялась при наведении курсора на кнопку, установим ее свойство ShowHint (показывать подсказку) в true. Двойным щелчком на это кнопке создадим событие для очистки картинки: procedure TForm1.sbClearImageClick(Sender: TObject); Вид окна, с удаленной картинкой и новой кнопкой показан на рис. 4.8. Рис. 4.8. Из записи о рыбке Барбус удалена картинка На новой кнопке размещен Glyph с картинкой в виде красного крестика. Находящийся под ней объект, предназначенный для показа картинки пуст. Навигатор содержит активную кнопку отмены выполненной операции по удалению картинки и активную кнопку сохранению произведенных изменений, давая пользователю возможность выполнить требуемое действие. Теперь наша программа умеет делать все намеченные процедуры.
Автономизация приложения Об открытии БД Не следует открывать таблицу в режиме DesignTime, то есть при написании программы в Delphi (ее можно временно открывать там лишь при отладке программы). В готовой программе таблица должна быть закрыта. Таблицу нужно открывать программно в работающей программе, то есть в режиме RunTime. Причем запускать программу следует не из Delphi, а при помощи ярлыка программы или в проводнике двойным щелчком на файле Biolife2. exe, то есть также, как запускаются и всякие другие программы. Наше приложение обладает одним существенным недостатком - оно способно работать лишь на том компьютере, где имеется БД с алиасом DbBiolife2. То есть если скопировать папку Biolife2 на флешку и с нее запустить программу на другом компьютере, то программа не найдет БД DbBiolife2, а следовательно, откажется работать. То есть наша программа пока полностью зависима от БД DbBiolife2. Сейчас мы сделаем программу независимой, автономной. Идея автономизации программы заключается в том, что папка db с базой данных находится в той же папке, что и программа Biolife2. exe. Следовательно, если определить папку, в которой находится эта программа, то легко определить и папку с базой данных. Составим функцию логического типа, которая возвратит true, если ей удалось найти папку БД, файл таблицы и открыть её. Не исключено также, что на компьютере может отсутствовать BDE ( Borland Database Engine ) - движок работы с БД типа Paradox. Если на компьютере установлена Delphi, то на нем установлен и BDE (он устанавливается вместе с Delphi ). Если Delphi на компьютере отсутствует, то для работы нашей программы BDE можно установить отдельно. Поэтому кроме проверки наличия БД, надо еще и проверять наличие BDE. Наличие BDE можно проверить функцией function BDEInstalled: Boolean; Текст функции TableActivate с комментариями приведен ниже function TableActivate: boolean; Далее надо решить вопрос о том, когда нужно обращаться к этой функции. Лучше всего это сделать тогда, когда после запуска программы форма Form1 становится активной. Для этого создадим для формы Form1 событие OnActivate: procedure TForm1.FormActivate(Sender: TObject); Теперь при активации формы если БД не удалось открыть, будет выдано соответствующее сообщение. Если же таблица найдена, то она без дополнительных сообщений откроется и будет готова к работе. О закрытии приложения Поскольку в начале своей работы программа открывает таблицу БД Table1, то при завершении работы программа должна эту таблицу закрыть. Следует сказать, что изменения, которые происходят с таблицей во время работы программы, находятся в оперативной памяти, то есть на диске в файле таблицы находятся старые данные, в то время как в оперативной памяти в таблице могут произойти изменения. Поэтому время от времени эти изменения следует фиксировать в файле biolifes. db. Можно это делать всякий раз, когда срабатывает событие AfterPost (после фиксации изменений) таблицы Table1, а можно и один раз, когда происходит выход из программы. Сброс данных из таблицы в файл производите методом FlushBuffers. Следовательно, перед закрытием таблицы, необходимо сбросить данные из Table1 в файл biolifes. db, иначе они будут потеряны. На этом основании можно составить программный код обработки таблицы при закрытии формы, когда срабатывает событие формы OnClose: procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); Сервисные улучшения Популярное:
|
Последнее изменение этой страницы: 2016-06-04; Просмотров: 592; Нарушение авторского права страницы