Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Никулина М.В. Обработка данных в среде СУБД......doc
Скачиваний:
7
Добавлен:
01.04.2025
Размер:
6.04 Mб
Скачать

Тема 2. Создание многостраничных форм

Многостраничными называются формы, состоящие более чем из одного экрана (страницы). Многостраничность формы обеспечивается размещением на форме в режиме конструктора объекта типа PageFrame (контейнера вкладок), состоящего из набора отдельных страниц (Page1, Page2, Page3 и т. д.):

Таблица 4

Характерные свойства контейнера вкладок и самих вкладок

Название

объекта

Название

свойства

Назначение свойства

Page Frame

Height

Left

PageCount

Количество страниц

Top

Width

Page

BackColor

Цвет фона

Caption

Заголовок

FontBold

Жирный шрифт

FontName

Название шрифта

FontSize

Размер шрифта

ForeColor

Цвет символов шрифта

PageOrder

Номер вкладки (порядок размещения в контейнере)

Picture

Файл рисунка, используемого в качестве фона

Доступ в режиме конструктора к вкладкам в объекте PageFrame осуществляется с помощью команды Edit, вызываемой из контекстного меню, либо выбором в окне свойств Properties в списке объектов формы нужной страницы (Page).

В процессе работы с многостраничной формой при переходе от одной вкладки к другой могут (должны) выполняться различные события (действия). Эти действия для той или иной страницы описываются соответствующими командами в процедуре Activate – активизация вкладки.

Пример разработки и проектирования многостраничной формы по работе флота на освоении перевозок грузов

Постановка задачи

Необходимо разработать сложную (двухстраничную) форму, связанную с отображением информации о назначении судов на плановые грузопотоки (первая страница) и позволяющую дать оценку освоения объемов перевозок грузов назначенными судами (вторая страница). Название формы – «Работа флота».

Первая вкладка формы – «Разработка схемы работы флота» - должна содержать сведения, достаточные для принятия решения по назначению имеющихся на балансе судоходной компании грузовых судов на запланированные грузопотоки. К таким сведениям, кроме собственно корреспонденции грузопотоков (таблица «Перевозки»), относятся:

– данные о наличии судов на перевозках, их специализации и районах плавания, определяемых классом речного Регистра;

– информация о загрузках судов по родам грузов и направлениям перевозок;

– нормативы грузового обслуживания судов в портах и нормы времени следования между пунктами грузовой обработки;

– договора на перевозки.

На основе этой информации каждое конкретное судно назначается на определенный грузопоток; оцениваются показатели его работы на этом грузопотоке.

Для реализации поставленной задачи в структуру таблицы «Перевозки» добавим поля, в которых будет накапливаться информация об освоении объемов перевозок (поле Освоено) и неосвоенных остатках (поле Остаток):

Name

Type

Width

Decimal

Освоено

Numeric

6

1

Остаток

Numeric

6

1

В составе БД «Грузовые перевозки» разработаем две новые таблицы: «Суда» (наличие судов на перевозках) и «Круговые рейсы» (укрупненные нормативы выполнения всех операций транспортного процесса):

Рис. 5. Пример заполнения данными таблицы «Суда»

Рис. 6. Пример заполнения данными таблицы «Круговые рейсы»

Таким образом, среда окружения (Data Environment) формы «Работа флота» представлена следующими таблицами:

Рис. 7. Вид окна команды Data Environment для формы «Работа флота»

Вид окна конструктора формы «Работа флота» для первой вкладки «Разработка схемы работы флота» приведен на рис. 8, а.

В верхней части окна вкладки с помощью полей ввода и переключателей представлены сведения по каждому судну из таблицы «Суда». Кнопка Расчет и корректировка нормативов вызывает на экран таблицу «Круговые рейсы», в которую можно вносить все необходимые коррективы нормативов, после чего в таблице заполняется значениями поле Т_кр – продолжительность круговых рейсов, которая для всех записей рассчитывается по выражению:

Т_кр = (Время_погр + Время_выгр + Хг +Хп) / 24.

(1)

С помощью кнопки Просмотр грузопотоков… на экран вызывается таблица, в которой выдается список грузопотоков, соответствующих специализации текущего судна. Этот список выдается из таблицы «Перевозки», отфильтрованной по полю Груз.

