Создание пользовательской библиотеки

   
На этом шаге мы рассмотрим создание пользовательской библиотеки.

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

   
Для создания модуля используем команду File | New | Unit главного меню Delphi (рисунок 1).


Рис.1. Создание модуля

   
В результате будет создан файл с расширением PAS, представляющий собой пользовательский модуль.
В этом модуле пока нет ни одной функции и процедуры (рисунок 2). Модуль состоит из заголовка и секций interface и implementation.


Рис.2. Структура пользовательского модуля

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

   
Создадим модуль, который будет содержать необходимые функции для работы с документами Word.
Заголовок этого модуля представляет собой комбинацию слов unit MSWORD, где первое является
зарезервированным словом, обозначающим заголовок, а второе соответствует имени блока, которое должно совпадать
с именем файла. После зарезервированного слова interface перечисляются определения типов, констант и
переменных, которые могут быть доступны для других модулей, там же перечисляются и заголовки функций.
Следующий исходный текст является фрагментом модуля, в который входят заголовок и секция interface.
Создадим в модуле несколько функций для работы с MS Word и опишем заголовки этих функций в секции
interface создаваемого модуля.

interface
var CreatedWord:boolean;
Function CreateWord:boolean;
Function VisibleWord (visible:boolean):boolean;
Function AddDoc(name:string):variant;
Function CloseDoc(document:variant):boolean;
Function CloseDocEx(document:variant;saved: boolean):boolean;
Function CloseWord:boolean;
Function OpenDoc(name:string):variant;
Function CopyTextDocToClipboard(doc:variant) :boolean;
Function ImportTextFromDoc(doc:variant):string;

   
Из имен функций понятно, что они предназначены для создания объекта Word.Application, визуализации окна
приложения Word, создания, открытия и закрытия документа, а также для работы с текстовыми модулями.

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

uses
   Windows,SysUtils,ComObj, Variants;
var
   W:variant;

   
Особо следует отметить ссылку на библиотеку ComObj и переменную W:variant. Мы используем
функцию CreateOleObject из этой библиотеки, создающую ссылку на объект Application и сохраняющую
его в переменной W. Это реализуется в функции CreateWord, которая в случае удачного выполнения
возвращает значение True.

Function CreateWord:boolean;
//Получение ссылки на объект Application
begin
  CreateWord:=True;
  CreatedWord:=True;
  try
    W:=CreateOleObject('Word.Application');
  except
    CreateWord:=False;
    CreatedWord:=False;
  end;
End;

   
После удачного выполнения функции переменная CreatedWord будет содержать значение True, а переменная
W - ссылку на объект Application, после чего можно переходить к выполнению других функций.

   
Рассмотрим следующие функции для работы с MS Word, например функцию для визуализации окна Word.

Function VisibleWord(Visible:boolean):boolean;
//Визуализация окна приложения Word
begin
   VisibleWord:=True;
   try
     W.Visible:= Visible;
   except
     VisibleWord:=False;
   end;
End;

   
Данная функция, используя свойство Visible объекта Application, позволяет скрыть или отобразить
окно приложения Word. В случае успешного выполнения она возвращает значение True, при
возникновении исключительной ситуации ошибка обрабатывается и функция возвращает значение False.

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

Function AddDoc(name:string):variant;
//Создание документа
var
  Docs:variant;
begin
  AddDoc:=null;
  try
    Docs:=W.Documents;
    AddDoc:=Docs.Add(name);
  except
    AddDoc:=null;
  end;
End;

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

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

Function OpenDoc(name:string):variant;
//Открытие существующего документа
var
  Docs:variant;
begin
  OpenDoc:=True;
  try
    Docs:=W.Documents;
    OpenDoc:=Docs.Open(name);
  except
    OpenDoc:=null;
  end;
End;

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

Function CopyTextDocToClipboard(doc:variant):boolean;
//Копирование содержимого документа в буфер обмена
begin
  CopyTextDocToClipboard:=True;
  try
    doc.Range.Select;
    W.Selection.Copy;
  except
    CopyTextDocToClipboard:=False;
  end;
End;

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

   
Обмен информации непосредственно между документом и приложением Delphi можно организовать, воспользовавшись
другим способом, реализованным в следующей функции (эта функция возвращает строку текста, импортированную из
документа Word),

Function ImportTextFromDoc(doc:variant):string;
//Импорт текста из документа Word
begin
  ImportTextFromDoc:='';
  try
    ImportTextFromDoc:=doc.Range.Text;
  except
    ImportTextFromDoc:='';
  end;
End;

   
После окончания работы с документом необходимо его закрыть, а также закрыть приложение Word.
Используем для этого следующие функции. Функцию закрытия документа можно реализовать двумя способами:
закрыть документ, если он был до этого сохранен (первый вариант), или сохранить документ в момент его закрытия;
закрыть документ без сохранения (второй вариант).

//Закрытие документа
Function CloseDoc(document:variant):boolean;
begin
  CloseDoc:=True;
  try
    document.Close;
  except
    CloseDoc:=False;
  end;
End;

Function CloseDocEx(document:variant;saved:boolean):boolean;
begin
  CloseDocEx:=True;
  try
    document.Close(saved);
  except
    CloseDocEx:=False;
  end;
End;

   
После закрытия документов закрываем приложение Word и освобождаем память компьютера. Для
освобождения памяти компьютера используем оператор:

    W:=UnAssigned;
Function CloseWord:boolean;
//Закрытие приложения Word
begin
  CloseWord:=True;
  try
    W.Quit;
    W:=UnAssigned;
  except
    CloseWord:=False;
  end;
End;

   
На следующем шаге мы рассмотрим пример использования созданной библиотеки.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий