Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 9
На сайте нет зарегистрированных пользователей

Пользователей: 13,370
новичок: dogoco6
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Метод конечных разностей для интерполяции/экстраполяции на Delphi
Обучающая и тестирующая программа по здаче экзамена ПДД на Turbo Pascal ...
Моделирование процесса обеспечивающего надежность функционирования АСУ Т...

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



В предыдущих главах мы рассмотрели свойства и методы объектов
Application приложений Word и Excel. На основе этих методов были рас-
смотрены фрагменты приложений, позволяющих создавать и работать с до-
кументами Word и Excel, но в больших приложениях работать с объектами
Application непосредственно в модулях форм не всегда удобно. Как правило,
это связано с тем, что в приложении приходится вставлять и использовать
код обработки ошибок или использовать несколько операторов обращения
к объектам. Все это приводит к увеличению исходного текста модуля фор-
мы, что затрудняет написание сложных приложений. Решать эту проблему
можно несколькими способами. Одним из таких способов является разра-
ботка и использование пользовательской библиотеки. Рассмотрим создание и
использование такой библиотеки для работы приложений с документами
Word.
Для создания модуля используем команду File > New главного меню Delphi,
в результате выполнения которой откроется диалоговое окно выбора типа
создаваемого объекта (рис. 17.1).
В этом окне выбираем тип создаваемого объекта Unit, в результате чего бу-
дет создан файл с расширением PAS, представляющий собой пользователь-
ский модуль. В этом модуле пока нет ни одной функции и процедуры
(рис. 17.2). Модуль состоит из заголовка и секций interface и implementation.

Рис. 17.1. Диалоговое окно выбора типа создаваемого объекта

Рис. 17.2. Структура пользовательского модуля
Секция interface должна содержать описания заголовков процедур и функ-
ций модуля, а также переменные, которые будут доступны из других моду-
лей. Секция implementation содержит переменные, которые не будут дос-
тупны для других модулей, и полные тексты процедур и функций.
Создадим модуль, который будет содержать необходимые функции для ра-
боты с документами Word. Заголовок этого модуля представляет собой ком-
бинацию слов "unit MSWORD", где первое является зарезервированным
словом, обозначающим заголовок, а второе соответствует имени блока, ко-
торое должно совпадать с именем файла. После зарезервированного слова
interface перечисляются определения типов, констант и переменных, кото-
рые могут быть доступны для других модулей, там же перечисляются и за-
головки функций. Следующий исходный текст является фрагментом моду-
ля, в который входят заголовок и секция interface. Создадим в модуле не-
сколько функций для работы с MS Word и опишем заголовки этих функций
в секции interface создаваемого модуля.
Заголовок и секция interface создаваемого модуля
unit MSWORD;
interface
var CreatedWord:boolean;
Function CreateWord:boolean;
Function VisibleWord(visible:boolean):boolean;
Function AddDoc(file_:string):variant;
Function CloseDoc(document:variant):boolean;
Function CloseDocEx(document:variant;saved_:boolean):boolean;
Function CloseWord:boolean;
Function OpenDoc(file_:string):variant;
Function CopyTextDocToClipboard(doc_:variant):boolean;
Function ImportTextFromDoc(doc_:variant):string;



Из имен функций понятно, что они предназначены для создания объекта
Word.Application, визуализации окна приложения Word, создания, открытия
и закрытия документа, а также для работы с текстовыми модулями.
Рассмотрим секцию implementation и функции, представленные в ней.
В начале секции перечисляются библиотеки функций и процедур, исполь-
зуемых в создаваемом модуле, затем следует описание типов, констант и
переменных, после которых идет описание процедур и функций модуля.
Секция implementation модуля
implementation
uses Windows,Sysutils,ComObj;
var W:variant;



