Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






СОЗДАНИЕ ПРИЛОЖЕНИЯ, РАБОТАЮЩЕГО С БАЗОЙ ДАННЫХ

 

Выбор типа пользовательского интерфейса

Перед созданием интерфейса приложения необходимо решить, какой тип пользовательского интерфейса выбрать: однодокументный или многодокументный.

Однодокументный интерфейс (SDI) применяется, когда все дочерние окна выполняют разнородные функции, слабо связаны между собой и их положение на экране относительно главного окна несущественно. Примерами SDI-приложений являются среда разработки Delphi, Проводник Windows и т. д.

Многодокументный интерфейс (MDI) применяется, когда большинство операций приложения выполняется в пределах рабочей области главного окна приложения, и все дочерние окна предназначены для выполнения подобных операций или содержат однотипную информацию. Примерами MDI-приложений являются Microsoft Word, Microsoft Excel, утилита SQL Builder из состава Delphi и т. д.

В большинстве случаев предпочтение следует отдавать интерфейсу SDI. Интерфейс MDI предназначен для очень узкого круга приложений. Кроме того, следует отметить, что Microsoft не поощряет разработку новых приложений MDI (для Windows было написано слишком много плохих программ этого типа).

Основными операциями нашего приложения будут:

· регистрация новых заказчиков;

· просмотр и редактирование справочника выпускаемой продукции;

· оформление отгрузки продукции;

· учет оплаты отгруженной продукции;

· получение информации о недооплате.

Операции из этого перечня с функциональной точки зрения слабо связаны между собой. Они обращаются к одной БД и взаимодействуют через данные, но оформление отгрузки напрямую никак не помешает просмотру справочника выпускаемой продукции, а получение отчета о недооплате не повлияет на процесс регистрации новых договоров, при условии, что эти операции не будут выполняться одновременно в одном приложении. Положение рабочих форм относительно главной формы также несущественно.

Исходя из сказанного, выберем для нашего приложения однодокументный интерфейс.

 

Создание главной формы

 
 

В рамках однодокументного интерфейса главная форма приложения для работы с БД может быть чисто функциональной (содержать только панель инструментов) или комбинированной (содержать панель инструментов и информационную панель). Предпочтительнее оформить главное окно приложения в виде панели инструментов, содержащей кнопки по числу основных выполняемых операций. Главное окно приложения показано на рис. 31.

Рис. 31. Главное окно приложения

 

Щелчок на первых четырех кнопках приведет к появлению соответствующих рабочих форм. Щелчком на кнопке Help вызывается справочник по работе с приложением. Щелчок на кнопке Close закрывает главное окно.

Заготовка главной формы автоматически появляется при создании нового проекта. Напомним, что модуль главной формы был ранее сохранен нами под именем fmMainUnit (см. п. 4.2). Изменим некоторые свойства главной формы следующим образом:

Caption = ‘Сбыт готовой продукции’ Heght = 100

Name = FMain Width = 281

BorderStyle = bsSingle BorderIcons.biMaximize = False

Для главного окна приложения наиболее подходящий стиль – BorderStyle = bsSingle с исключением из доступных кнопки развернуть (BorderIcons.biMaximize = False). Это позволит пользователю сворачивать и восстанавливать окно, но не даст возможности развернуть окно на весь экран или изменить размер окна.

Так как все действия в приложении выполняются через главную форму, необходимо, чтобы она была доступна в любой момент времени. Для этого укажем в методе-обработчике события OnShow нулевые координаты верхнего левого угла формы:

procedure TFMain.FormShow(Sender: TObject);

begin

FMain.Left:=0; FMain.Top:=0;

end;

Разместим на форме компонент Panel1, установим свойство Align = alClient и очистим свойство Caption. Расположим на панели шесть кнопок:

Button1 (Caption = ‘Изделия’) Button2 (Caption = ‘Заказчики’)

Button3 (Caption = ‘ТТН’) Button4 (Caption = ‘ПТР’)

BitBtn1 (Kind = bkHelp) BitBtn2 (Kind = bkClose)

