Навигация
Главная
Поиск
Форум
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
Создание отчето... 65458
Модуль Forms 65218
Пример работы с... 64715
ТЕХНОЛОГИИ ДОСТ... 61911
Имитационное мо... 57791
Реклама
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

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

Моделирование ЭВМ на GPSS (три класса заданий) + Пояснительная записка
Моделирование станции технического обслуживания на GPSS + Отчет
Моделирование вычислительного центра на GPSS + Отчет + Блок схема

Реклама



Подписывайся на 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 Комментариев · 7160 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
NotePad Pro [Исхо...
BIOS
DelphiXIsoDemo1
Игра PackMan
DragMe [Исходник ...
Prolog Interprete...
StartMark
Battle.Net - мони...
Последнее загруж...
Панель "ссылки"
Calendar
Калькулятор [Исхо...
DelphiX
Tag Игра "Пятнашк...
Delphi 2005. Разр...
Анимированное поя...
IpEditAdress
ProLIB18
Billenium Effects...
ZipForge

Топ загрузок
Приложение Клие... 100470
Delphi 7 Enterp... 87103
Converter AMR<-... 20078
GPSS World Stud... 12856
Borland C++Buil... 11848
Borland Delphi ... 8604
Turbo Pascal fo... 7039
Visual Studio 2... 4999
Калькулятор [Ис... 4803
FreeSMS v1.3.1 3542
Случайные статьи
ПРИМЕРЫ ЗАПИСИ ПРИ...
Видеоприложения со...
Занятие 3
Ввод массива
Анонимность в Mirc
Багажный бокс
Просмотр курсора, ...
Металлические опор...
Счет в Сингапуре
Заданы целые числа...
ей право сбрасыват...
Режим воспроизведе...
Зачем нужны классы?
Построение дерева ...
Очистка кэша в Int...
Работа для студентов
Снова IUnknown
Как обойти AVP
АНТИПАТТЕРН: ПРЕДП...
Сколько еще будет ...
Зачем нужен файл s...
Вулкан онлайн - ву...
Манипуляторы
Структцра программ...
Режим нагрева водо...
Статистика



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


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