Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Меньшикова / Пособие - 5 курс / К.Г.Меньшикова -32 с.doc
Скачиваний:
15
Добавлен:
13.03.2016
Размер:
321.02 Кб
Скачать
    1. Работа с серверами из Delphi (позднее связывание)

При создании контроллеров позднего связывания на Delphi следует обратить особое внимание на различия в синтаксисе обращений к членам коллекций объектов Excel и Word: в случае MS Word используется метод Item, в Excel члены коллекции рассматриваются как элементы массивов. В предыдущем параграфе было показано, что в С++Builder различие офисных серверов сказалось на использовании различных функций.

При работе с MS Excel доступ к объектам можно организовать так:

AppE:=CreateOleObject('Excel.Application'); WorkBs:=AppE.Workbooks; WorkSh:=AppE.Workbooks[1].WorkSheets[2]; WorkSh:=AppE.ActiveWorkBook.WorkSheets[2];

Методы серверных объектов можно вызывать обычным образом:

WorkBs.Add; AppE.Quit; AppE.Workbooks[2].Activate; AppE.WorkBooks[2].Close; AppE.ActiveWorkBook.Close(True,'D:\Work1.xls');

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

Задание свойств объектов не отличается от случая обычных компонентов AppE.Visible:=true; Worksh.Name:='Результаты';

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

Worksh.Cells[1,2].Value:=25; Worksh.Cells[1,2].Font.Name:='Arial'; AppE.WorkBooks[1].WorkSheets[3].Range['B2:C4'].Value:='5';

В случае контроллера MS Word доступ к объектам выглядит несколько иначе:

WordDs:=AppW.Documents; WordD:=WordDs.Item(1); WordPar:=WordD.Paragraphs.Item(3);

Перед вызовом методов объекта коллекции также приходится предварительно обращаться к методу Item:

AppW.Documents.Item(2).Activate;

Работа с текстом может осуществляться так:

// вставка текста после указанного абзаца Rng:= AppW.ActiveDocument.Paragraphs.Item(1).Range; Rng.InsertAfter(‘Новый текст’); Rng.Copy; // копирование фрагмента текста AppW.Documents.Item(1).Paragraphs.Item(2).Range.Paste; // вставка текста после символов: WordD.Range(6,8).InsertAfter('Текст 2');

  1. Элементы управления ActiveX

    1. Создание ActiveX на основе компонентов vcl

Для демонстрации создадим управляющий элемент на основе компонента TMonthCalendar:

  • открыть окно галереи объектов и создать пустую библиотеку, выбрав значок ActiveX Library на странице ActiveX. Сохранить проект (например, MC_Project.dpr);

  • добавить в созданную библиотеку элемент управления, выбрав значок ActiveX Control и заполнить поля диалогового окна ActiveX Control Wizard: VCL Class Name (выбрать TMonthCalendar), New ActiveX Name (предложено MonthCalendarX), Implementation Unit;

  • сохранить, скомпилировать проект и зарегистрировать ActiveX в реестре.

Для регистрации используется команда Run | Register ActiveX Server, и будет получено сообщение: Successfully registred ActiveX Server, ‘D:\ActiveX\Delphi – ActiveX\ MC_Project.ocx’. В папке проекта можно видеть, что кроме самого элемента ActiveX (файл MC_Progect.ocx), создана его библиотека типов (файл MC_Project.tlb).

    1. Тестирование ActiveX

Лучшим средством для тестирования элементов управления являются инструментарии фирмы Microsoft, так как спецификация элементов управления создавалась, в первую очередь, в расчете на эти средства разработки. К тому же проверять работоспособность созданного элемента лучше в среде, отличной от среды его создания. Для созданного нами элемента можно использовать Visual Basic, Visual C++, а проще всего Visual Basic for Applications (Microsoft Word или Excel).