Visual FoxPro   Обзор графических пакетов 3GL   Компьютерная графика к экономической информатике   к 4GL - визуальному программированию

Программирование в VisualFoxPro 7.0

Расширенные средства ввода данных

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

  Отображение данных в форме в табличном виде

В Visual FoxPro для отображения в форме данных в табличном виде используется объект Grid (Таблица), который может помещаться в форму, как и любой другой объект интерфейса.

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

  Использование построителя

Использование построителя ускоряет размещение объекта в форме и определение его свойств. Особенно заметным это преимущество становится при создании сложных объектов, к числу которых относится объект Grid (Таблица). Рассмотрим пример размещения объекта Grid (Таблица) с помощью построителя для таблицы Customer и изучим свойства, которыми наделен данный объект.

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

  1. Откройте Проект Sales.
  2. Выберите вкладку Documents (Документы), перейдите в группу Forms (Формы), а затем нажмите кнопку New (Новый).
  3. В открывшемся диалоговом окне New Form (Новая форма) выберите опцию New Form (Новая форма). На экране открывается окно конструктора форм.
  4. Откройте окно среды окружения формы Data Environment (Среда окружения), выполнив команду Environment (Окружение) из меню View (Вид).
  5. Для добавления таблицы в окружение выполните команду контекстного меню Add (Добавить).
  6. В открывшемся диалоговом окне Add Table or View (Добавить таблицу или представление данных) выберите таблицу customer и нажмите кнопку ОК. В окне Data Environment (Среда окружения) появилась выбранная таблица. Закройте окно окружения.
  7. Нажмите кнопку Builder Lock (Закрепитель построителя) LE__i на панели инструментов Form Controls (Элементы управления формы).
  8. Выберите кнопку Grid (Таблица) И' на панели инструментов Form Controls (Элементы управления формы).
  9. Установите указатель в место предполагаемого расположения таблицы, нажмите кнопку мыши и, удерживая ее нажатой, переместите курсор по диагонали, чтобы получилась рамка требуемого размера.
  10. Запускается построитель и на экране открывается диалоговое окно Grid Builder (Построитель таблицы) (рис. 15.1), позволяющее задать основные параметры объекта Grid (Таблица).

Диалоговое окно построителя объекта Grid (Таблица) содержит четыре вкладки, используя которые вы можете настроить его параметры (табл. 15.1).

Таблица 15.1. Назначение вкладок окна Grid Builder

Вкладка Назначение
Grid Items (Элементы объекта Grid) Позволяет сформировать список полей, размещаемых в создаваемом объекте
Style (Стиль) Позволяет задать стиль отображения таблицы, выбрав один из предложенных вариантов: Professional (Профессиональный), Standard (Стандартный), Embossed (Изысканный), Ledger (Бизнес)
Layout (Расположение) Позволяет переопределить заголовки столбцов объекта Grid (Таблица) и определить тип объекта, отображаемого в столбце таблицы
Relationship (Отношения) При создании многотабличных форм позволяет определить отношения между таблицами
  1. Используя кнопки со стрелками, перенесите из списка Available fields (Имеющиеся поля) в список Selected fields (Выбранные поля) поля, которые вы хотите разместить, используя объект Grid (Таблица).
gl15-1.jpg

Рис. 15.1. Диалоговое окно Grid Builder

  1. Для задания стиля отображения данных в таблице перейдите на вкладку Style (Стиль). Используя одноименный список, выберите один из вариантов оформления таблицы (рис. 15.2).
  2. По умолчанию заголовки столбцов совпадают с именами полей таблицы, заданными в свойстве Caption (Надпись) конструктора таблиц. Чтобы переопределить заголовки столбцов объекта Grid (Таблица), перейдите на вкладку Layout (Расположение) (рис. 15.3). Она содержит создаваемый объект с реальными данными. При перемещении по столбцам таблицы в поле ввода Caption (Надпись) вкладки отображается наименование данного столбца. Для изменения наименования столбца скорректируйте имя, отображаемое в этом поле.
gl15-2.jpg

Рис. 15.2. Определение стиля объекта Grid

gl15-3.jpg

Рис. 15.3. Переопределение заголовков столбцов объекта Grid

  1. На вкладке Layout (Расположение) вы можете задать тип объекта, отображаемого в столбце. Для этого воспользуйтесь раскрывающимся списком Control type (Стиль элементов управления), содержащим перечень всех типов объектов, которые могут отображаться в столбце: Textbox, Editbox, Spinner, Checkbox и OLEBoundControl. Выберите из списка необходимое значение типа данных столбца.

