Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы / gorev_akhajan_makakshiripov_ehffektivnaja_rabota_s_subd

.pdf
Скачиваний:
52
Добавлен:
26.04.2015
Размер:
3.17 Mб
Скачать

Рис. 9.20.

Следующим окном, если вы выбрали кнопку OK в диалоге выбора шаблона, будет окно Конструктора меню. Это окно состоит из двух частей, как показано на рис. 9.21. В верхней части мы выбираем или вновь создаем название меню, команды меню или подменю. При работе с командой меню или подменю можно присвоить им макрокоманду, которая будет выполняться при ее выборе.

Рис. 9.21.

На первый взгляд выбор у нас не широк, так как этих макрокоманд всего три - "Запуск макроса", "Запуск программы" и "Команда меню". Но они позволяют запускать другие макрокоманды или процедуры, и поэтому круг возможных действий, которые может выполнить команда меню или подменю, значительно расширяется.

Чтобы запустить из нашего меню форму "Прием заказов", необходимо заранее подготовить

Ⱦɚɧɧɚɹ ɜɟɪɫɢɹ ɤɧɢɝɢ ɜɵɩɭɳɟɧɚ ɷɥɟɤɬɪɨɧɧɵɦ ɢɡɞɚɬɟɥɶɫɬɜɨɦ %RRNV VKRS Ɋɚɫɩɪɨɫɬɪɚɧɟɧɢɟ ɩɪɨɞɚɠɚ ɩɟɪɟɡɚɩɢɫɶ ɞɚɧɧɨɣ ɤɧɢɝɢ ɢɥɢ ɟɟ ɱɚɫɬɟɣ ɁȺɉɊȿɓȿɇɕ Ɉ ɜɫɟɯ ɧɚɪɭɲɟɧɢɹɯ ɩɪɨɫɶɛɚ ɫɨɨɛɳɚɬɶ ɩɨ ɚɞɪɟɫɭ piracy@books-shop.com

макрос или процедуру, которые будут выполнять эти действия.

В качестве примера создадим следующую очень простую процедуру:

Sub Прием заказа_открыть()

DoCmd.OpenForm "Прием заказа"

End Sub

Вначале мы должны создать линейку меню, которая должна иметь по крайней мере один элемент. Пункты линейки меню отличаются от команд меню и подменю тем, что у них нет отступа в нижней части окна Конструктора меню.

На рис. 9.21 "форма" - это пункт линейки меню, а "прием заказа" - это команда меню, которая выполняет макрокоманду "запустить программу", имеющую в качестве аргумента имя нашей процедуры "Прием заказа_открыть".

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

Положение элемента в нижней половине окна диалога и наличие отступа определяют, будет ли он пунктом линейки меню, командой меню или подменю, а также месторасположение этого элемента в получившемся меню.

Названия команд меню должны следовать за названиями пунктов меню, к которым они относятся, аналогично названия команд подменю должны следовать вслед за командой меню, которая будет их выводить. Если вы хотите просто вывести разделитель в каком-либо из меню, то сделайте заголовком элемента дефис.

Сохранив Построитель меню, вы получите новые макросы, число которых будет равняться числу элементов меню за вычетом тех элементов, заголовками которых является дефис.

www.books-shop.com

Глава 10

Использование готовых компонентов в приложении

10.1.Основные преимущества модульного проектирования прикладных программ

10.2.Как правильно использовать OLE 2.0

Возможности OLE 2.0 Использование OLE Automation Управление объектами Excel

Управление объектами Word for Windows

10.3.Использование OLE Automation для передачи данных Построение графиков с помощью MS Graph 5.0 Построение графиков с помощью MS Excel 7.0 Построение отчета в Word for Windows

Запись информации в Schedule+

10.4.Применяем ActiveX

Иерархический список Календарь

Наверное, вы не раз с завистью смотрели на мощные графические средства популярных электронных таблиц или изощренные возможности редактирования текста в текстовом процессоре. Вы наверняка сможете написать такую же программу, - но стоит ли повторять уже сделанное? Гораздо привлекательнее научиться использовать готовые функциональные блоки в пользовательском приложении.

10.1. Основные преимущества модульного проектирования прикладных программ

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

Вэтом параграфе мы расскажем о том, какие возможности дает среда Windows для решения поставленной в предыдущем абзаце цели и постараемся убедить вас в эффективности модульного проектирования пользовательского приложения.

