|
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Редактирование графических полей
Одно из полей таблицы является графическим. Оно предназначено для хранения картинки того биологического объекта, который представлен в текущей записи таблице. Мы должны научить программу вставлять такие картинки в данное поле и при необходимости заменять их. Для этого у нас есть кнопка 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; Нарушение авторского права страницы