Замечание

При использовании объекта Grid (Таблица) для создания многотабличных форм вы можете выбрать вкладку Relationship (Отношение) (рис. 15.4) и на ней задать ключевое поле главной таблицы и индекс подчиненной таблицы. Если вторая таблица не добавлена в окружение формы, нажмите кнопку, расположенную рядом со списком Key field in parent table (Ключевое поле в родительской таблице), и в открывшемся диалоговом окне Open (Открыть) выберите необходимую таблицу. Она будет добавлена построителем в окружение формы.

  1. После завершения определения всех параметров нажмите кнопку ОК для закрытия окна построителя.
gl15-4.jpg

Рис. 15.4. Вкладка Relationship для установки связи между таблицами

  1. Используя кнопку Label (Текстовый объект) на панели инструментов Form Controls (Элементы управления формы), разместите заголовок в форме.

  Свойства объекта Grid

Построитель — очень удобное средство для быстрого создания объекта Grid (Таблица). Однако созданный с его помощью объект требует некоторой модификации внешнего вида. С этой целью рассмотрим основные свойства, характеризующие объект Grid (Таблица).

Щелкните правой кнопкой мыши на объекте Grid (Таблица). В контекстном меню содержится команда Edit (Правка), указывающая, что объект является сложным, т. е. состоящим из нескольких входящих в него объектов.

Такими объектами являются column (Столбец), Header (Заголовок) и Text (Текст). Выделите объект Grid (Таблица) и откройте окно свойств (рис. 15.5). Созданный объект характеризуется свойствами, относящимися ко всему объекту в целом. Помимо этого, объекты column (Столбец), Header (Заголовок) и Text (Текст) обладают своими собственными свойствами.

Объекты, характеризующие столбцы таблицы, представлены в табл. 15.2.

Таблица 15.2. Назначение объектов, характеризующих столбцы таблицы

Объект Назначение
Column (Столбец) Определяет свойства, относящиеся к помещаемой в столбец информации
Header (Заголовок) Определяет свойства, характеризующие заголовок столбца
Text (Текст) Определяет свойства поля таблицы, когда на нем установлен фокус
 

gl15-6.jpg

Рис. 15.5. Окно свойств объекта Grid

Свойства, определяющие объект Grid

Сначала обратимся к основным свойствам, определяющим объект Grid (Таблица) в целом. К числу таких свойств относятся:

Свойства объекта Column

Объект column (Столбец) является составной частью объекта Grid (Таблица) и определяет информацию, выводимую в столбцах объекта Grid (Таблица).

Используя свойства объекта column (Столбец), можно задать цвет фона столбца, а также цвет выводимой информации, тип шрифта, размер, выделив тем самым наиболее важную информацию в размещенном в форме табличном объекте.

Объект column (Столбец) характеризуется следующими основными свойствами:

Свойства объекта Header

Объект Grid (Таблица) состоит из столбцов, каждый из которых имеет собственный заголовок, являющийся объектом Header (Заголовок). В Visual FoxPro заголовок каждого столбца является самостоятельным объектом. Его можно корректировать, изменяя свойства.

Свойство caption (Надпись) объекта определяет наименование заголовка столбца, а свойство Alignment (Выравнивание) задает его расположение в столбце.

Помимо этого, объект Header (Заголовок), как и объект column (Столбец), характеризуется свойствами, определяющими цвет фона, тип и размер шрифта заголовка.

Свойства объекта Text

Объект Text (Текст) определяет вид информации, выводимой в столбцах объекта Grid (Таблица), при установленном курсоре на текущую запись в столбце.

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

  Создание многотабличных форм для таблиц, имеющих отношение "один-ко-многим"

Во всех рассмотренных нами ранее примерах по созданию форм использовались связанные таблицы с отношением между ними "один-к-одному" или "многие-к-одному". При создании приложений очень часто возникает необходимость просмотра и редактирования данных, имеющих отношение "один-ко-многим". В этом случае при создании формы для отображения записей основной таблицы можно использовать поля формы или объект Grid (Таблица), а для отображения данных подчиненной таблицы — объект Grid (Таблица). Рассмотрим создание многотабличных форм с помощью мастера и конструктора форм.