Одно из наиболее часто используемых решений - ориентировка на заказные прикладные программы, которые дают конечным пользователям наилучший доступ к информации с учетом всех особенностей работы данного заказчика. Однако создание заказных прикладных программ может быть очень дорогостоящим и наверняка потребует больших затрат времени. К тому же, в соответствии с развитием организации или какими-то изменениями в профиле ее действия, заказное программное обеспечение придется постоянно корректировать. Если посмотреть на заказную прикладную программу с точки зрения выполнения ею отдельных функций, то окажется, что значительная часть поддерживаемых ею функций, таких как редактирование данных, выполнение расчетов и т. п., достаточно стандартны и могут быть легко выполнены с помощью стандартного программного обеспечения. Использование функциональных возможностей, доступных в существующих прикладных программах, может существенно ускорить

иудешевить процесс автоматизации обработки данных.

Например, прикладная программа, которая ищет с помощью системы управления базой данных сведения о потенциальных клиентах, может использовать возможности текстового процессора Microsoft Word for Windows для подготовки рекламных писем. Это решение позволяет использовать существующие функциональные возможности прикладных программ Microsoft Office, освобождая вас от необходимости разрабатывать всю прикладную программу.

Помимо несомненного выигрыша по времени, использование существующих прикладных программ в формировании заказных решений стимулируют следующие тенденции:

Быстрое повышение мощности и снижение стоимости персональных компьютеров.

Поистине революционные масштабы объединения вычислительных и информационных возможностей в рамках локальных и глобальных компьютерных сетей.

Высокие требования пользователей к качеству пользовательского интерфейса. Для персонального компьютера графический пользовательский интерфейс стал в настоящее время стандартом де-факто.

www.books-shop.com

Далее в этом и последующих параграфах данной главы мы рассмотрим наиболее важные аспекты, связанные с использованием функциональных возможностей Microsoft Office в прикладной программе для автоматизации обработки данных. Но сначала мы остановимся на тех средствах, которые составляют основу использования стандартного прикладного программного обеспечения в разрабатываемых пользовательских приложениях.

Стандартные прикладные программы Microsoft Office могут быть источником большого числа программных модулей (объектов) и составной частью инструментальных средств разработки благодаря функциональным возможностям стандарта OLE 2.0 и языка программирования

Microsoft Visual Basic for Application. Это означает, что прикладные программы Microsoft Office

содержат компоненты, которые вы можете использовать при разработке пользовательского приложения. Вы и пользователи ваших программ получаете тем самым следующие существенные преимущества:

Более эффективно используется стандартное программное обеспечение, которое, как правило, уже применяется пользователями.

Сокращается процесс обучения пользователей, которые используют уже имеющиеся навыки работы со знакомыми программами.

Использование стандарта OLE 2.0 является основой для разработки компонентного программного обеспечения, потому что этот стандарт обеспечивает средства для определения объектов и их совместного использования различными программами. Например, табличный процессор Microsoft Excel - одна из первых прикладных программ, которая предоставляет богатый набор объектов OLE. Библиотека объектных модулей OLE Microsoft Excel включает свыше 120 объектов и около 2700 связанных с ними методов и свойств. Эти объекты доступны через любую прикладную программу или язык, который поддерживает стандарт OLE 2.0, и их использование позволяет воспользоваться всеми функциональными возможностями Microsoft Excel без необходимости обеспечения этой функциональности в своей прикладной программе.

10.2. Как правильно использовать OLE 2.0

Стандарт OLE - Object Linked and Embedding (связывание и внедрение объектов) собственно своим названием определяет, что речь в нем идет о компоновке объектов и правилах их совместного использования для достижения интеграции среди прикладных программ. Представляя изображения, диаграммы, таблицы, фрагменты речи, документы и другие функциональные единицы программы как объекты, пользователи могут с большей легкостью объединять и обрабатывать данные из разных прикладных программ.

Вэтом параграфе мы изучим:

основные преимущества использования технологии OLE;

методику создания и использования OLE-объектов;

принципы работы OLE Automation.

Какие преимущества дает пользователю и разработчику эта технология? Вот основные из них:

Редактирование на месте позволяет работать с документом другого приложения Windows, не покидая пользовательского приложения. Необходимые элементы управления, включая меню, появятся на месте текущих, а после завершения работы вернутся на свое место элементы управления и меню пользовательского приложения. Это позволяет избежать необходимости ручной загрузки и перехода в другое приложение.

Перетаскивание данных между приложениями помогает реализовать наиболее естественный для пользователя метод сбора различных данных для использования в одном документе.