Разместим на форме компонент PopupMenu1. В свойстве PopupMenu формы FMain выберем PopupMenu1.

Свяжем модуль главного окна с модулем данных dmSaleUnit командой File > Use Unit. Сохраним все сделанные в проекте изменения.

 

Создание рабочих форм

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

· показ формы как обычного окна;

· показ формы как модального окна.

В первом случае можно произвольным образом переключаться между рабочими формами и главной формой. Такой подход не дает пользователю сосредоточиться на конкретном действии и позволяет, не закончив работу в одном окне, выполнять новые действия в другом окне.

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

В обычных прикладных программах вспомогательные окна используются для создания диалоговых окон, из которых нельзя переключаться на другие окна приложения, пока они не будут закрыты. Такой режим работы окна называется модальным. При этом переключаться на любые другие приложения Windows можно без ограничений.

В нашем приложении желательно, чтобы во время работы пользователя с одной формой нельзя было получить доступ к какой-либо другой операции, так как это может привести к искажению данных. Поэтому рабочие формы необходимо сделать модальными.

К оформлению модальных окон предъявляется набор негласных, но практически не имеющих исключений требований:

1. Диалоговое окно не должно позволять менять свои размеры (в свойстве BorderStyle выбирается значение, не допускающее изменения размера).

2. Свойство BorderWidth определяет область, на которой не разрешается размещать элементы управления. Для этого свойства следует задать подходящее значение (например, 2), так как диалоговые окна имеют достаточно широкие границы.

 

Создадим новую рабочую форму «Изделия» командой File > New > Form. Сохраним модуль этой формы под именем fmIzdUnit и добавим его в проект Sale командой Project > Add to Project. Изменим некоторые свойства формы:

Caption = ‘Изделия’ BorderStyle = bsDialog

Name = FIzd BorderWidth = 2

Height = 210 Width = 395

Разместим на форме компонент Panel1 (Align = alBottom, Caption = ‘ ‘). Расположим на панели компонент DBNavigator1 и кнопку BitBtn1 (Kind = bkClose). В оставшейся свободной части формы разместим компонент Panel2 (Align = alClient, Caption = ‘ ‘). На этой панели расположим компонент DBGrid1 (Align = alClient).

Командой File > Use Unit свяжем модуль fmIzdUnit с модулем данных dmSaleUnit. Сохраним все сделанные изменения. Для компонента DBGrid1 раскроем список свойств DataSource и выберем DM.SourceIzd. Сетка наполнится данными из НД Izdelie. Для компонента DBNavigator1 в списке свойств DataSource также выберем DM.SourceIzd.

Создадим объекты-столбцы для сетки DBGrid1 – дважды щелкнув мышью на сетке, вызовем редактор столбцов и в его контекстном меню выберем команду Add All Fields (Добавить все поля). Далее редактируем свойства каждого столбца в отдельности. Вид выравнивания значений в столбце зададим, обратившись к свойству Alignment, параметры заголовка зададим, раскрыв свойство Caption.

 
 

Вид окна после всех сделанных изменений показан на рис. 32.

Рис. 32. Рабочее окно «Изделия»

 

Внесем необходимые изменения в главную форму. Командой File > Use Unit добавим модуль fmIzdUnit в раздел implementation модуля fmMainUnit. Создадим обработчик события OnClick для кнопки Button1 главной формы.

procedure TFMain.Button1Click(Sender: TObject);

begin

FIzd.ShowModal;

end;

ВНИМАНИЕ! Метод ShowModal вызывает форму в модальном режиме.

Создадим новую рабочую форму «Заказчики» командой File > New > Form. Сохраним модуль этой формы под именем fmZakUnit и добавим его в проект Sale командой Project > Add to Project. Изменим некоторые свойства формы:

Caption = ‘Заказчики’ BorderStyle = bsDialog

Name = FZak BorderWidth = 2

Height = 210 Width = 395

