Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Горев “Эффективная работа с СУБД”.pdf
Скачиваний:
208
Добавлен:
28.06.2014
Размер:
4.71 Mб
Скачать

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

Соседние файлы в предмете Программирование на Delphi