Исходя из района плавания судна (класс Регистра) и географического расположения пунктов отправления и назначения грузопотоков, для судна выбирается грузопоток, на котором оно будет работать. Закрепление судна за грузопотоком означает, что в таблице «Суда» в поле Номер_дог запоминается номер соответствующего договора перевозки. Выбор номера договора осуществляется с помощью раскрывающегося списка, содержащего номера всех договоров из таблицы «Договора».

Исходя из продолжительности периода предъявления груза к перевозке (поле Период из таблицы «Перевозки») и длительности кругового рейса на выбранном грузопотоке (поле Т_кр из таблицы «Круговые рейсы»), для назначаемого судна рассчитывается число отправлений, которое оно сможет выполнить за время его эксплуатации на заданном грузопотоке:

Число_отпр = Round (Период / Т_кр).

(2)

Здесь Round () – функция округления до целого числа результата вычисления.

Далее рассчитывается объем перевозок, осваиваемый этим судном, заполняется поле Объем_пер:

Объем_пер = (Число_отпр * Qе) / 1000.

(3)

Названные действия реализуются при щелчке левой клавишей мыши на кнопке Расчет числа отправлений на линии.

Кнопкой Просмотр назначений судов выдаются сведения из таблицы «Суда» с заполненными полями номер_дог, число_отпр, объем_пер.

Особенности вкладки «Разработка схемы работы флота»: объекты 11, 12, 13 (см. рис. 8, а) появляются на экране (активизируются) только после нажатия кнопки 10 и убираются с экрана при выборе каждого очередного судна с помощью кнопок перемещения по записям таблицы «Суда» (объект 16). Еще одна особенность работы с первой вкладкой, - если из списка «Выбор № договора» (объект № 13) выбирается договор с номером 99999, то текущее судно освобождается от всех предыдущих обязательств и готово к новым назначениям.

а)

б)

в)

Рис. 8. Виды формы «Работа флота» на первой вкладке «Разработка схемы работы флота»

а) в режиме конструктора;

б) при запуске и после перемещения по записям таблицы «Суда»;

в) после активизации кнопки «Просмотр грузопотоков…»

Как видно из рис. 7, в процессе работы с формой происходит обращение к различным таблицам. Выбор нужной таблицы реализуется командой SELECT, с помощью которой осуществляется переход в рабочую область с этой таблицей.

В процессе работы с формой с объектами формы происходят различные события.

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

Ниже перечислены все возможные события для объектов разрабатываемой формы.

Название события

Тип

объектов

Момент

наступления события

Load

Form (форма)

При загрузке формы

Activate

Page (вкладка)

Выбор вкладки щелчком левой клавиши мыши на ее заголовке

Click

Command

(кнопка управления)

При щелчке по кнопке левой клавишей мыши или нажатии клавиши Enter

LostFocus

ComboBox

(раскрывающийся

список)

При перемещении указателя мыши (фокуса) с объекта (после выбора из списка некоторого значения)

GotFocus

ComboBox

(раскрывающийся

список)

При наведении указателя мыши (фокуса) на объект

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

ТекущаяФорма.ИмяОбъекта.НазваниеСвойства = Значение

Например:

Свойство

Пояснение

Thisform.Label1.Caption=’Судно’

Определяется заголовок объекта типа

«Надпись»

Thisform.Grid1.Visible=.F.

Определяется невозможность отображения объекта типа «Таблица» на экране

Если в форме имеется объект-контейнер Вкладки (Pageframe), содержащий набор вкладок (страниц), на которых размещаются все остальные объекты формы, то определение свойств этих объектов реализуется по схеме:

ТекущаяФорма.Вкладка.№страницыВкладки.ИмяОбъекта.НазваниеСвойства=Значение

Например:

Свойство

Пояснение

thisform.pageframe1.page2.grid1.visible=.f.

Определяется невозможность отображения на экране объекта типа Grid (таблица), размещенного на второй вкладке в текущей форме

thisform.pageframe1.page2.check1.value=1

Объект флажок, размещенный на второй вкладке в текущей форме, переводится в состояние «включено»

При описании подобных длинных имен объектов для определения их свойств удобно пользоваться командами:

WITH имена_родительских_объектов

.имя_объекта.название_свойства=значение

ENDWITH

Например:

with thisform.pageframe1.page2

.check1.value=1

.command2.visible=.t. .spinner1.visible=.t.

.spinner1.value=0

endwith

Для объектов,

размещенных на второй вкладке формы, определяются значения соответствующих свойств

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

ThisForm.Refresh