- •Глава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
Dim oSchedApp As Object, oSchedTable As Object, oSchedItem As Object * Запускаем скрытую копию Schedule+
Set oSchedApp = CreateObject("SchedulePlus.Application") * Проводим процедуру регистрации
If Not oSchedApp.LoggedOn Then oSchedApp.LogOn
End If
*Устанавливаем ссылку на объект типа таблица.
*Свойство ScheduleLogged возвращает объект планирования для
*зарегистрированного пользователя.
Set oSchedTable = oSchedApp.ScheduleLogged.Contacs
*Устанавливаем ссылку на объект типа пункт (новый пункт в таблице) Set oSchedItem = oSchedTable.New
*Записываем в пункт данные с помощью его свойств
oSchedItem.SetProperties FirstName:="Андрей", LastName:="Горев", _ Notes:="Эффективная работа с СУБД на основе решений Microsoft", _ PhoneBusiness:="(812)259-4277", PhoneFax:="(812) 112-6872"
` Стираем ссылки на объекты
Set oSchedItem = Nothing
Set oSchedTable = Nothing
Set oSchedApp = Nothing End Sub
После выполнения этой программы откройте Schedule+, и вы увидите, что на вкладке Contacts появилась новая запись.
Совершенно аналогично можно записать в Schedule+ какое-либо планируемое событие. В этом
случае дата и время начала и окончания планируемого события должны быть указаны обязательно.
Sub NewAppoint()
Dim oSchedApp As Object, oSchedTable As Object, oSchedItem As Object
Set oSchedApp = CreateObject("SchedulePlus.Application")
If Not oSchedApp.LoggedOn Then
oSchedApp.LogOn
End If
'Устанавливаем ссылку на таблицу планируемых событий
Set oSchedTable = oSchedApp.ScheduleLogged.Appointments
'Создаем новое событие, в котором хотим участвовать
Set oSchedItem = oSchedTable.New ' Описываем это событие
oScedItem.SetProperties Text:="DevCon97", _
Notes:="Ежегодная международная конференция разработчиков Microsoft", _ Start:=("06/10/97 10:00"), _
End:=("06/13/97 18:00") ' Стираем ссылки на объекты
Set oSchedItem = Nothing
Set oSchedTable = Nothing
Set oSchedApp = Nothing End Sub
10.4. Применяем ActiveX
В этом параграфе на примерах иерархического списка и календаря мы опишем, как можно использовать элементы ActiveX в пользовательском приложении.
Иерархический список
Одним из поставляемых компонентов ActiveX (OCX) для средств разработки Microsoft является Outline. Необходимо сказать, что элемент управления Outline (файл MSOUTL32.OCX) представляет собой особую разновидность списка, в котором можно отображать элементы в иерархическом порядке. Этим пользуются при схематическом изображении каталогов и файлов в файловой системе. Именно такой метод применен в Windows 95 и Windows NT 4.0.
У каждого элемента в списке Outline могут быть подчиненные элементы, которые визуально
converted to PDF by HupBaH9I
представляются дополнительными уровнями с отступами. Когда элемент развертывается, его подчиненные элементы становятся видимыми. Когда элемент сворачивается, его подчиненные элементы скрываются. Элементы в списке Outline могут также сопровождаться графикой, служащей визуальным обозначением состояния элемента.
Элемент списка может сопровождаться любыми графическими элементами из числа следующих:
∙Линии древовидной структуры. Вертикальные и горизонтальные линии, связывающие первичные элементы с подчиненными. Линия дерева генерирует события Expand и Collapse.
∙Отступ. Характеристика уровня подчиненности элемента. Каждый уровень отступа соответствует определенному уровню подчиненности, который вы задаете с помощью свойства Indent.
∙Значок "плюс/минус". Указывает, видимы подчиненные элементы или скрыты. Если щелкнуть мышкой на значке "плюс", подчиненные элементы становятся видимыми и значок "плюс" заменяется значком "минус". Если щелкнуть мышкой на значке "минус", подчиненные элементы скрываются и значок минус заменяется значком "плюс".
∙Изображения типа. Отображают состояние элемента. На рисунках с изображением типа обычно показывается, допускает ли элемент, обладающий подчиненными элементами, развертывание или свертывание. Например, изображение закрытой папки указывает на то, что элементы каталога можно развернуть. Состояние элемента определяется пользователем. Рисунок с изображением типа генерирует события PictureClick и PictureDblClick.
∙Текст. Символьная строка, отображаемая для элемента.
Каждый графический элемент может представлять собой область, которая способна реагировать на действия пользователя. Если щелкнуть на изображении элемента, активизируется специальная группа событий.
Свойство Style позволяет задать или запретить отображение всех или некоторых графических элементов для каждого элемента списка Outline.
Чтобы выбрать элемент списка, необходимо щелкнуть (или дважды щелкнуть) на строке с соответствующим текстом. Щелчка мышкой только на графическом элементе недостаточно.
В качестве примера рассмотрим создание формы для Администратора БД, с помощью которой он может проконтролировать доступ пользователей к полям и таблицам БД. Для отображения структуры данных в БД Auto_Store используем элемент управления Outline.
Итак, начнем с того, что в Visual FoxPro создадим новую форму. Затем, выбрав команду Options из меню Tools, активизируем вкладку Controls. На данной вкладке в списке Selected установим крестик на пункте Outline Control, как это показано на рис. 10.11. Далее нажмем кнопку View Classes панели инструментов Controls и в открывшемся меню выберем OLE Controls. На рис. 10.12 показано меню кнопки View Classes. Таким образом, у вас появится возможность визуально поместить данный элемент управления в форму посредством нажатия кнопки Outline Control (рис. 10.13). Однако в Visual FoxPro есть и более простой способ подключения элементов управления ActiveX, включающий в себя ледующие действия:
converted to PDF by HupBaH9I
Рис. 10.11.
Рис. 10.12.
Рис. 10.13.
1.Создаем новую форму.
2.Нажимаем кнопку OLE Container Control панели инструментов Controls.
3.Обводим мышкой контур на форме для элемента управления Outline Control.
4.В открывшемся диалоговом окне Insert Object выбираем кнопку Insert Control и в списке
Control Type дважды щелкаем по элементу Outline Control (рис. 10.14).
Независимо от выбранного варианта действия в форме появится новый объект (рис. 10.15). Для определения свойств объекта Outline нажмите правую кнопку мыши на данном объектом и из контекстного меню выберите команду Properties.
converted to PDF by HupBaH9I
Рис. 10.14. Диалоговое окно Insert Object для размещения объекта Outline Control
Рис. 10.15. Элемент управления Outline в разрабатываемой форме
Для определения собственных изображений в иерархическом списке в диалоговом окне
Properties активизируем вкладку Pictures, где для свойств PictureClosed и PictureOpen установим соответствующие графические файлы. Найти их на диске можно с помощью диалогового окна, вызываемого при нажатии кнопки Browse (рис. 10.16).
converted to PDF by HupBaH9I
Рис. 10.16. Вкладка Pictures в диалоговом окне свойств Outline Control
Для определения цвета фона (BackColor) и цвета текста (ForeColor) в диалоговом окне Properties активизируем вкладку Colors, где для свойства ForeColor определяем синий цвет (рис. 10.17).
Рис. 10.17.
На рис. 10.18 показан Конструктор формы, использующий элемент управления Outline Control
и заданные свойства ForeColor, PictureClosed и PictureOpen.
converted to PDF by HupBaH9I
Рис. 10.18.
Для события Init объекта Olec1 записываем следующий код:
&&Помещаем в массив aTabList список таблиц из словаря данных.
&&В связи с установленным уровнем доступа, равным по умолчанию пяти,
&&данный список таблиц фильтруем с помощью предложения WHERE SELECT tableslist.table_name ;
FROM datavocabulary!tableslist ;
WHERE ALLT(Tableslist.table_name)<<>>"Sale" ;
AND ALLT(Tableslist.table_name)<<>>"Account" ;
AND ALLT(Tableslist.table_name)<<>>"Customer" ;
AND ALLT(Tableslist.table_name)<<>>"Order" ;
AND ALLT(Tableslist.table_name)<<>>"Salesman" ;
INTO ARRAY aTabList
&&Определяем значение переменной nnPabl nnPabl=0
&&Последовательно заносим список полей для каждой таблицы
&&в массивы 1nnAr, 2nnAr, 3nnAr, <193>
&&После чего в объект Olec1 добавляем имена таблиц и соответствующих
&&этим таблицам полей, а для каждого поля устанавливаем отступ (indent)=2
&&и тип изображения (PictureType)=2
FOR X=1 TO ALEN(aTabList) ThisForm.Olec1.AddItem(ALLT(aTabList(X))) nnTab=ALLT(aTabList(X)) nnAr="nnAr"+ALLT(STR(X))
SELECT Tables.field_name ; FROM datavocabulary!tables ;
WHERE Tables.table_name = nnTab ; INTO ARRAY &nnAr nnAddItem="ThisForm.Olec1.AddItem" nnArn="nnAr"+ALLT(STR(X))
FOR I=1 TO ALEN(&nnArn) &nnAddItem(ALLT(&nnArn(i))) nnBeby=nnPabl+X+I-1 ThisForm.Olec1.indent(nnBeby)=2 ThisForm.Olec1.PictureType(nnBeby)=2
ENDFOR nnPabl=nnPabl+ALEN(&nnArn)
ENDFOR