Особо следует отметить ссылку на библиотеку ComObj и переменную
Wrvariant. Мы используем функцию CreateOleObject из этой библиотеки,
создающую ссылку на объект Application и сохраняющую его в перемен-
ной W. Это реализуется в функции CreateWord, которая в случае удачного
выполнения возвращает значение True.
Получение ссылки на объект Application
Function CreateWord:boolean;
begin
CreateWord:=True;
CreatedWord:=True;
try
W:=CreateOleObject('Word.Application1);
except
CreateWord:=False;
CreatedWord:=False;
end;
End;



После удачного выполнения функции переменная CreatedWord будет со-
держать значение True, а переменная W — ссылку на объект Application,
после чего можно переходить к выполнению других функций.
Рассмотрим следующие функции для работы с MS Word, например функ-
цию для визуализации окна Word.
Визуализация окна приложения Word
Function VisibleWord(Visible:boolean):boolean;
begin
VisibleWord:=True;
try
W.Visible:= Visible;
except
VisibleWord:=False;
end;
End;



Данная функция, используя свойство Visible объекта Application, позволяет
скрыть или отобразить окно приложения Word. В случае успешного выпол-
нения она возвращает значение True, при возникновении исключительной
ситуации ошибка обрабатывается и функция возвращает значение False.
Для создания нового документа или открытия существующего документа,
сохраненного в файле, используем функции, возвращающие ссылку на соз-
данный или открытый документ.
Создание документа
Function AddDoc(file_:string):variant;
Var Docs_:variant;
begin
AddDoc:=null;
try
Docs_:=W.Documents;
AddDoc:=Docs_.Add(file_);
except
AddDoc:=null;
end;
End;



В представленной функции переменная Docs_:variant используется для дос-
тупа к коллекции документов. После того как в нее была записана ссылка
на коллекцию Documents, мы имеем возможность обращаться к свойствам
коллекции через эту переменную.
Для открытия документа, созданного ранее и сохраненного в файле, ис-
пользуем следующую функцию.
Открытие существующего документа
Function OpenDoc(file_:string):variant;
Var Docs_:variant;
begin
OpenDoc:=True;
try
Docs_:=W.Documents;
OpenDoc:=Docs_.Open(file_);
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).
Импорт текста из документа Word
Function ImportTextFromDoc(doc_:variant):string;
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;



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



Используя перечисленные функции, которые собраны в модуле, сформиру-
ем простой документ на основе шаблона — текст на почтовом конверте.
Следующая процедура формирует этот документ.
Создание документа на основе шаблона
procedure TForm1.ButtonlClick(Sender: TObject);
begin
// Создаем новый документ по шаблону
document:=AddDoc(ExtractFileDir(Application.ExeName)+
'\Шаблон конверта.dot');
messagebox(handle,'Шаблон почтового конверта создан!','Внимание!',О);
// Подставляем адрес
FindAllAndPasteTextDoc(document,'###индекс&','350049');
FindAllAndPasteTextDoc(document, '###адрес&',
'Краснодар, ул. Севастопольская, д. 3, кв. 123');
FindAllAndPasteTextDoc(document,'###получатель&',
'Иванов Иван Иванович');
// Обратный адрес
FindAllAndPasteTextDoc(document,'###обратный индекс&','198005');
FindAllAndPasteTextDoc(document,'###обратный адрес&',
'Санкт-Петербург, Измайловский пр., д. 29, кв. 111');
FindAllAndPasteTextDoc(document,'###отправитель&',
' Петрова Светлана Ивановна');
end;



Мы создали, а затем и использовали в своем приложении библиотеку про-
цедур и функций, позволяющую работать с документами Word. Аналогич-
ным образом создается библиотека для работы с рабочими книгами Excel.
Исходные тексты этих библиотек представлены в приложении на сопрово-
дительном компакт-диске книги. Их можно легко модифицировать и ис-
пользовать под свои задачи. Далее рассмотрим создание динамической биб-
лиотеки DLL на базе созданного модуля.
Опубликовал Kest October 05 2009 13:37:01 · 0 Комментариев · 10957 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Просмотр файлов и...
AJAX и PHP. разра...
Основы программир...
Дарахвелидзе П., ...
Win-Prolog 3.618
Handles
iChat v.7.0 Final...
DemoEdit [Исходни...
Обучение Borland ...
CoolDev TipsSyste...
Blobs [Исходник н...
Таймер и секундомер
Технология .Net в VB
Иллюстрированный ...
WinAmp
3d Tank [Исходник...
Comdrv
PHP: Полезные приемы
Animated Menus
Printgrid

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97836
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10291
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Фаза определения в...
Тайны алхимии со с...
Кодирование
• Инициализация во...
Примените шаблон б...
Широкие файловые п...
Культура отношения
Строительство домов
IP адрес, подсети,...
3.1. Обработка спе...
Соединения должны ...
Вулкан на Андроид
Администратор
Передача в едином ...
В современных сист...
Конкретизация шабл...
Особенности VPS/VD...
Перегрузка операци...
Как правильно выбр...
Объекты классов [C++]
Магнитное склонени...
Создание и конфигу...
Процедура Ellipse ...
Форматы видеоизобр...
неотрицательность ...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?