Создание многотабличной формы с помощью мастера

Рассмотрим создание формы для связанных таблиц customer и Phoncust, имеющих отношение "один-ко-многим" с помощью мастера. Таблица customer содержит информацию о клиентах, таблица Phoncust — номера телефонов, по которым можно с ними связываться.

  1. Откройте проект sales.
  2. Перейдите на вкладку Documents (Документы), выберите группу Forms (Формы) и нажмите кнопку New (Новый).
  3. В открывшемся диалоговом окне New Form (Новая форма) выберите опцию Form Wizard (Мастер формы).
gl15-7.jpg

Рис. 15,6. Диалоговое окно для выбора мастера многотабличной формы

  1. На экране открывается диалоговое окно, предназначенное для выбора мастера создания формы (рис. 15.6). Поскольку мы создаем форму для связанных таблиц, выберите опцию One-to-Many Form Wizard (Мастер формы с отношением "один-ко-многим") и нажмите кнопку ОК для вызова мастера многотабличной формы.
  2. В области Databases and tables (Базы данных и таблицы) выберите главную таблицу формы Customer. После выбора таблицы в списке Available fields (Имеющиеся поля) появится перечень всех полей данной таблицы. Перенесите из этого списка в список Selected fields (Выбранные поля) поля, которые вы хотите поместить в создаваемую форму из данной таблицы (рис. 15.7). Затем нажмите кнопку Next (Далее) для перехода к следующему шагу.
  3. На втором шаге работы мастера выберите подчиненную таблицу и ее поля, которые будут размещены в форме в виде объекта Grid (Таблица) (рис. 15.8). Для перехода к следующему шагу нажмите кнопку Next (Далее).
gl15-8.jpg

Рис. 15.7. Выбор полей главной таблицы

  1. На третьем шаге мастера необходимо установить связь между таблицами, используемыми в форме (рис. 15.9). В диалоговом окне размещены два раскрывающихся списка, содержащие индексы и поля исходных таблиц. В нашем примере для установления связи воспользуемся ключевым полем icdcustomer Таблицы Customer и индексом icdcustomer таблицы Phoncust. Установив связь между таблицами, нажмите кнопку Next (Далее).
  2. На четвертом шаге (рис. 15.10) необходимо установить стиль отображения объектов формы, воспользовавшись значениями из списка Style (Стиль), и тип кнопок управления, выбрав одну из опций в группе Button type (Тип кнопки). Выберите стиль, просмотрите результат выбора в верхней части диалогового окна. Затем выберите тип отображения кнопок управления (с текстовыми надписями или с изображениями). Если вы не хотите размещать кнопки в форме, установите опцию No buttons (Без кнопок). После того как вы установили требуемые параметры, нажмите кнопку Next (Далее).
gl15-9.jpg

Рис. 15.8. Выбор полей подчиненной таблицы, помещаемых в объект Grid

gl15-10.jpg

Рис. 15.9. Установка связи между таблицами

gl15-11.jpg

Рис. 15.10. Выбор стиля отображения полей и управляющих кнопок

  1. На следующем шаге формируется список полей, по которым будет осуществляться сортировка отображаемых в форме данных. Для переноса поля из списка Available fields or index tag (Имеющиеся поля и индексы) в список Selected fields (Выбранные поля) установите курсор на поле или индекс, по значению которого требуется упорядочивать данные, и нажмите кнопку Add (Добавить). Если вы ошибочно перенесли не то поле или индекс, удалить его из списка Selected fields (Выбранные поля) можно с помощью кнопки Remove (Удалить). Установите опцию Ascending (По возрастанию) или Descending (По убыванию), определяющую, по возрастанию или по убыванию значения выбранного поля будут упорядочиваться данные (рис. 15.11). Для перехода к следующему шагу создания формы нажмите кнопку Next (Далее).
  2. На последнем, шестом шаге, в поле ввода Т^ре a title for your form (Тип заголовка формы) задайте заголовок, размещаемый в форме, и выберите один из трех вариантов продолжения работы с формой (рис. 15.12) (табл. 15.3).

Таблица 15.3. Варианты продолжения работы с формой

Опция Действие
Save form for later use (Сохранить форму) Созданная форма сохраняется на диске
Save and run form (Сохранить и запустить форму на выполнение) Созданная форма сохраняется и запускается на выполнение
Save form and modify it in the Form Designer (Сохранить и открыть для модификации в конструкторе форм) Созданная форма сохраняется и открывается в конструкторе форм для модификации
 

