- •Глава1 Постановка задачи и разработка бизнес-правил
- •1.1.Некоторые определения
- •Глава2 Основы теории проектирования баз данных
- •Глава3 Обзор возможностей и особенностей различных СУБД
- •3.5.MS SQL Server
- •Глава4 Основы языка программирования
- •4.3. "Горячая десятка"
- •Глава5 Объектно-ориентированное программирование
- •5.1.Объектная модель и ее свойства
- •Объекты для работы с данными
- •Объекты для управления работой приложения
- •Объекты для оформления интерфейса пользователя
- •Объекты-контейнеры
- •Невизуальные объекты
- •Объекты OLE
- •Глава6 Создание базы данных
- •6.1.Visual FoxPro
- •Создание и модернизация структуры базы данных
- •Использование словаря данных
- •Создание и модернизация структуры таблиц
- •Глава7 Средства работы с данными
- •Запросы выборки
- •Запросы добавления
- •Запросы обновления
- •Запросы удаления
- •Запрос добавления
- •Запрос - Создание таблицы
- •Запрос удаления
- •Запрос обновления
- •Перекрестный запрос
- •Microsoft Access
- •Глава8 Использование технологии клиент-сервер
- •8.1. Работа с внешними данными с помощью технологии ODBC
- •Команды Transact-SQL
- •Создание представлений
- •Создание триггеров
- •Синхронный и асинхронный процессы
- •Создание внешних представлений
- •9.1.Инструментарий разработчика
- •Создание формы "Прием заказов" на Access
- •Разработка меню в Visual FoxPro
- •Разработка меню в Access
- •Глава10 Использование готовых компонентов в приложении
- •10.1.Основные преимущества модульного проектирования прикладных программ
- •Управление объектами Excel
- •Управление объектами Word for Windows
- •Построение графиков с помощью MS Graph 5.0
- •Построение отчета в Word for Windows
- •Запись информации в Schedule+
- •10.4.Применяем ActiveX
- •Иерархический список
- •Календарь
- •Глава11 Подготовка отчетных данных
- •11.1.Создание отчетов в Visual FoxPro
- •Управление режимом печати
- •Глава12 Подготовка и отладка пользовательского приложения
- •12.1.Общие принципы отладки приложения
- •Отладка программы в Access
- •Обработка ошибок процессора баз данных в Access
- •Отладка программы в Visual Basic
- •Визуальные средства проектирования
- •Поставка программного пакета
- •Требования к установке
- •Project Manager
- •Работа с кодом программы
- •Создание базы данных
- •Работа с данными
- •Расширение возможностей технологии клиент-сервер
- •Построение пользовательского интерфейса
- •Расширение функций OLE
- •Отладка приложения
converted to PDF by HupBaH9I
Объекты-контейнеры
Одним из наиболее важных объектов, который используется для объединения всех элементов управления, размещаемых в одном окне, является объект Form - экранная форма. В целом интерфейс приложения состоит из форм, которые и обеспечивают ему требуемую функциональность при решении какой-либо задачи, например, редактирования или ввода данных, поиска нужной информации и т. д. Наиболее эффективным средством создания формы является Конструктор формы (Form Designer), о работе с которым пойдет речь в главе 9.
Внешний вид формы может быть установлен с помощью большинства свойств, общих для всех элементов управления. Следующий набор свойств позволяет установить или убрать возможность управления формой как окном с помощью системного меню.
Object.ControlBox [ = lExpression]
Определяет, появляется ли системное меню в верхнем левом углу формы во время ее выполнения. Если параметр lExpression принимает значение .T. (по умолчанию), то системное меню отображается, если .F., то нет.
Object.MaxButton [ = lExpression]
Определяет, имеет ли форма кнопку Maximize (увеличение размера окна до максимального размера). Если параметр lExpression принимает значение .T. (по умолчанию), то форма имеет кнопку Maximize; если .F., то нет. Максимальное открытие окна Form во время выполнения программы вызывает событие Resize.
Object.MinButton [ = lExpression]
Определяет, имеет ли форма кнопку Minimize (уменьшение размера окна до пиктограммы). Если параметр lExpression равен .T. (по умолчанию), то форма имеет кнопку Minimize; если .F., то нет. Уменьшение формы до пиктограммы во время выполнения программы генерирует событие
Resize.
Object.Icon [ = cFileName]
Определяет изображение, которое будет выведено при минимизации формы. Файл, имя которого указано в cFileName, должен иметь по умолчанию расширение ICO.
Object.KeyPreview [ = lExpression]
Определяет, прерывает ли событие KeyPress в форме событие KeyPress в элементе управления. Если параметр lExpression принимает значение .T., то сначала событие KeyPress получает форма, а затем активный элемент управления; если .F. (по умолчанию), то событие KeyPress получает активный элемент управления, а форма не получает.
Вы можете использовать это свойство, чтобы создать для формы процедуру управления с помощью клавиатуры. Например, когда прикладная программа использует функциональные клавиши, вы можете обрабатывать нажатия клавиши на уровне формы скорее, чем для каждого элемента управления.
Объект FormSet создает набор форм, что позволяет легко координировать работу сразу с несколькими формами. Этот объект есть только в Visual FoxPro, в Visual Basic ему в соответствие можно поставить коллекцию Forms. Набор форм обеспечивает следующие возможности:
∙Одновременное выполнение какого-либо действия сразу для нескольких форм.
∙Свободное управление расположением форм на экране для достижения максимального удобства в работе с ними.
∙Создание одного объекта DataEnvironment для всех форм в наборе и обеспечение тем самым синхронизации в перемещении данных.
Вто же время следует заметить, что наличие в Visual FoxPro такого объекта, как страничный блок (PageFrame), позволяет вместить практически неограниченный объем данных в одну форму.
Для набора форм можно использовать множество свойств, событий и методов, доступных для отдельной формы. Некоторые свойства для набора форм особенно важны. Так, в Visual FoxPro
для набора форм существует свойство
converted to PDF by HupBaH9I
Object.WindowType [ = nType]
Определяет поведение форм в наборе форм, если она запущена командой DO FORM. Для FormSet доступны следующие значения параметра Type:
nType |
Описание |
0Независимо от режима.
1Модально. Никакие объекты других форм не могут стать активными, и меню не доступно. Все формы в FormSet активны.
2Чтение. Объект FormSet ведет себя, как будто он был активизирован командой READ. Выполнение останавливается на методе Show или команде DO FORM. Когда форма дезактивирована, выполнение программы продолжается. Включено для совместимости снизу вверх.
3Модальное чтение. FormSet ведет себя, как
будто он был активизирован командой READ MODAL. Выполнение программы останавливается на методе Show или команде DO FORM. Любые объекты формы в FormSet и объектах формы, указанных в свойстве WindowList, доступны, но объекты других форм и меню не доступны. Включено для совместимости снизу вверх.
ВVisual FoxPro в набор стандартных объектов входят и объекты для создания многостраничных форм.
Объект Page создает страницу в страничном блоке для размещения блока данных. Страница объединяет информацию, одновременно видимую на экране пользователем. Перелистывая страницы, пользователь может работать с большим объемом данных без необходимости перехода
вдругие окна или формы.
Страница как объект может входить только в страничный блок (PageFrame). В свою очередь, страница является объектом-контейнером и для определения количества включенных в нее элементов управления можно использовать свойство ControlCount. Для ссылки на отдельный
элемент управления по его номеру и задания для него определенных значений свойств используется свойство Controls.
Object.KeyPreview [ = lExpression]
Определяет, будет ли событие KeyPress в элементе управления прервано событием KeyPress в форме. Если параметр lExpression принимает значение .T., то сначала событие KeyPress получает форма, а затем активный элемент управления; если .F. (по умолчанию), то событие KeyPress получает активный элемент управления, а форма не получает.
Вы можете использовать это свойство, чтобы создать для страницы в форме процедуру управления с помощью клавиатуры. Например, когда прикладная программа использует функциональные клавиши, вы можете обрабатывать нажатия клавиши на уровне формы скорее, чем для каждого элемента управления.
Page.PageOrder [ = nOrder]
Определяет относительный номер страницы в страничном блоке, что будет влиять на порядок их расположения.
Объект PageFrame создает страничный блок из набора страниц. Страничный блок позволяет
компактно расположить большие объемы данных для работы с ними пользователя за счет размещения их на отдельных страницах, которые могут перелистываться. Узнать номер активной в данный момент страницы можно с помощью свойства ActivePage.
Объект ToolBar создает в Visual FoxPro панель инструментов, которая может облегчить пользователю выполнение часто повторяющихся действий. На панели инструментов мы можем размещать любые элементы управления. Это позволяет создавать универсальный набор элементов управления для использования с однотипными формами, например справочниками,
converted to PDF by HupBaH9I
что сокращает время разработки программы и облегчает обучение пользователей. Панель инструментов имеет несколько специфических свойств.
Object.Movable [ = lExpression]
Определяет, может ли панель инструментов перемещаться пользователем во время выполнения программы. Если параметр lExpression принимает значение .T. (по умолчанию), то панель инструментов может перемещаться. Если .F., то объект не может быть перемещен пользователем.
Object.Sizable = lExpression
Определяет возможность изменения размеров панели инструментов. По умолчанию параметр lExpression равен .T., и размеры панели инструментов могут быть изменены пользователем. Если параметр lExpression будет равен .F., то сделать этого будет нельзя.
ToolBar.Docked [=lExpression]
Возвращает логическое значение, с помощью которого можно определить, встроена панель инструментов в рамку окна Visual FoxPro (.T.) или нет (.F.). Если используется параметр lExpression, то свойство возвращает результат сравнения возвращаемого значения и параметра lExpression.
Если вы хотите поэкспериментировать со свойствами панели инструментов, задавая команды из окна Command, то вам поможет следующий образец, который обеспечивает доступ к панели инструментов, добавленной к форме при ее проектировании.
?_SCREEN.ActiveForm.Parent.Office_toolbar1.Docked
При добавлении панели инструментов к форме создается набор форм, поэтому для ссылки на него, как на объект более высокого уровня, используется указатель Parent.
nPosition = ToolBar.DockPosition
Определяет положение панели инструментов в окне Visual FoxPro. Параметр nPosition может принимать следующие значения: -1 - панель инструментов не может быть встроена; 0 - встроена в верхнюю рамку; 1 - в левую; 2 - в правую; 3 - в нижнюю.
На панели инструментов можно размещать специальный объект - Separator, который помещает пробел между элементами управления. Это позволяет визуально создавать на панели инструментов группы элементов управления, так как по умолчанию размещаемые на панели инструментов элементы управления следуют вплотную друг за другом.
Универсальными объектами в Visual FoxPro для создания компонентных элементов управления, включающих несколько отдельных объектов, являются объекты Control и Container. Об отличиях между этими объектами мы уже рассказывали.
Невизуальные объекты
Объект Custom создает единственный в Visual FoxPro невизуальный объект, исключая уже упоминавшиеся объекты Container и Control, которые выполняют специфические функции объединения других элементов управления.
Этот объект удобно использовать для создания и последующего запуска стандартных, часто используемых процедур, при создании которых не требуется визуализация объекта.
В качестве примера использования объекта Custom рассмотрим следующий пример, в котором мы создадим пользовательский класс, зашифровывающий пароль. Пароль может храниться в таблице с данными о доступе пользователей к элементам системы в зашифрованном виде. После ввода пароля пользователем хранимый пароль расшифровывается и сравнивается с введенным. В приводимой программе создается форма, в которой в поле, расположенное в левом верхнем углу, вводится пароль. Вводимые символы скрыты, и их число отображается звездочками. Нажмите кнопку "Зашифровать", и вы увидите в нижних полях формы слева зашифрованное значение, а справа введенное. Успехов в шифровании!
*** Пример использования объекта Custom для шифрования пароля
converted to PDF by HupBaH9I
frmPwdForm = CREATEOBJECT("PwdForm") && Создаем форму. frmPwdForm.Visible = .T.
READ EVENTS
*Описываем класс формы
DEFINE CLASS PwdForm AS FORM Caption = "Шифрование пароля"
*Добавляем объект в форму для формирования пароля
ADD OBJECT CustPassword AS Pass_Word
Height = 130
Width = 350 Autocenter = .T.
* Добавляем текстовое поле для ввода пароля
ADD OBJECT txtText1 AS TextBox WITH ; Height = 25, ;
Left = 25, ;
Top = 20, ; Width = 125, ;
PasswordChar = "*", ; Name = "txtText1"
*Добавляем текстовое поле для вывода
*зашифрованного пароля
ADD OBJECT txtText2 AS TextBox WITH ;
Height = 25, ;
Left = 25, ;
Top = 72, ;
Width = 125, ;
Readonly = .T., ;
Name = "txtText2"
*Добавляем в форму кнопку для вызова процедуры
*шифрования,
*которая содержится в cmdCommand1.Click
ADD OBJECT cmdCommand1 AS CommandButton WITH ;
Top = 20, ;
Left = 200, ;
Height = 29, ;
Width = 125, ;
Caption = "Зашифровать", ;
Name = "cmdCommand1"
*Добавляем в форму текстовое поле для вывода введенного
*пароля
ADD OBJECT txtText3 AS TextBox WITH ;
ControlSource = ; "THISFORM.custPassword.cUnencrypted", ; Height = 25, ;
Left = 200, ; ReadOnly = .T., ; Top = 72, ; Width = 125, ; Name = "Text3"
* Процедура, выполняемая после набора пароля
PROCEDURE txtText1.LostFocus THISFORM.custPassword.Encrypt_It(TRIM(THIS.Value)) THISFORM.txtText2.Value =; THISFORM.custPassword.cEncrypted THISFORM.cmdCommand1.SetFocus
ENDPROC
*Процедура, выполняемая при нажатии на кнопку
*"Зашифровать"
PROCEDURE cmdCommand1.Click THISFORM.custPassword.Decrypt_It(THISFORM.custPassword.; cEncrypted) THISFORM.Refresh
THISFORM.txtText1.SetFocus ENDPROC
* Процедура, выполняемая при выходе из формы
PROCEDURE DESTROY
CLEAR EVENTS ENDPROC