Технологии встраивания и связывания объектов дают возможность выбрать наиболее эффективный способ объединения разнородных данных в одном документе. При этом связывание позволяет не увеличивать без необходимости объем документа и использовать наиболее свежую версию данных, хранящуюся в отдельном файле. Встраивание обеспечивает хранение всех необходимых данных в одном приложении.

Поддержка вложенных объектов позволяет в одном документе держать несколько зависимых объектов без необходимости обращения к нескольким приложениям. Например, встроенная в форму электронная таблица Excel может содержать встроенную в таблицу диаграмму. Изменения в электронной таблице повлекут изменения в диаграмме.

OLE Automation позволяет в приложении программным путем устанавливать свойства и задавать команды для объектов другого приложения. Это дает большие возможности для

www.books-shop.com

управления процессом подготовки текстовых документов высокого качества, формирования графиков или выполнения расчетов.

Возможности OLE 2.0

Стандарт OLE 2.0 описывает правила интеграции прикладных программ.

Он фактически расширяет пользовательский интерфейс, делая его более интуитивно понятным. Стандарт OLE 2.0 не ставит пользователя перед необходимостью набора команд или выбора опций, предоставляя возможность выполнять работу более естественным способом, управляя объектами в интерактивном режиме на экране компьютера. Пользователь, вместо того чтобы изучать методы работы с прикладный программой или операционной системой, может сосредоточиться на более эффективной работе с данными и документами.

Технология OLE 2.0 особенно полезна потому, что устанавливает стандартный метод взаимодействия между прикладными программами при использовании различных объектов (документов, подготовленных разными прикладными программами). Она предлагает мощные средства для создания документов, получающих данные из разнообразных источников информации. Такие документы называются составными документами. Объекты, которые они содержат, могут включать почти любой тип информации, в том числе текст, растровые изображения, иллюстрации и фрагменты речи.

В технологии OLE 2.0 выделяются два главных типа данных, связанных с объектом: данные представления и локальные данные.

Данные представления объекта - это информация, нужная для представления объекта на экране компьютера, в то время как локальные данные объекта - это вся информация, необходимая для прикладной программы, чтобы редактировать объект.

Используя OLE 2.0 пользователь может также связывать или включать объект в документ.

Связывание - это процесс, при котором в документ будут помещены только данные представления объекта и ссылка (или указатель на местонахождение) на локальные данные.

Локальные данные, связанные с объектом, существуют в некотором другом файле на диске. Всякий раз, когда объект модифицируется прикладной программой, этот файл открывается и прикладная программа использует хранящиеся в нем локальные данные. Пользователь работает со связанным объектом так, как будто он полностью содержится внутри документа.

Включение объекта физически помещает данные представления объекта и локальные данные внутри документа.

Вся информация, необходимая для редактирования объекта, содержится в документе. Любой объект, который содержит другие объекты (как связанные, так и вложенные), называется контейнером. Контейнерами чаще всего являются составные документы.

Включение объектов хотя и увеличивает объем документа, но позволяет перемещать объект наряду с документом на другой компьютер и тем самым редактировать такие объекты на различных рабочих местах. Связанные объекты не могут "путешествовать" с документами за пределы локальной файловой системы компьютера, но они более эффективны, чем вложенные объекты, потому что один образец локальных данных объекта может служить источником для большого числа различных документов.

Использование OLE Automation

Один из важнейших элементов стандарта OLE 2.0 - OLE Automation - определяет способ управления командами прикладной программы из другой прикладной программы.

www.books-shop.com

Прикладные программы, поддерживающие OLE Automation, имеют соответствующие объекты, которые так и называются - объекты OLE Automation, посредством которых вы можете управлять работой всех остальных объектов прикладной программы, используя возможности Visual Basic for Application.

OLE Automation для управления объектами использует OLE-серверы.

OLE-сервер - это программа, которая может предоставить другим программам возможность использовать свои объекты.

Программы, которые могут управлять объектами OLE-серверов, называются OLE-клиенты или

OLE-контроллеры.

Например, в версии 3.0 Visual FoxPro может выполнять функции только OLE-контроллера. Мы можем управлять объектами OLE-сервера, но не можем предоставить в чье-либо управление объекты Visual FoxPro.

Большинство OLE-серверов являются так называемыми серверами Out-of-Process. Они являются исполняемыми программами и могут взаимодействовать как с 16-bit, так и с 32-bit OLEконтроллерами. Расплатой за это является невысокая скорость обмена данными и значительные потребляемые ресурсы памяти. Другой тип OLE-сервера называется In-Process и представляет собой DLL-библиотеку, которая динамически подгружается и выгружается по необходимости. Хорошим примером такого сервера является процессор баз данных СУБД Access 7.0. Обмен данными с этим типом OLE-сервера происходит значительно быстрее, но работать он может только с OLE-контроллером такой же разрядности.