gl15-12.jpg

Рис. 15.11. Установка критерия сортировки данных

После установки требуемой опции нажмите кнопку Finish (Готово) для завершения создания объекта с помощью мастера. В открывшемся диалоговом окне Save as (Сохранить как) выберите папку, в которой хотите разместить форму, и введите имя созданной формы.

gl15-13.jpg

Рис. 15.12. Заключительное диалоговое окно мастера

Посмотрите на форму, созданную с помощью мастера (рис. 15.13). Надписи к полям основной таблицы созданы с использованием информации, введенной в поле Caption (Надпись) свойства таблицы. Однако при формировании названий столбцов объекта Grid (Таблица) мастер не использовал это свойство таблицы. Для изменения наименований столбцов вам потребуется конструктор форм.

gl15-14.jpg

Рис. 15.13. Многотабличная форма, созданная с помощью мастера форм

  Создание объекта Grid с помощью конструктора форм

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

  1. В окне Data Environment (Среда окружения) разместите таблицы, используемые в форме.
  2. Установите связи между таблицами.
  3. Разместите в форме поля главной таблицы.
  4. Создайте в форме объект Grid (Таблица) для отображения данных подчиненной таблицы.

Создание формы, содержащей объект Grid

Рассмотрим создание формы, с помощью которой можно просмотреть информацию о клиентах, их телефонах и сделанных ими покупках. В отчете будем использовать следующие таблицы: Customer, Phoncust, Ordsalem, ordsaied и Goods. В таблицах содержится следующая информация:

Отношение между таблицами customer и Phoncust определяется как "одинко-многим", т. к. клиент может иметь несколько номеров телефона или факс для связи.

Отношение между таблицами Customer и Ordsalem также "один-ко-многим", поскольку каждый клиент может сделать несколько покупок.

Приступим к созданию формы.

  1. Откройте проект Sales.
  2. Откройте окно конструктора форм для создания новой формы.
  3. Откройте окно Data Environment (Среда окружения), выполнив команду Environment (Окружение) из меню View (Вид).
  4. Используя команду Add (Добавить) из меню Data Environment (Среда окружения), добавьте В форму таблицы Customer, Phoncust, Ordsalem, Ordsaied и Goods. Между ними существуют следующие отношения:

Данные в таблицах customer, Ordsalem и Phoncust должны быть упорядочены по коду клиента, в ordsaied — по коду заказа, а в Goods — по коду товара.

  1. Установив все необходимые связи между таблицами и указав упорядочение данных (рис. 15.14), закройте окно Data Environment (Среда окружения).
gl15-15.jpg