Разместим на форме компонент Panel1 (Align = alBottom, Caption = ‘ ‘). Расположим на панели компонент DBNavigator1 и кнопку BitBtn1 (Kind = bkClose). В оставшейся свободной части формы разместим компонент Panel2 (Align = alClient, Caption = ‘ ‘). На этой панели расположим компонент DBGrid1 (Align = alClient).

Командой File > Use Unit свяжем модуль fmZakUnit с модулем данных dmSaleUnit. Сохраним все сделанные изменения. Для компонента DBGrid1 раскроем список свойств DataSource и выберем DM.SourceZak. Сетка наполнится данными из НД Zakazcik. Для компонента DBNavigator1 в списке свойств DataSource также выберем DM.SourceZak.

 
 

Создадим объекты-столбцы для сетки DBGrid1. Вид окна после всех сделанных изменений показан на рис. 33.

Рис. 33. Рабочее окно «Заказчики»

 

Внесем необходимые изменения в главную форму. Командой File > Use Unit добавим модуль fmZakUnit в раздел implementation модуля fmMainUnit. Создадим обработчик события OnClick для кнопки Button2 главной формы.

procedure TFMain.Button2Click(Sender: TObject);

begin

FZak.ShowModal;

end;

Создадим рабочую форму «Обработка накладных» командой File > New > Form. Сохраним модуль этой формы под именем fmObrNakUnit и добавим его в проект Sale командой Project > Add to Project. Изменим некоторые свойства формы:

Caption = ‘Обработка накладных’ BorderStyle = bsDialog

Name = FObrNak BorderWidth = 2

Height = 375 Width = 520

Разместим на форме компонент Panel1 (Align = alBottom, Caption = ‘ ‘). Расположим на панели компонент DBNavigator1 и кнопку BitBtn1 (Kind = bkClose). В оставшейся свободной части формы разместим компонент Panel2 (Align = alBottom, Caption = ‘ ‘).

Чтобы пользователь мог во время работы менять высоту этой панели, поместим на пустую часть формы вешку разбивки Splitter1 (Align = alBottom, Beveled = True, Height = 5). На свободную часть формы выше панели Panel2 положим компонент Panel3 (Align = alClient, Caption = ‘ ‘). На панели Panel3 расположим компонент DBGrid1 (Align = alClient). На панели Panel2 расположим компонент DBGrid2 (Align = alClient).

Поскольку нам придется создавать для формы контекстное меню, разместим на ней компонент PopupMenu1. В свойстве PopupMenu формы FObrNak выберем PopupMenu1.

Командой File > Use Unit свяжем модуль fmObrNakUnit с модулем данных dmSaleUnit. Сохраним все сделанные изменения.

Для компонента DBGrid1 раскроем список свойств DataSource и выберем DM.SourceNak. Сетка наполнится данными из НД Naklad. Для компонента DBGrid2 раскроем список свойств DataSource и выберем DM.SourceSna. Сетка наполнится данными из НД Snakl. Для компонента DBNavigator1 в списке свойств DataSource выберем DM.SourceNak.

Создадим объекты-столбцы для сетки DBGrid1 – дважды щелкнув мышью на сетке, вызовем редактор столбцов и в его контекстном меню выберем команду Add (Добавить). В свойстве FieldName выберем NNom.

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

Создадим объекты-столбцы для сетки DBGrid2 – дважды щелкнув мышью на сетке, вызовем редактор столбцов и в его контекстном меню выберем команду Add (Добавить). В свойстве FieldName выберем SnNNom. Последовательно добавим все остальные поля, кроме SnIKod. Одновременно редактируем вид выравнивания значений и параметры заголовка для каждого столбца в отдельности.

Вид окна после всех сделанных изменений показан на рис. 34.

Внесем необходимые изменения в главную форму. Командой File > Use Unit добавим модуль fmObrNakUnit в раздел implementation модуля fmMainUnit. Создадим обработчик события OnClick для кнопки Button3 главной формы.

procedure TFMain.Button3Click(Sender: TObject);

begin

FObrNak.ShowModal;

end;

 
 

Рис. 34. Рабочее окно «Обработка накладных»

 

