- •Часть 2
- •Введение
- •Тема 1. Определение свойств объектов формы
- •Вкладка Layout
- •Вкладка Other
- •Вкладка Data
- •Пример разработки формы и описания свойств ее объектов
- •Использование Построителя таблиц для размещения в форме объектов Grid
- •Тема 2. Создание многостраничных форм
- •Пример разработки и проектирования многостраничной формы по работе флота на освоении перевозок грузов
- •Описание объектов формы «Работа флота», размещенных на первой вкладке «Разработка схемы работы флота», их свойств и методов обработки этих объектов
- •Описание объектов второй вкладки «Оценка освоения объемов перевозок», их свойств и методов обработки этих объектов
- •Тема 3. Создание перекрестных таблиц и диаграмм
- •Создание одномерных перекрестных таблиц
- •Этапы создания одномерной перекрестной таблицы в режиме Конструктора запросов
- •Создание двумерных перекрестных таблиц с помощью Мастера запросов
- •Создание диаграмм
- •Этапы создания двумерных диаграмм на основе одномерных перекрестных таблиц
- •Этапы создания трехмерных диаграмм на основе двумерных перекрестных таблиц
- •Тема 4. Создание и использование справочных окон диалога при работе с формами
- •Messagebox (текст_сообщения [,тип_диалогового_окна [,заголовок]])
- •Тема 5. Создание отчетов в свободной форме
- •Способы создания отчетов
- •Этапы создания отчетов в свободной форме с помощью Конструктора отчетов
- •Создание многоколоночного отчета
- •Тема 6. Создание пользовательского меню
- •Создание линейки главного меню
- •Создание «горячих» клавиш (hot key)
- •Разделители элементов меню
- •Определение клавиш быстрого вызова пунктов меню
- •Пояснительное сообщение для пункта меню
- •Определение общих параметров меню
- •Генерация и запуск созданного меню на выполнение
- •Редактирование файла меню в режиме конструктора
- •Создание контекстного (всплывающего) меню
- •Описание пунктов меню
- •1. Редактирование:
- •2. Обработка информации
- •3. Печать данных
- •4. Выход
- •Тема 7. Создание проекта приложения. Управление проектом и создание приложения
- •Определение параметров проекта
- •Построение приложения
- •Тема 8. Создание web-страниц для таблиц
- •Литература
- •Оглавление
- •Обработка данных в среде субд Visual foxpro
- •Часть 2
Тема 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