Рис. 15.14. Окно Data Environment создаваемой формы

  1. Используя кнопки панели инструментов Form Controls (Элементы управления формы), расположите в форме заголовок, надписи и необходимые поля таблицы Customer.
  2. Выберите кнопку Grid (Таблица) на панели инструментов Form Controls (Элементы управления формы).
  3. Установите указатель в место предполагаемого расположения объекта и, удерживая кнопку мыши нажатой, переместите курсор по диагонали, нарисовав рамку требуемого размера.
  4. Для определения параметров созданного объекта выделите его и откройте окно свойств, выполнив команду Properties (Свойства) из меню View (Вид).
  5. Скорректируйте свойство coiumnCount (Количество столбцов) объекта Grid (Таблица), задав количество столбцов в создаваемом объекте равным 3.
  6. Если вы хотите изменить цвет сетки таблицы, определите свойство GridLineCoior (Цвет сетки таблицы) объекта Grid (Таблица).
  7. Используя свойство controisource (Источник данных) каждого из трех объектов column (Столбец), входящих в объект Grid (Таблица), свяжите столбцы с полями таблицы Phoncust.
  8. Используя свойство caption (Надпись) каждого из трех объектов Header (Заголовок), входящих в объект Grid (Таблица), введите заголовки столбцов Вид связи, Номер кода и Номер. Чтобы заголовки располагались по центру столбцов, скорректируйте для каждого из них свойство Alignment (Выравнивание), установив значение Middle (По середине) Center (По центру).

    Определение первого объекта Grid (Таблица) завершено. Разместим в форме второй объект Grid (Таблица).

     

  9. Нажмите кнопку Grid (Таблица) на панели инструментов Form Controls (Элементы управления формы).
  10. Установите указатель в нижней части формы и, удерживая кнопку мыши в нажатом состоянии, переместите курсор по диагонали так, чтобы получилась рамка необходимого размера.
  11. Для определения параметров созданного объекта выделите его и откройте окно свойств.
  12. Скорректируйте свойство CoiumnCount (Количество столбцов) объекта Grid (Таблица), задав количество столбцов (6) в создаваемом объекте.
  13. Если необходимо выбрать цвет сетки таблицы, определите свойство GridLineCoior (Цвет сетки таблицы) объекта Grid (Таблица).
  14. Используя свойство controisource (Источник данных) каждого из пяти объектов column (Столбец), входящих в объект Grid (Таблица), выполните следующие действия:
  1. Шестой столбец таблицы будет содержать вычисляемое поле, определяющее стоимость проданного товара. Используя свойство Controisource (источник данных) для шестого объекта Column (Столбец), задайте выражение для вычисляемого поля: Ordsaled.nQuant*Ordsaled.nUnitPrice
  2. Используя свойство caption (Надпись) каждого из шести объектов Header (Заголовок), входящих в объект Grid (Таблица), введите заголовки столбцов: Номер документа, Дата, Наименование товара, Количество, Цена и Стоимость. Чтобы заголовки столбцов располагались по центру, скорректируйте для каждого из них свойство Alignment (Выравнивание), установив значение Middle (По середине) center (По центру).
  3. Используя свойство ForeCoior каждого из пяти объектов Text (Текст), входящих в объект Grid (Таблица), установите цвет (например, красный) для выделения информации при установке курсора на данное поле.
  4. Добавьте в создаваемую форму кнопки перемещения по записям. Полученная форма показана на рис. 15.15.
gl15-16.jpg

Рис. 15.15. Многотабличная форма

  1. Сохраните созданную форму и запустите ее на выполнение. Отметьте, что при перемещении по записям таблицы customer в первом объекте Grid (Таблица) отображается список телефонных номеров, по которым можно связаться с клиентом, а во втором объекте Grid (Таблица) показывается полный список товаров, купленных данным клиентом (рис. 15.16).
gl15-17.jpg

Рис. 15.16. Просмотр многотабличной формы

Создание формы, содержащей три объекта Grid

В рассмотренном примере мы использовали поля формы для отображения информации главной таблицы. Модифицируем созданную форму и разместим поля таблицы customer в объекте Grid (Таблица).

  1. Откройте в окне конструктора форм созданную в предыдущем примере форму и сохраните ее под новым именем.
  2. Удалите из формы все поля и надписи, оставив только объекты Grid (Таблица) (рис. 15.17).
  3. Нажмите кнопку Grid (Таблица) на панели инструментов Form Controls (Элементы управления формы), установите указатель в левой верхней части формы и создайте новый объект Grid (Таблица).
  4. В окне свойств созданного объекта скорректируйте для объекта Grid (Таблица) свойство coiumncount (Количество столбцов), задав количество столбцов (4) в создаваемом объекте.
  5. Свяжите столбцы объекта с полями ccompany, clastname, cfirstname и caddress таблицы Customer.
gl15-18.jpg

Рис. 15.17. Удаление из формы полей ввода и надписей к ним

gl15-19.jpg

Рис. 15.18. Форма с тремя объектами Grid

  1. Скорректируйте для вновь созданных объектов свойства, определяющие цвет сетки таблицы, расположение заголовков, цвета отображения заголовков и выводимых данных.
  2. Сохраните форму и запустите ее на выполнение. Вид созданной формы показан на рис. 15.18.

  Создание формы с вкладками

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

Чтобы создать вкладки в форме, необходимо воспользоваться кнопкой Page Frame (Вкладка) панели инструментов Form Controls (Элементы управления формы). Созданный объект содержит в контекстном меню команду Edit (Правка), указывающую, что он является сложным объектом, в котором вкладки наделены своими собственными свойствами. Количество вкладок задается свойством Pagecount (Количество вкладок). В процессе создания формы переход с одной вкладки на другую осуществляется в режиме редактирования.

