Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 64174
Модуль Forms 63889
Пример работы с... 60823
ТЕХНОЛОГИИ ДОСТ... 60766
Имитационное мо... 56298
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

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

Моделирование автовокзала + Отчет + Блок схема
Лабораторная работа по динамическим спискам на Turbo Pascal (перемещение...
Принадлежит ли точка пересечению двух окружностей на Turbo Pascal + Отче...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Создание пользовательской библиотеки



В предыдущих главах мы рассмотрели свойства и методы объектов
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 17:37:01 · 0 Комментариев · 7101 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Система баннеро-о...
WebReg v1.3
Ics
Защита от спама ...
WinPopup
Добавление к ссы...
Pass [Исходник на...
Tank [Исходник на...
BSButton
Игра PackMan
Игра "Астероиды" ...
Сложный калькулятор
Генетический алго...
XPmenu
DragMe [Исходник ...
Размещение элемен...
Разработка Web-пр...
С# для профессион...
Мод "проверочный ...
PDJPack

Топ загрузок
Приложение Клие... 100455
Delphi 7 Enterp... 86141
Converter AMR<-... 20071
GPSS World Stud... 12523
Borland C++Buil... 11609
Borland Delphi ... 8522
Turbo Pascal fo... 7035
Visual Studio 2... 4992
Калькулятор [Ис... 4744
FreeSMS v1.3.1 3539
Случайные статьи
узлами и что сеанс...
Содержание
Датчики давления
Состав программног...
Реализация вызова ...
Приведем графическ...
компьютеров:: если...
транспортном режим...
Что такое PageRank ?
Язык программирова...
Несколько слов о ш...
Обработка страничн...
Оформление гиперсс...
экономия места на ...
Взаимодействие ком...
Как найти несколь...
16-2)
Восходящий граммат...
Тематические интер...
Песочные часы
Фрикинг телефонных...
Программная архите...
Ландшафтный дизайн
nl
Как использовать п...
Статистика



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


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