Создадим новую рабочую форму «Обработка платежных требований» командой File > New > Form. Сохраним модуль этой формы под именем fmObrPlatUnit и добавим его в проект Sale командой Project > Add to Project. Изменим некоторые свойства формы:

Caption = ‘Обработка платежных требований’ BorderStyle = bsDialog

Name = FObrPlat BorderWidth = 2

Height = 375 Width = 562

Разместим на форме компонент Panel1 (Align = alBottom, Caption = ‘ ‘). Расположим на панели компонент DBNavigator1 и кнопку BitBtn1 (Kind = bkClose). В оставшейся свободной части формы разместим компонент Panel2 (Align = alBottom, Caption = ‘ ‘). Чтобы пользователь мог во время работы менять высоту этой панели, поместим на пустую часть формы вешку разбивки Splitter1 (Align = alBottom, Beveled = True, Height = 5). На свободную часть формы выше панели Panel2 положим компонент Panel3 (Align = alClient, Caption = ‘ ‘). На панели Panel3 расположим компонент DBGrid1 (Align = alClient). На панели Panel2 расположим компонент DBGrid2 (Align = alClient). Поскольку нам придется создавать для формы контекстное меню, разместим на ней компонент PopupMenu1. В свойстве PopupMenu формы FObrPlat выберем PopupMenu1.

Командой File > Use Unit свяжем модуль fmObrPlatUnit с модулем данных dmSaleUnit. Сохраним все сделанные изменения. Для компонента DBGrid1 раскроем список свойств DataSource и выберем DM.SourcePla. Сетка наполнится данными из НД Plateg. Для компонента DBGrid2 раскроем список свойств DataSource и выберем DM.SourceSpl. Сетка наполнится данными из НД Splatl. Для компонента DBNavigator1 в списке свойств DataSource выберем DM.SourcePla.

Создадим объекты-столбцы для сетки DBGrid1 – дважды щелкнув мышью на сетке, вызовем редактор столбцов и в его контекстном меню выберем команду Add (Добавить). В свойстве FieldName выберем PNom. Последовательно добавим все остальные поля, кроме PZKod. Одновременно редактируем вид выравнивания значений и параметры заголовка для каждого столбца в отдельности.

Создадим объекты-столбцы для сетки DBGrid2 – дважды щелкнув мышью на сетке, вызовем редактор столбцов и в его контекстном меню выберем команду Add (Добавить). В свойстве FieldName выберем SpPNom. Последовательно добавим все остальные поля, кроме SpIKod и SpZKod. Одновременно редактируем вид выравнивания значений и параметры заголовка для каждого столбца в отдельности.

 
 

Вид окна после всех сделанных изменений показан на рис. 35.

Рис. 35. Рабочее окно «Обработка платежных требований»

 

Внесем необходимые изменения в главную форму. Командой File > Use Unit добавим модуль fmObrPlatUnit в раздел implementation модуля fmMainUnit. Создадим обработчик события OnClick для кнопки Button4 главной формы.

procedure TFMain.Button4Click(Sender: TObject);

begin

FObrPlat.ShowModal;

end;

Отдельно рассмотрим процесс закрытия главной формы. Чтобы все внесенные в таблицы изменения были сохранены в БД, эти таблицы по окончании работы необходимо закрыть. У каждого класса, описывающего НД в Delphi, имеется для этого метод Close. Создадим следующий обработчик события OnClick для кнопки BitBtn2:

procedure TFMain.BitBtn2Click(Sender: TObject);

begin

DM.Izdelie.Close; DM.Zakazcik.Close DM.Naklad.Close;

DM.Snakl.Close; DM.Plateg.Close; DM.Splat.Close;

end;

Если на этом этапе выполнить прогон программы, то можно заметить, что сетки DBGrid на рабочих формах «Обработка накладных» и «Обработка платежных требований» попарно связаны друг с другом. При перемещении указателя текущей записи в верхней сетке автоматически меняется содержимое нижней сетки.

 

Последнее изменение этой страницы: 2016-08-28

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...