Панель инструментов: создание и пример употребления в VFP
« Назад Панель инструментов – это визуальный объект, который, в частности, можно добавить в набор форм или ассоциировать с формой и использовать затем для управления набором форм или формой. Панель инструментов как класс можно создать интерактивно в проектировщике классов или программно. Рассмотрим последовательность интерактивного формирования панели инструментов ListFormToolBar (рис. 10.25), ассоциированной с приведенной на рис. 10.24 формой ListForm. Рис. 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 данные: Рис. 10.26. Создание нового класса ListFormToolBar В открывшемся проектировщике класса при помощи панели инструментов Form Controls добавим в пока еще пустую панель инструментов ListFormToolBar 8 кнопок и приведем их в соответствие с рис. 10.25. Употребляя команду меню Class – New Property, добавим в проектируемую панель инструментов новое с глобальной видимостью свойство oFormRef. Далее занесем в обработчики событий Init и Click соответственно панели инструментов ListFormToolBar и ее кнопок приведенные выше операторы. Сформированный класс ListFormToolBar сохраним в файле d:\ToolBars.vcx, закроем этот файл, запустим форму ListForm, чтобы пронаблюдать и форму и ее панель инструментов (рис. 10.27). Рис. 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. Рис. 10.28. Панель инструментов, встроенная в форму Замечания: 1. Форма, в которой значение свойства ShowWindow = 2, является SDI-формой (SDI – single document interface). 2. Описание свойств, методов и событий объекта ToolBar см. в справке VFP, тема ToolBar Object. |