Создание объекта типа page Frame (Вкладка) рассмотрим на примере разработки многостраничной формы для таблицы customer. Форма будет содержать две вкладки. На первой вкладке будет располагаться объект Grid (Таблица), содержащий список всех клиентов, а на второй — дополнительные данные о выбранном на первой вкладке клиенте.

  1. Откройте проект Sales.
  2. Откройте окно конструктора форм для создания новой формы. Скорректируйте свойство caption (Надпись) формы, введя заголовок формы Список клиентов.
  3. Откройте диалоговое окно Data Environment (Среда окружения), выполнив команду Environment (Окружение) из меню View (Вид).
  4. Используя команду Add (Добавить) всплывающего меню, добавьте в форму таблицу Customer. Закройте диалоговое окно.
  5. Нажмите кнопку Page Frame (Вкладка) на панели инструментов Form Controls (Элементы управления формы).
  6. Установите указатель в форму и, удерживая кнопку мыши в нажатом состоянии, переместите курсор по диагонали так, чтобы получилась рамка размером с форму (рис. 15.19).
gl15-20.jpg

Рис. 15.19. Размещение в форме объекта Page Frame

  1. Откройте окно свойств созданного объекта. Убедитесь, что для свойства Pagecount, определяющего количество вкладок формы, по умолчанию установлено значение 2.
  2. Скорректируйте свойство caption (Надпись) для объектов Pagei и Раде2, определяющих заголовок каждой вкладки. Для объекта Pagei введите заголовок Основная информация, а для объекта Раде2 — Дополнительная информация.
  3. Для перехода в режим редактирования объекта Page Frame (Вкладка) выберите команду Edit (Правка) контекстного меню. Вокруг объекта появилась штриховая контурная рамка.
  4. Убедитесь, что вы находитесь на первой вкладке объекта Page Frame (Вкладка). Для этого щелкните мышкой на вкладке Основная информация в верхней части формы.
  5. Используя кнопку Grid (Таблица) на панели инструментов Form Controls (Элементы управления формы), создайте объект Grid (Таблица) для отображения ПОЛеЙ icdcustomer, ccompany таблицы Customer.
  6. В третьем столбце таблицы для отображения фамилии, имени и отчества представителя в свойстве Control Sour се (Источник данных) введите выражение следующего вида:

a lit rim (customer .cLastname) + " " + allt rim (customer .cFirstname) + " " + alltrim(customer.cSecondname)

  1. Определите заголовки столбцов и другие параметры созданного объекта Grid (Таблица).
  2. В нижней части страницы расположите кнопки перемещения по записям таблицы и выхода из формы.

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

gl15-21.jpg

Рис. 15.20. Первая страница многостраничной формы

  1. Перейдите на вторую вкладку объекта Page Frame (Вкладка). Для этого щелкните на названии вкладки Дополнительная информация в верхней части формы.

Совет

Если ваша попытка перейти на вторую вкладку оказалось безуспешной, убедитесь, что объект Page Frame (Вкладка) находится в режиме редактирования.

  1. На второй странице объекта расположите все поля таблицы Customer и надписи к ним.
  2. При переходе на другую вкладку формы необходимо обновлять значения данных, отображаемых в ней. Для этого вы можете использовать событие Activate (Активизация) каждой вкладки объекта Page Frame (Вкладка). Откройте окно редактирования процедуры обработки данного события и введите следующую команду, использующую метод Refresh (Обновить):

screen.ActiveForm.Refresh()

Окно процедур для метода Refresh представлено на рис. 15.21.

  1. Сохраните созданную форму и запустите ее на выполнение.

Замечание

Обратите внимание, что после ввода информации в окно процедуры в свойстве данного метода появляется значение [User Procedure].

gl15-22.jpg

Рис. 15.21. Окно процедуры для метода Refresh

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

gl15-23.jpg

Рис. 15.22. Вторая вкладка формы

  Набор форм

В Visual FoxPro вы можете объединить несколько форм в набор форм. Для этого служит команда Create Form Set (Создать набор форм) из меню Form (Форма), создающая объект FormSet.