В табл. 10.1 приводится важная для разработчика информация о некоторых OLE-серверах

Microsoft.

Таблица 10.1. OLE-серверы Microsoft

OLE-сервер

Где найти информацию

 

об объектах

Серверы Out-of-Process

Microsoft Schedule+ 7.0

-

Microsoft Graph 5.0

VBA_GRP.HLP

Microsoft Word 7.0

WRDBASIC.HLP

Microsoft Excel 7.0

VBA_XL.HLP

Cерверы In-Process

Data Access Object

DAO.HLP, DAOSDK.HLP

SQL Distributed

SQLBOOKS.MVB

Management Objects

 

Вкачестве примера приведем несколько OLE-объектов для Microsoft Excel:

Application - запускает программу Microsoft Excel;

Workbook - рабочая книга, которая включает отдельные листы - один файл формата

Microsoft Excel;

Chart - график в рабочей книге;

Worksheet - рабочий лист в книге;

Range - одна ячейка или диапазон ячеек на листе.

Втаких больших приложениях, как Microsoft Excel, мы сталкиваемся с очень большим количеством объектов. Причем каждый объект занимает свое строго определенное положение в иерархии объектов. Поэтому, обращаясь к объекту, мы должны, соответственно, перемещаться по этой иерархической структуре. Наверху иерархии находится объект Application. Какие-либо события или действия, связанные с этим объектом, будут иметь отношение в целом к прикладной программе. Например, для того чтобы закрыть приложение, мы должны написать такую команду:

Application.Quit

www.books-shop.com

Объект Application включает в себя большое количество других объектов. Например, вы можете использовать следующую команду для ссылки на текущую рабочую книгу, открытую в

Microsoft Excel:

Application.Workbooks

Заметьте, что название объекта Workbooks приводится во множественном числе, потому что это ссылка на коллекцию объектов, в данном случае рабочих книг.

Объект коллекции - это набор объектов, имеющих общие свойства, события и методы, что позволяет сослаться на них как на единый объект.

Объекты коллекции позволяют значительно проще выполнять многие распространенные действия с прикладной программой. Например, для выполнения действий с каждым объектом в коллекции можно использовать оператор цикла:

*Организуем ссылку на запущенное приложение oExlApp = GETOBJECT(,"Excel.Application")

nWrk = 1

*Определяем, сколько открыто рабочих книг nCount = oExlApp.Application.WorkBooks.Count FOR nWrk = 1 TO nCount

*Выведем наименование каждой рабочей книги

? oExlApp.Application.WorkBooks.Item(nWrk).FullName NEXT

*Закроем приложение

oExlApp.Application.Quit

Чтобы запустить этот пример, загрузите Excel, откройте несколько файлов. В Visual FoxPro наберите приведенный в примере код в программном файле. В окне Command сделать это нельзя из-за команды FOR, которая не поддерживается в интерактивном режиме командного окна. Вам также может показаться, что в этом фрагменте лишней является переменная nCount. Это не так! При использовании OLE Automation не встраивайте ее код внутрь команд Visual FoxPro. Запустите программный файл.

Как вы могли заметить из приведенного примера, для ссылки на одну рабочую книгу в коллекции мы применяли метод Item, в котором используется номер элемента коллекции. Для ссылки на первую рабочую книгу в коллекции укажите:

Application.Workbooks.Item(1)

Для того чтобы закрыть первую книгу в коллекции:

Application.Workbooks.Item(1).Close

В свою очередь каждая рабочая книга содержит коллекцию рабочих листов, каждый рабочий лист - коллекцию ячеек и т. д. В программе сослаться на ячейку A1 можно таким образом:

Application.Workbooks.Item(1).Worksheets.Item("Sheet1").Cells.Item(1,1)

Как видно из приведенных примеров, мы должны разбираться в коллекциях для того, чтобы иметь возможность спускаться "вниз" по иерархии объектов. На рис. 10.1 приведена схема такого перемещения между объектами Microsoft Excel.

www.books-shop.com

Рис. 10.1. Перемещение вниз по иерархии объектов с помощью коллекций в Microsoft Excel

Принцип перемещения вверх по иерархии более привычен для программиста, освоившего объектно-ориентированное программирование. Для этого используется свойство Parent и пока отсутствующее в Visual FoxPro, но привычное для приложений Microsoft Office свойство Application. Соответствующая схема для использования этих свойств приведена на рис. 10.2.

Рис. 10.2.

При использовании OLE Automation очень важным понятием является понятие объектов верхнего уровня.

В каждом приложении объекты верхнего уровня позволяют ссылаться на них из другой программы.

Имеющиеся, например, в Microsoft Excel объекты верхнего уровня представлены на рис. 10.3.

www.books-shop.com

Рис. 10.3.

Несколько ранее вы, наверное, уже обратили внимание, что ссылка на вновь создаваемый объект OLE Automation в программе Visual FoxPro выполняется так же, как при не визуальном программировании на новый объект самого Visual FoxPro - с помощью функции

CREATEOBJECT(ClassName [, eParameter1, eParameter2, ...])

Если OLE-объект уже существует, получить на него ссылку можно с помощью функции

GETOBJECT([FileName ][, ClassName])

Параметр FileName позволяет указать имя существующего файла (и при необходимости путь к нему), содержащего OLE-объект, который необходимо активизировать. С помощью параметра ClassName можно указать имя объекта верхнего уровня (класс OLE-объекта). Это необходимо в том случае, если, как мы это показали на примере Microsoft Excel, в приложении в одном файле может храниться несколько объектов верхнего уровня, например таблицы, графики и т. д. В данном случае для параметра должен использоваться следующий синтаксис:

<<"Имя приложения">>.<<"Имя объекта верхнего уровня">> Например:

oSht = GETOBJECT("C:\VFP\SAMPLE\VAT.XLS","EXCEL.SHEET")

В Visual Basic и соответственно Access мы можем использовать аналогичные функции, но для обеспечения ссылки на объект необходимо применять оператор Set, как показано в следующих примерах:

`В первом примере создаем объект MS Excel Dim oExlApp As Object

' Объявляем переменную для ссылки на объект

Set oExlApp = CreateObject("Excel.Application")

`Создаем объект

oExlApp.Visible = True ' Выводим объект на экран

...

oExlApp.Quit ' После окончания работы закрываем Excel Set oExlApp = Nothing ' Стираем ссылку на объект из памяти ` Во втором примере ссылаемся на объект MS Excel

Dim oExlApp As Object

Set oExlApp = GetObject("C:\VFP\SAMPLE\VAT.XLS","Excel.Sheet")

...

Set oExlApp = Nothing

Управление объектами Excel

www.books-shop.com

Для того чтобы остановиться на проблемах взаимодействия пользовательского приложения с объектами Excel, нам придется более подробно обсудить специфические в данном случае особенности работы функций CREATEOBJECT() и GETOBJECT(). Поэтому систематизируем необходимые данные для важнейших объектов верхнего уровня Microsoft Excel и приведем их в табл. 10.2.

Таблица 10.2. Поведение объектов верхнего уровня Microsoft Excel

Объект Функция Описание поведения

Application CreateObject Всегда запускает невидимую копию Microsoft Excel. Файл рабочей книги не загружается.

GetObject Если параметр FileName представляет собой пустую строку, запускается новая невидимая копия Microsoft Excel без загрузки файла рабочей книги. Если параметр пропущен, то предпринимается попытка получить ссылку на уже запущенную копию Microsoft Excel и в случае неудачи генерируется ошибка. Не указывайте в параметре FileName имя файла. Для этого случая используйте объекты Sheet или Chart.

Sheet или CreateObject Если не существует

Chart

запущенной копии Microsoft

 

Excel, то запускается

 

невидимая копия и создается

 

рабочая книга с именем

 

"Object" и один рабочий лист

 

с именем "Sheet1". Для

 

объекта Chart помимо этого

 

создается еще один рабочий

 

лист с именем "Chart1". Как

 

только ссылка на созданный

 

объект перестает

 

существовать (стирается),

 

рабочая книга удаляется, но

 

Excel остается загруженным в

 

памяти компьютера. Если

 

одна или несколько копий

 

Microsoft Excel уже

 

запущены, то добавляется

 

рабочая книга с

 

параметрами, как это было

 

описано в предыдущем

 

абзаце. В случае, когда уже

 

работает несколько копий

 

Excel, предугадать, в какой

 

из них будет добавлена

 

таблица, невозможно.

GetObject

Если параметр FileName

 

является допустимым

 

(существующим) именем

 

файла и Microsoft Excel не

 

запущен, то запускается

 

новая невидимая его копия с

 

невидимой рабочей книгой.

 

Если хотя бы одна копия

 

Microsoft Excel уже запущена,

www.books-shop.com

Соседние файлы в папке лабы