Распечатать страницу
Главная \ База готовых работ \ Готовые работы по компьютерным дисциплинам \ Б386 - Microsoft Visual FoxPro - 261 питання \ 165. Панель инструментов: создание и пример употребления в VFP

Панель инструментов: создание и пример употребления в VFP

« Назад

Панель инструментов – это визуальный объект, который, в частности, можно добавить в набор форм или ассоциировать с формой и использовать затем для управления набором форм или формой.

Панель инструментов как класс можно создать интерактивно в проектировщике классов или программно.

Рассмотрим последовательность интерактивного формирования панели инструментов ListFormToolBar (рис. 10.25), ассоциированной с приведенной на рис. 10.24 формой ListForm.

165.1.-Панель-инструментов-ListFormToolBar

Рис. 10.25. Панель инструментов ListFormToolBar

Ее назначение – выполнять те же действия, что и обработчик события InteractiveChange списка Combo1. Так, при нажатии на кнопку V панели инструментов ListFormToolBar в списке List1 формы ListForm должен отобразится тот же список, что и при выборе значения Value в списке Combo1, нажатие на кнопку Al должно соответствовать выбору в Combo1 значения Alias, нажатие на S – выбору SQL и т. д.

Эта задача реализуется за счет включения в обработчик события Click кнопки V панели ListFormToolBar следующего кода:

&& Обработчик события Click кнопки V панели инструментов ListFormToolBar

ThisForm.oFormRef.Combo1.Value = "Value" && "Alias" в случае кнопки Al и т. д.

ThisForm.oFormRef.Combo1.InteractiveChange

в котором ThisForm – это ссылка на саму панель инструментов, а ThisForm.oFormRef содержит ссылку на форму ListForm. Таким образом, в результате выполнения приведенного кода, во-первых, меняется значение свойства Value списка Combo1 формы ListForm и, во-вторых, вызывается обработчик события InteractiveChange этого списка, что влечет изменение вида источника данных и самого источника данных списка ListForm.

Аналогичные, отличающиеся только значением, устанавливаемым в свойство Value, обработчики предусмотрены и для других кнопок панели инструментов.

Предположим, что класс ListFormToolBar уже создан и хранится в файле (библиотеке классов) d:\ToolBars.vcx. Обратимся на время к форме ListForm. Чтобы связать ее с панелью инструментов ListFormToolBar, в форму добавляется новое свойство oTBar, а в обработчик события Init формы – следующий код:

&& Дополнение к обработчику события Init формы ListForm

&&

&& Связываем форму с панелью инструментов ListFormToolBar

&& Открываем библиотеку классов d:\ToolBars.vcx

set classlib to d:\ToolBars

&& Свойству формы oTBar присваиваем значение ссылки на класс ListFormToolBar,

&& а создаваемому объекту в качестве параметра передаем ссылку на форму ListForm

ThisForm.oTBar = CreateObject('ListFormToolBar', ThisForm)

&& Показываем панель инструментов ListFormToolBar

ThisForm.oTBar.Show

&& Освобождаем библиотеку классов d:\ToolBars

release classlib d:\ToolBars

Из кода и комментария видно, что связь формы с панелью инструментов осуществляется в результате передачи последней ссылки на форму. Получаемая от функции CreateObject( ) ссылка на панель инструментов присваивается Public-свойству формы oTBar.

Иных изменений в форме ListForm нет, поэтому можно вернуться к панели инструментов.

Чтобы принять параметр ThisForm, в обработчик события Init панели инструментов включим следующие строки кода:

&& Обработчик события Init панели инструментов ListFormToolBar

&&

parameters oForm              && oForm – принимает ссылку на объект форм

This.oFormRef = oForm

в которых oFormRef – это Public-свойство класса ListFormToolBar.

Сам класс создадим в проектировщике класса. Выполним для этого команду меню File – New и выберем в диалоге New переключатель Class и затем кнопку New File. В появившемся диалоге введем отображенные на рис. 10.26 данные:

165.2.-Создание-нового-класса-ListFormToolBar

Рис. 10.26. Создание нового класса ListFormToolBar

В открывшемся проектировщике класса при помощи панели инструментов Form Controls добавим в пока еще пустую панель инструментов ListFormToolBar 8 кнопок и приведем их в соответствие с рис. 10.25.

Употребляя команду меню Class – New Property, добавим в проектируемую панель инструментов новое с глобальной видимостью свойство oFormRef. Далее занесем в обработчики событий Init и Click соответственно панели инструментов ListFormToolBar и ее кнопок приведенные выше операторы.

Сформированный класс ListFormToolBar сохраним в файле d:\ToolBars.vcx, закроем этот файл, запустим форму ListForm, чтобы пронаблюдать и форму и ее панель инструментов (рис. 10.27).

165.3.-Нажата-кнопка-V-панели-инструментов-ListFormToolBar

Рис. 10.27. Нажата кнопка V панели инструментов ListFormToolBar

Созданный вариант взаимодействия формы и панели инструментов отличается тем, что панель геометрически не связана с формой. Чтобы вписать панель в форму, потребуется внести изменения, установив значения свойств ShowWindow и AlwaysOnTop формы соответственно в 2 и .T., а значение ShowWindow панели инструментов в 1. И, наконец, до обращения к функции CreateObject( ) в обработчике события Init формы следует поместить вызов ее метода Show, а в конце обработчика – вызов метода Dock панели инструментов:

&& Показываем форму

This.Show                          && или: This.Visible = .T.

&&

set classlib to d:\ToolBars

ThisForm.oTBar = CreateObject('ListFormToolBar', ThisForm)

ThisForm.oTBar.Show

release classlib d:\ToolBars

&&

&& Прикрепляем панель инструментов ListFormToolBar к окну формы ListForm

&& в ее верхнем левом углу

ThisForm.oTBar.Dock(0)

Панель инструментов в таком случае может быть помещена в форме, например так, как показано на рис. 10.28.

165.4.-Панель-инструментов-встроенная-в-форму

Рис. 10.28. Панель инструментов, встроенная в форму

Замечания:

1. Форма, в которой значение свойства ShowWindow = 2, является SDI-формой (SDI – single document interface).

2. Описание свойств, методов и событий объекта ToolBar см. в справке VFP, тема ToolBar Object.