Создадим объект FormSet из двух форм. Первая форма содержит данные о клиентах таблицы customer, а вторая — итоговую сумму покупок клиентов. Для создания набора форм выполните следующие действия:

  1. Откройте проект Sales.
  2. Откройте окно конструктора для создания новой формы.
  3. Выберите в меню Form (Форма) команду Create Form Set (Создать набор форм).
  4. Откройте окно Data Environment (Среда окружения) и добавьте в окружение таблицу customer и представление данных sumcust, содержащее сведения об итоговой стоимости покупок клиентов.
  5. Скорректируйте свойство caption (Надпись) для первой формы, введя заголовок Клиенты.
  6. В форме создайте объект Grid (Таблица), разместив в нем необходимые поля таблицы Customer.
  7. Для добавления второй формы выполните команду Add New Form (Добавить новую форму) из меню Form (Форма). В окне конструктора форм откроется вторая форма.
  8. Скорректируйте свойство caption (Надпись) для второй формы, введя заголовок Итоговые суммы покупок,
  9. Во второй форме создайте объект Grid (Таблица), разместив в нем поля представления данных Sumcust.
gl15-24.jpg

Рис. 15.23. Просмотр набора форм

  1. Расположите формы на экране таким образом, чтобы они были удобны для поочередного просмотра.
  2. Сохраните созданную форму, нажав кнопку Save (Сохранить) на стандартной панели инструментов.
  3. Запустите форму на выполнение.
  4. На экране открывается две формы (рис. 15.23). Просмотрев данные в первой форме, перейдите во вторую форму. Для этого активизируйте ее, щелкнув мышью в любом ее месте. Во второй форме вы можете просмотреть итоговые суммы покупок интересующего вас клиента.

  Таймер

В Visual FoxPro существует объект, обрабатывающий данные системных часов, называемый таймером. Его можно использовать для отображения в форме системных часов, а также для выполнения определенных действий через заданный интервал времени. Например, используя объект данного типа, можно обновлять данные в таблицах.

Для размещения в форме таймера используется кнопка Timer (Таймер) на панели инструментов Form Controls (Элементы управления формы). Объект данного типа обладает свойствами, описанными в табл. 15.4.

Таблица 15.4. Назначение свойств объекта Timer

Свойство Назначение
Interval (Интервал) Интервал активизации объекта в миллисекундах
Enabled (Доступно) Устанавливает режим работы таймера. Если значение свойства равно True (Истина), то таймер начинает отсчитывать время сразу же после запуска формы. В противном случае вы должны запустить таймер по какому-либо внешнему событию (например, при нажатии на кнопку)

Помимо вышеперечисленных свойств, для объекта Timer (Таймер) определяется событие Timer (Таймер), наступающее через каждый установленный в свойстве interval (Промежуток времени) промежуток времени. В процедуре обработки данного события необходимо определить действия, выполняемые с заданным интервалом.

Для запуска таймера используется метод Reset (Установить), не связанный с каким-либо событием. Поэтому вы должны выполнить его при наступлении каких-либо других событий, например, при нажатии кнопки запуска таймера.

  Создание формы с использованием таймера

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

  1. В Проекте Sales, ИСПОЛЬЗУЯ таблицы Goods, Ordsaled и Ordsalem, создайте представление данных, содержащее наименование товара, суммарное количество проданного товара и суммы продаж по данному товару.
  2. Сгруппируйте данные по коду товара.
  3. Сохраните созданное представление данных.
  4. Откройте новое окно конструктора форм.
  5. Откройте окно среды окружения формы и добавьте в него созданное представление.
  6. Создайте в форме объект Grid (Таблица), разместив в нем все поля представления данных.
  7. Для отображения текущей даты и времени расположите два поля ввода curdate и curtime. Скорректируйте для данных объектов свойство Readonly (Только чтение), установив значение True (Истина).
  8. Для создания объекта-таймера нажмите кнопку Timer (Таймер) на панели инструментов Form Controls (Элементы управления формы) и расположите его в форме.
  9. Откройте окно процедур для метода Timer (Таймер).
  10. Для присвоения значений созданным полям curdate и curtime, а также для обновления данных о продаже товаров через заданный интервал времени введите в окне процедур следующие значения:

    This.Parent.CurDate.Value = DATE()

    This. Parent.CurTime.Value = TIME()

    This.Parent.CurDate.Refresh()

    This.Parent.CurTime.Refresh()

    ThisForm.Gridl.Refresh()

     

  11. Определите интервал времени, через который необходимо производить обновление данных в таблице. Для этого воспользуйтесь свойством interval (Промежуток времени), значение которого задается в миллисекундах. Для обновления данных каждые 10 мин введите значение 600 000.
  12. Форма готова. Сохраните ее и запустите на выполнение.
gl15-25.jpg

Рис. 15.24. Использование таймера в форме

gl15-26.jpg

Рис. 15.25. Просмотр итоговых продаж через заданный промежуток времени

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

  Добавление данных в список

В главе 6 мы рассматривали использование объектов типа ListBox (Список), которые значительно облегчают ввод данных в поля, одновременно избавляя от дополнительных ошибок, которые могут возникнуть при вводе. Список может формироваться из значений, содержащихся в поле таблицы, массива, запроса и т. п. В этой главе рассмотрим создание списка, значения которого вводятся в интерактивном режиме пользователем с использованием дополнительного поля ввода.

Создание списка рассмотрим на примере редактирования поля, содержащего город, для таблицы Customer. Для создания формы:

  1. Откройте форму для ввода списка клиентов в окне конструктора форм.
  2. Нажмите кнопку List Box (Список) на панели инструментов Form Controls (Элементы управления формы).
  3. Установите указатель мыши на место предполагаемого расположения поля и, удерживая кнопку мыши в нажатом состоянии, переместите курсор по диагонали так, чтобы получилась рамка требуемого размера для поля списка.
  4. Откройте окно свойств для размещенного в форме списка.
  5. Скорректируйте свойство Name (Имя) созданного объекта, присвоив ему имя IstCity.
  6. Чтобы связать созданное поле с полем таблицы customer, выберите свойство controisource (Источник данных). В поле ввода значения свойства воспользуйтесь кнопкой раскрытия списка и из списка всех полей открытой таблицы Customer выберите поле ccity.
  7. Скорректируйте свойство RowSourceType (Тип источника данных), которое указывает тип источника данных. Выберите из списка значение Value (Значение), поскольку список городов будет формироваться с помощью вводимых значений.
  8. Используя кнопку Text Box (Поле ввода) на панели инструментов Form Controls (Элементы управления формы), создайте под списком поле редактирования.
  9. Скорректируйте свойство Name (Имя) поля редактирования, присвоив ему имя txtAddText.
  10. Используя окно процедур свойства Keypress (Нажатие клавиши), введите в нем следующие команды:

LPARAMETERS nKeyCode, nShiftCtrlAlt

IF nKeyCode = 13 && 13 код клавиши <Enter>

IF 1EMPTY(THIS,Value)

* добавляем значение в список

THISFORM.lstCity.Addltem (THIS.Value}

ENDIF

* очищаем поле ввода

THIS.Value = ""

ENDIF

Эта процедура позволит пользователю ввести текст в поле ввода и нажатием клавиши <Enter> добавить значение в список, освободив окно для ввода следующей информации (рис. 15.26).

gl15-27.jpg

Рис. 15.26. Определение свойства KeyPress

Теперь при запуске формы на выполнение значения, введенные в поле ввода Поле формирования списка, при нажатии клавиши <Enter> переносятся в список городов (рис. 15.27).

gl15-28.jpg

Рис. 15.27. Формирование списка с помощью поля ввода в диалоговом режиме

Visual FoxPro   Обзор графических пакетов 3GL   Компьютерная графика к экономической информатике   к 4GL - визуальному программированию

Знаете ли Вы, что, как и всякая идолопоклонническая религия, релятивизм ложен в своей основе. Он противоречит фактам. Среди них такие:

1. Электромагнитная волна (в религиозной терминологии релятивизма - "свет") имеет строго постоянную скорость 300 тыс.км/с, абсурдно не отсчитываемую ни от чего. Реально ЭМ-волны имеют разную скорость в веществе (например, ~200 тыс км/с в стекле и ~3 млн. км/с в поверхностных слоях металлов, разную скорость в эфире (см. статью "Температура эфира и красные смещения"), разную скорость для разных частот (см. статью "О скорости ЭМ-волн")

2. В релятивизме "свет" есть мифическое явление само по себе, а не физическая волна, являющаяся волнением определенной физической среды. Релятивистский "свет" - это волнение ничего в ничем. У него нет среды-носителя колебаний.

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

4. В гравитационном релятивизме (ОТО) вопреки наблюдаемым фактам утверждается об угловом отклонении ЭМ-волн в пустом пространстве под действием гравитации. Однако астрономам известно, что свет от затменных двойных звезд не подвержен такому отклонению, а те "подтверждающие теорию Эйнштейна факты", которые якобы наблюдались А. Эддингтоном в 1919 году в отношении Солнца, являются фальсификацией. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution