Гнучка пошукова система обліку науково-дослідницької документації

Розробка гнучкої пошукової системи обліку науково-дослідницької документації за допомогою інструментального засобу прискореної розробки програмного забезпечення Delphi та технології доступу до бази даних ADO з використанням бази даних в форматі MS Access.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 22.10.2012
Размер файла 5,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Запит для DetailSQL наступний:

select PartNo, OnOrder, OnHand, ListPrice, Description, Cost

from parts where VendorNo =:VendorNo

VendorNo у частині where - параметр запиту. Параметри при встановленому DataSource беруться з нього.

Активізуємо MasterSQL і DetailSQL аналогічно попередньому прикладові.

3.3.4 Використання параметрів запиту

Тепер обмежимо вибірку постачальників за значенням полючи State. Для цього додамо до форми наступні компоненти StateEdit типу TEdit c вкладки Standard, QueryButton типу TButton c вкладки Standard

Змінимо запит у MasterSQL на StateID - параметр, замість якого при виконанні підставляється значення.

select VendorNo, VendorName, Country, City, State, Preferred

from vendors where State = :StateID

Додамо так само обробник події OnClick у QueryButton наступного змісту

procedure TForm1.QueryButtonClick(Sender: TObject);

begin

MasterSQL.Active := False;

DetailSQL.Active := False;

MasterSQL.Parameters.ParamByName('StateID').Value := StateEdit.Text;

MasterSQL.Active := True;

DetailSQL.Active := True; end;

3.3.5 Синхронізація даних клієнта і сервера

У ADO використовуються три методи синхронізації даних на клієнті і сервері.

Перший - c допомогою методу Resync, що повторно зчитує запису набору. Цей метод використовується при виконанні методу Refresh Delphi.

Другий - повторний запит методом Requery, що заново виконує запит на сервері. Виконання цього методу те ж саме, що і виконання підряд закриття і відкриття набору даних.

Третій - повідомлення сервером клієнта у випадку зміни даних.

Ці методи доступні у всіх компонентах даних, що мають набір. Однак ці функції доступні не для всіх баз даних.

3.3.6 Робота з транзакціями

У компонентах ADO робота з транзакціями здійснюється через компонент TADOConnection.

Тип транзакції встановлюється у властивості IsolationLevel однієї з наступних констант:

Таблиця 3.1

Перелік констант типів транзакції

IlUnspecified

Сервер буде використовувати кращий, на його думку, тип ізоляції.

IlChaos

Транзакції з більш високим рівнем ізоляції не можуть змінювати дані змінені, але не підтверджені в поточної транзакції.

IlReadUncommitted

Читання даних змінених у не підтверджених транзакцій. Тобто зміни видні відразу після того як інша транзакція передала них на сервер.

IlBrowse

Те ж саме що і IlReadUncommitted

IlReadCommitted

Читання даних змінених підтвердженими транзакціями. Тобто зміна даних буде вочевидь після виконання Commit в інший транзакції.

IlCursorStability

Те ж саме що і IlCursorStability.

IlRepeatableRead

Зміни, зроблені іншими транзакціями не видимі, але при виконанні перезапиту вони транзакція може одержувати новий набір даних.

IlIsolated

Трансакція не бачить змін даних зроблених іншими транзакціями.

IlSerializable

Те ж саме що і IlIsolated.

Звернемо увагу на те, що не всі типи провайдерів даних підтримують усі типи ізоляції або роботу з транзакціями.

Властивість Attributes установлює чи відкривати нову транзакцію автоматично:

· xaCommitRetaining - при підтвердженні трансакції;

· xaAbortRetaining - при скасуванні трансакції.

Так саме, в компонента TADOConnection є три методи для роботи з транзакціями:

· BeginTrans - починає трансакцію;

· CommitTrans - підтверджує зроблені зміни;

· RollbackTrans - відкат транзакцію.

3.3.7 Атрибути доступу до даних

В усіх компонентах що мають набір даних (тобто в TADODataSet, TADOTable, TADOQuery, TADOStoredProc) є властивості CursorLocation, CursorType, LockType і MarshalOptions, що встановлюють параметри обміну із сервером. Усі ці властивості повинні бути встановлені до того, як набір даних відкривається. Якщо ви установите їх пізніше, те ефекту не буде.

CursorLocation - визначає, де виконується робота з набором на клієнті (clUseClient) або на сервері (clUseServer). Якщо набір даних розташований на клієнті, то із сервера дані запитуються однократно (або до виконання повторного запиту), надалі уся вибірка даних і позиціювання йде на клієнті. Однак модифікація даних виробляється негайно.

CursorType - установлює тип курсору. Значення одне може бути одним з:

· ctUnspecified - бібліотека ADO сама визначає оптимальний тип блокування.

· ctStatic - статичний курсор. Статична копія набору записів, що ви можете використовувати, наприклад, для генерації звіту. Додавання, зміни або видалення записів іншими користувачами не видимі.

· сtOpenForwardOnly - ідентичний статичному курсорові, за винятком того, що ви можете переходити тільки вперед. Це тип поліпшує ефективність у ситуаціях, коли ви робите тільки один прохід через набір даних.

· ctDynamic - динамічний курсор. Додавання, зміни і видалення іншими користувачами видимі і можливі всі типи пересування по наборі даних. Закладки (bookmarks) можливі тільки, якщо провайдер даних них підтримує.

· ctKeyset - курсор набору даних. Аналогічний динамічному курсорові, за винятком того, що ви не побачите записи додані іншими користувачами, а записи вилучені іншими користувачами недоступні з вашого набору даних. Зміни даних іншими користувачами видимі.

Треба помітити, що TDBGrid і інші компоненти, що одночасно працюють з декількома записами, можуть працювати тільки коли закладки підтримуються. Тому для компонентів з якими ви будите зв'язувати такі компоненти повинні використовуватися типи ctKeyset або ctDynamic. LockType - визначає тип блокування записів у наборі даних. Ця властивість може приймати наступні значення:

· ltUnspecified - бібліотека ADO сама визначає який тип буде використовуватися.

· ltReadOnly - тільки читання, зміна даних неможливо.

· ltPessimistic - песимістичне блокування. Запис блокується відразу після початку редагування і до збереження записів.

· ltOptimistic - оптимістичне блокування. Запис блокується тільки коли зміни зберігаються.

· ltBatchOptimistic - теж саме що і ltOptimistic, але використовується відкладене збереження змін записів. Більш докладно вона розглядається в наступному пункті.

· MarshalOptions - це властивість визначає чи будуть відправлені на сервер ті полючи, що не були змінені. При значенні moMarshalAll будуть, а при moMarshalModifiedOnly не будуть.

4. ТЕОРЕТИЧНЕ ДОСЛІДЖЕННЯ ОБ'ЄКТНИХ МОДЕЛЕЙ ТА МЕТОДІВ СТВОРЕННЯ КОНТРОЛЕРІВ АВТОМАТИЗАЦІЇ MS OFFICE

4.1 Об'єктна модель MS Word

Текстовий процесор MS Word і табличний процесор MS Excel, що входить, до складу MS Office, є об'єктами СОМ. Це означає, що будь-яка програма, написана для сучасних версій Windows, може управляти цими об'єктами, якщо вона підтримує інтерфейс СОМ.

Як видно з рис. 4.1, об'єктна модель MS Word має деревовидну структуру, на вершині якої знаходиться об'єкт Application. Колекції (Collection), що входять до складу об'єктної моделі, є списками однотипних об'єктів, доступ до яких здійснюється по індексу. Окремі об'єкти можуть містити колекції, в свою чергу елементи колекції є звичайними об'єктами. Доступ до будь-якого об'єкту або елементу колекції можливий тільки через кореневий об'єкт Application. На рис.4.1 об'єктна модель зображена в укрупненому вигляді. Можна виділити і детальніше розглянути деякі частини цієї моделі, наприклад, елемент колекції Documents -- об'єкт Document (документ). На рис. 4.2 представлена структура об'єкту Document в тому вигляді, який дає уявлення про його основні елементи і їх взаємозв'язок.

До складу об'єкту Document входять як елементи, що описують його в цілому, так і елементи, що є змістом документа. Наприклад, колекція властивостей, що описують призначені для користувача характеристики документа (назва, тема, автор і ін.), відноситься до документа в цілому і візуально не відображається в документі. Колекція таблиць -- елемент, який є частиною змісту документа і відображається на його сторінках. У свою чергу елемент колекції може містити свої об'єкти і колекції. Наприклад, кожна таблиця містить колекції рядків і стовпців, а також елементи типу "комірка”.

Рис. 4.1 Об'єктна модель MS Word

Рис. 4.2 Об'єктна модель документу MS Word

Колекції можуть включати не тільки повністю однотипні елементи, але і елементи, які можуть істотно відрізнятися один від одного. Колекція форм (Shapes) містить елементи, однотипні за способом створення і розміщення, а за змістом -- різні.

Елемент колекції Shapes може містити напис (Textbox), зовнішній об'єкт (OLEObject), лінію (Line), полілінию (Polyline) і інші типи об'єктів. Основний об'єкт документа це, звичайно, текст. Для доступу до тексту можна використовувати колекцію Words або об'єкт Range. Елементи колекції Words -- об'єкти, які відображають слова в тексті і містять їх характеристики. Об'єкт Range описує текст або частину тексту цілком.

На рис. 4.3 приведений загальний вид структури об'єктної моделі елементів управління MS Word.

Рис. 4.3 Об'єктна модель елементів управління MS Word

Як видно з рис. 4.3, всі елементи управління MS Word зібрані в одну колекцію, що має деревовидну структуру, кожен вузол якої може містити як об'єкти, так і вкладені колекції. Цю структуру можна настроювати і доповнювати. Користувач і програміст, використовуючи певні інструменти, можуть додати, видалити, модифікувати або активізувати будь-який вузол або об'єкт цієї структури. При цьому будуть виконані методи, відповідні активізованим елементам управління.

Як вже сказано, доступ до документів і застосувань можна здійснювати через об'єкти, що стоять на вершині об'єктної моделі застосувань MS Office. Через них ми дістаємо доступ до внутрішньої структури документів і додатків, тому при створенні контролерів автоматизації ми можемо використовувати тільки їх.

4.2 Загальні принципи створення контролерів автоматизації MS Office

Office - це середовище, в якому більшість завдань можна вирішувати без якого-небудь програмування. Але вся цінність застосувань Office для розробника полягає в тому, що все, що можна зробити руками, можна зробити програмним шляхом з використанням засобів VBA (Visual Basic for Application). Крім того, додатки Office поставляють сервери COM, які надають інтерфейс доступу до додатку і його об'єктів. Завдяки цьому, розробник в середовищі Delphi має можливість, створивши контролер автоматизації, управляти сервером. Насправді додаток розглядається як сукупність об'єктів зі своїми методами, властивостями, подіями, які забезпечують скелет додатку. Програміст Office є не творцем додатку, як, наприклад це робиться в Delphi, а він бере участь в створенні системи документів. Таким чином, ДОКУМЕНТ, а не програма є метою розробки. Спадкоємство - могутній інструмент побудови нового класу, проте програмістам відомий ще один спосіб отримання класу - вбудовування. Як і спадкоємство, вбудовування транзитивне відношення. У об'єктній моделі Office немає спадкоємства в повному розумінні цього слова, а є тільки вбудовування.

Завжди існує кореневий об'єкт, він завжди називається Application. Кожний додаток Office має свій власний кореневий об'єкт - Word.Application, Excel.Application. Не дивлячись на це в об'єкт Application вбудовується вся решта об'єктів (учасники), які є властивостями головного об'єкту. У учасників можуть бути свої учасники і так далі. Як тільки відкривається новий документ, будь то PowerPoint, Excel, Word, автоматично створюється каркас нового документа, який є набором бібліотек з класами.

Об'єкти цих класів будуть доступні в даному документі. Завданням розробника контролера автоматизації є дати доступ до кореневого об'єкту сервера, збудувати ланцюжок доступу до об'єктів - учасників (вбудованих об'єктів), правильно передати параметри.

Контролер автоматизації -- це програма, яка "уміє" управляти додатками MS Office і процесом створення документів в середовищі Word і Excel. Для того, щоб все це працювало коректно, програма-контролер повинна виконати наступні функції:

· Перевірити, запущений додаток (Word, Excel) чи ні.

· Якщо додаток не запущено, запустити його.

· Виконати ряд необхідних маніпуляцій із додатком, документом.

· Закрити документ і додаток.

· Очистити пам'ять.

Використовуючи контролери автоматизації, в додатках, створених в середовищі Delphi, можна так само просто, як при звичайній роботі з Word і Excel, створювати документи зі всіма можливими елементами. Таблиці, написи, текст, діаграми і інші компоненти повноцінних документів з'являться у такому вигляді, неначе вони створені користувачем.

4.3. Принципи створення контролерів автоматизації MS Word

4.3.1 Робота з об'єктом Word.Application

Створення об'єкту Word.Application, запуск і візуалізація вікна додатку

Функція, що реалізовує механізм доступу до OLE-об'єкту, знаходиться в бібліотеці ComObj.pas - функція CreateOleObject. Її єдиним аргументом є рядок-ідентифікатор, а повертає вона посилання на об'єкт. Прикладом використання цієї функції є наступний програмний текст:

uses ComObj;

var W:variant;

procedure TForm1.ButtonlClick(Sender: TObject);

begin

W:=CreateOleObject('Word.Application');

end;

Для відображення вікна додатку Word необхідно встановити значення властивості Visible об'єкта Application в True.

Створення документа

Колекція Documents містить документи, їх властивості і методи для роботи з ними. Елементами колекції є відкриті зараз документи. Доступ до них здійснюється через об'єкти Item(doc:variant), де doc - ім'я або індекс документа в колекції. Поле Count колекції містить кількість елементів колекції, якщо Count=0, то немає жодного відкритого документа.

Для створення нового документа використовується метод ADD цієї ж колекції:

W.Documents.Add;

Звертатися до методу ADD колекції Documents можна як без аргументів, так і з аргументом. Коли аргументу немає, створюється звичайний документ. Якщо метод викликається з аргументом (рядком-покажчиком на файл шаблона), то створюється документ за шаблоном.

Якщо вимагається внести зміни в створений раніше документ, тоді відкриваємо його, використовуючи методи колекції Documents.

Відкриття документа

Раніше створений документ можна відкрити за допомогою методу Open. При виклику методу можна вказати і декілька аргументів, але головний з них - посилання на шлях і ім'я файлу. Фрагмент тексту програми для відкриття створеного раніше документа виглядає так:

procedure TForml.Button4Click(Sender: TObject);

var dir:string;

begin

GetDir(0,dir);

if not 0penDialog2.Execute then begin chdir(dir); exit; end;

chdir(dir);

W.Documents.Open(0penDialog2.FileName);

end;

Запис і зчитування тексту документа

Розглянемо об'єкт Range, який входить в об'єкт-документ і є його властивістю. Об'єкт Range є змістом частини документа або всього документа. Методи цього об'єкту дозволяють записувати і зчитувати інформацію документа.

Метод InsertBefore записує текст в початок вмісту об'єкту Range. Метод InsertAfter записує текст в кінець вмісту об'єкту Range. Практична реалізація виклику цих методів в додатках Delphi:

procedure TUG5CH22_.ButtonlClick(Sender: TObject);

begin

W.ActiveDocument.Range.InsertAfter(Memo1.Text+'('+inttostr(nn)+') ' );

nn:=nn+1;

end;

procedure TUG5CH22_.Button2Click(Sender: TObject);

begin

W.ActiveDocument.Range.InsertBefore(Memo1.Text+'('+inttostr(nn)+') ' );

nn:=nn+1;

end;

Зчитування тексту з відкритого документа Word можна організувати двома способами. Прикладом реалізації першого способу є наступний код:

procedure TUG5CH22_.Button3Click(Sender: TObject);

begin

Memo1.Text:=W.ActiveDocument.Range.Text;

end;

Якщо вимагається експортувати в програму-контролер дуже великий текст, то можна працювати з його фрагментами в документі. Для цього використовується процедура Range(first, last), де first, last - межі діапазону (позиції символів) в якому знаходиться робочий фрагмент.

Інший спосіб зчитування тексту документа базується на зчитуванні слів, які є елементами колекції Words документа. Але даний спосіб підходить для роботи лише з окремими словами і його можна використовувати тільки для зчитування, а не для запису.

Коли документ відкритий, прочитаний, змінений, то, можливо, буде потрібно зберегти ці зміни.

Збереження документа

Найпростіший спосіб збереження документа полягає у виклику методу Save об'єкту-документа, наприклад:

W.ActiveDocument.Save;

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

Інший спосіб збереження нового документу полягає у використанні методу SaveAs. В специфікації мови Visual Basic він описаний так:

ActiveDocument.SaveAs (FileName, FileForroat, LockComments, Password, AddToRecentFiles, WritePassword, ReadOnlyRecommended, EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData, SaveAsAOCELetter)

Отже, ми відкрили документ, зчитали з нього текст, внесли в документ необхідні зміни і зберегли його. Тепер потрібно закрити його і закінчити роботу з додатком Word.

Закриття документа і додатку Word

Якщо додаток обробляв декілька документів, і всі вони вже збережені, то ці документи можна закрити одночасно з допомогою методу Close колекції Documents:

W.Application.Documents.Close;

Якщо вимагається вибірково закривати документи колекції, використовується метод Close об'єкта-документа. Наприклад, щоб закрити активний документ, використовується оператор:

W.ActiveDocument.Close;

Документи закриті, тепер можна закрити додаток Word і очистити пам'ять від об'єкту Application. Використовуємо метод Quit об'єкту Application і оператор W:=UnAssigned;:

procedure TForml.Buttonl6Click(Sender: TObject);

begin

W.Quit;

W:=UnAs signed;

end;

4.3.2 Створення таблиць і робота з ними

Створення, виділення і видалення таблиць в документі

Документ Word може містити таблиці, які як об'єкти з'єднані в колекцію Tables. Розглянемо її основні властивості і методи. Властивість Count:integer містить інформацію про кількість таблиць в колекції. Якщо в документі немає жодної таблиці, то Count містить нуль. Метод Add додає нову таблицю в колекцію. При створенні таблиці визначається область де буде створена таблиця, і її основні параметри - кількість стовпців і рядків. Хоча колекція таблиць і належить документу, та сама таблиця може бути створена на будь-якому об'єкті або місці документа, на якому це можливо. Об'єкт Item(tab) - елемент колекції і є таблицею з порядковим номером tab даної колекції.

Для створення нової таблиці використовується метод Add. Його специфікація в Visual Basic має наступний вигляд:

expression.Add(Range, NumRows, NumColumns), де Range - область, на якій створюється таблиця; NumRows і NumColumns - кількість рядків і стовпців створюваної таблиці.

Для створення наступної таблиці в тому ж документі необхідно в якості першого аргументу методу Add вказати область, яка вільна і не містить таблицю. Для завдання цієї області можна використовувати метод Range або, наприклад, властивість End об'єкту Range.

Наступна процедура створює нову таблицю в кінці документа:

procedure TForml.Button3Click(Sender: TObject);

var MyRange:variant;

begin

MyRange:=W.ActiveDocument.Range(W.ActiveDocument.Range.End-1,

W.ActiveDocument.Range.End-1);

W.ActiveDocument.Tables.Add (Range:=MyRange, NumRows:=2,

NumColuinns: =3) ;

W.ActiveDocument.Range.InsertAfter(' ' );

end;

Коли створено декілька таблиць, ми можемо визначити їх кількість. Це значення міститься у властивості Count колекції Tables. Приведена нижче процедура виводить список таблиць в компонент ListBox:

procedure TOKBottomDlg.FormShow(Sender: TObject);

var a:integer;

begin

ListBoxl.Items.Clear;

for a:=1 to Form1.W.ActiveDocument.Tables.Count do

begin

ListBox1.Items.Add('Таблица - '+inttostr(a));

end;

end;

Використовуючи об'єкт Item колекції Tables і порядковий номер таблиці, можна виділити будь-яку таблицю зі всього списку таблиць документа для подальших маніпуляцій. Для виділення таблиці, яка міститься в колекції, використовується метод Select об'єкту Item. Цей об'єкт містить всі методи, колекції і об'єкти, властиві таблиці як об'єкту.

Додавання і видалення рядків і стовпців таблиці

Для збільшення таблиці призначений метод Add колекцій Rows і Columns, а для видалення елементів цих колекцій - метод Delete. Перший метод додає рядок або стовпець в кінець таблиці, а другий видаляє рядок або стовпець з вказаним індексом. Приклади процедур для зміни кількості рядків і стовпців таблиці:

procedure T0KBottomDlg6.ButtonlClick(Sender: TObject);

begin

table.Columns.Add;

end;

procedure TOKBottomDlg6.Button2Click(Sender: TObject);

begin

table.Rows.Add;

end;

procedure TOKBottomDlg6.Button3Click(Sender: TObject);

begin

table.Columns.Item(1).Delete;

end;

procedure TOKBottomDlg6.Button4Click(Sender: TObject);

begin

table.Rows.Item(1).Delete;

end;

Текст в комірках таблиці

Коли таблиця створена, можна заповнювати її текстом. Записувати інформацію безпосередньо в комірку таблиці дозволяє об'єкт Cell, який і є коміркою. Посилання на конкретну комірку одержують, звертаючись до об'єкту Cell з параметрами (номер рядка і стовпця). До складу об'єкту "комірка" входить об'єкт Range, який може містити текст. Використовуючи властивості комірки і об'єкту Range, запишемо текст в конкретну комірку:

Компоненти RowІd і ColumnІd дозволяють користувачу вибрати комірку, а Range_Text - ввести в неї текст.

procedure TOKBottomDlg7.RangeJTextChange(Sender: TObject);

begin

table.Cell(RowІd.value, ColumnІd.value).Range.Text:=Range_Text.text;

end;

Вирівнюємо текст в комірці по вертикалі, використовуючи властивість VerticalAlignment, яке може приймати значення - 0, 1, 2.

procedure TOKBottomDlg7.VerticalAlignmentChange(Sender: TObject);

begin

table.Cell(RowІd.value, ColumnІd.value).VerticalAlignment:=

VerticalAlignment.itemindex;

end;

Горизонтальне вирівнювання здійснюється за допомогою властивості Alignment об'єкту ParagraphFormat, що належить об'єкту Range.

procedure TOKBottomDlg7.AlignmentChange(Sender: TObject);

begin

table.Cell(RowІd.value, ColumnІd.value).Range.ParagraphFormat.

Alignment:=Alignment.itemindex;

end;

Вибір шрифту для тексту комірки:

procedure TOKBottomDlg7.ButtonlClick(Sender: TObject);

begin

if not FontDialogl.Execute then exit;

FontToWFont(FontDialogl.font,table.Cell(RowІd.value,

ColumnІd.value).Range.font);

end;

Дана процедура, що використовує шрифт, який повертається діалогом FontDialog1, змінює шрифт комірки Cell(RowId.value, ColumnІd.value).

Вибір кольору шрифту для тексту комірки:

const

wdAuto =0;

wdBlack =1;

wdBlue =2;

wdTurquoise =3;

wdBrightGreen =4;

wdGray50 =14;

wdGray25 =15;

procedure TOKBottomDlg7.TextColorlndexChange(Sender: TObject);

begin

table.Cell(RowІd.value, ColumnІd.value).Range.font.ColorIndex:=

TextColorІndex.itemindex;

end;

Напрям тексту

Ще одна властивість тексту в Word - напрям. Напрям тексту задається установкою властивості Orientation об'єкту Range в значення одній з трьох можливих констант.

Завдання напряму тексту:

const

wdTextOrientationUpward =2;

wdTextOrientationHorizontal =0;

wdTextOrientationDownward =3;

procedure TOKBottomDlg7.OrientationChange(Sender: TObject);

begin

case Orientation.itemindex

0:table.Cell(RowІd.value,ColumnІd.value).Range.Orientation:=

wdTextOrientationUpward;

1:table.Cell(RowІd.value,ColumnІd.value).Range.Orientation:=

wdTextOrientationHorizontal;

2:table.Cell(RowІd.value, ColumnІd.value).Range.Orientation:=

wdTextOrientationDownward;

end;

end;

4.3.3 Настройка параметрів сторінки і друк документа

Настройка сторінки визначається її висотою, шириною, розмірами полів, орієнтацією і іншими параметрами, що визначаються через властивості об'єкту PageSetup, який, у свою чергу, належить об'єкту-документу.

Для доступу до параметрів сторінки використовуємо наступний оператор, що повертає посилання на об'єкт:

PageSetup:=ActiveDocument.PageSetup;

Визначення параметрів сторінки:

procedure TOKBottomDlg7.FormCreate(Sender: TObject);

begin

PageSetup:=Forml.W.ActiveDocument.PageSetup;

Orientation.Itemlndex:=PageSetup.Orientation;

VerticalAlignment.ItemIndex:=PageSetup.VerticalAlignment;

CheckBoxl.Checked:=PageSetup.LineNumbering.Active;

PageWidth.Value:=PageSetup.PageWidth;

PageHeight.Value:=PageSetup.PageHeight;

TopMargin.Value:=PageSetup.TopMargin;

LeftMargin.Value:=PageSetup.LeftMargin;

end;

Друк документа здійснюється за допомогою методу PrintOut об'єкту "документ". Наступна процедура дозволяє виконати друк двох копій активного документа:

procedure TOKBottomDlg7.Button3Click(Sender: TObject);

begin

Forml.W.ActiveDocument.Printout(Copies: =2);

end;

Для попереднього перегляду активного документа перед друком можна використовувати наступну процедуру:

procedure TOKBottomDlg7.Button2Click(Sender: TObject);

begin

Form1.W.ActiveDocument.PrintPreview;

end;

4.3.4 Елементи управління додатку MS Word

Колекція CommandBars є сукупністю панелей інструментів і панелі головного меню, а також подібних елементів (панелей і меню), створених користувачем. Кожний з цих елементів, у свою чергу, є господарем кнопок (панелі) або пунктів меню (головне меню і інші меню).

Дослідимо деякі загальні властивості колекції CommandBars. Наприклад, властивість колекції LargeButtons дозволяє вибирати розміри кнопок всіх панелей - великі або маленькі - змінюючи значення цієї властивості:

W.CoramandBars.LargeButtons:=LargeButtons.Checked;

Іншою загальною властивістю колекції панелей управління є режим показу спливаючих підказок для кнопок, який визначається двома властивостями логічного типу: DisplayTooltips - визначає, включена або відключена підказка; DisplayKeysInTooltips - визначає присутність в підказці "гарячих клавіш". Зміна режиму підказок визначається просто установкою цих властивостей в певне значення:

procedure TForml.DisplayTooltipsClick(Sender: TObject);

begin

W.CoramandBars.DisplayTooltips:=DisplayTooltips.Checked;

end;

procedure TForml.DisplayKeysInTooltipsClick(Sender: TObject);

begin

W.CommandBars.DisplayKeysInTooltips:=DisplayKeysInTooltips.Checked

end;

Доступ до панелей управління і їх властивостей здійснюється через об'єкти Item(i:integer), де i - індекс елемента в колекції.

Елементи колекції CommandBars, їх відображення і розташування

Для отримання списку всіх елементів, що входять в колекцію CommandBars, використовується властивість Count колекції і властивість елемента Name. Властивість Name має строковий тип і є ім'ям елемента. Його можна використовувати для доступу до будь-якого елемента колекції аналогічно індексу, що має числовий тип.

Властивість панелей Enabled дозволяє активувати або деактивувати панель в головному вікні додатку Word. Вона має тип Boolean і визначає можливість доступу користувача до них. Коли властивість Enabled має значення False, користувач не може користуватися даною панеллю - вона взагалі не відображається. Якщо встановити цю властивість в значення True, то панель буде доступна і займе своє колишнє місце у вікні додатку Word. Можливо, цією властивістю необхідно скористатися, коли вимагається блокувати доступ користувача до деяких елементів управління.

Створення призначеної для користувача панелі або меню

Для створення призначеної для користувача панелі використовується метод Add колекції CommandBars. У цього методу є декілька аргументів. Синтаксис виклику методу Add:

Add(Name, Position, MenuBar, Temporary);

де Name:string - назва створюваної панелі, Position:integer - її розташування, MenuBar:boolean - ознака створення меню, Temporary:boolean - ознака створення тимчасової панелі. Використовуючи дані аргументи і їх комбінації ми можемо як створити звичайну панель з кнопками або меню, так і замінити існуюче головне меню додатку Word. Будь-який із створюваних компонентів колекції CommandBars може бути створений як тимчасовий об'єкт (на час одного сеансу роботи додатку) або як постійний об'єкт.

Елементи управління і їх властивості

Панель може містити кнопки і інші елементи управління, наприклад, списки або пункти меню, що розкриваються. Ці елементи у свою чергу належать самій панелі і з'єднані в колекцію Controls. За допомогою цієї колекції здійснюється доступ до всіх елементів управління вибраної панелі. Колекція Controls має декілька властивостей і один метод: властивості Count (кількість елементів колекції) і Item(i:integer) (елементи колекції, де i - індекс кнопки), метод Add, що дозволяє додавати на панель нові елементи.

Дослідимо зміст панелі і деякі властивості елементів управління. Якщо розглядати меню, то його основна відмінність від панелі з кнопками полягає в тому, що елементом управління у складі меню може бути як пункт меню так і підменю зі своїми елементами управління і т.д. Для аналізу властивостей панелі, використовують властивості Count і Item() колекції Controls, а також властивості Caption і TooltipText.

Завантаження списку елементів управління панелі:

procedure T0KBottomDlg5.FormCreate(Sender: TObj ect);

var a:integer;

eee:string;

begin

MYCONTROLS:=OKBottomDlg4.CommandBars.Item

[0KBottomDlg4.ListBoxl.Itemlndex+l].CONTROLS;

for a:=1 to MYCONTROLS.Count do

begin

eee:=MYCONTROLS.Item[a].Caption+'=

'+MYCONTROLS.Item[a].TooltipText; ListBoxl.Items.Add(eee_);

end;

MYCONTROL:=MYCONTROLS.Item[1] ;

end;

5. ОПИС ФУНКЦІОНАЛЬНИХ МОЖЛИВОСТЕЙ ТА ПРОГРАМНОЇ РЕАЛІЗАЦІЇ ПРОЕКТОВАНОЇ СИСТЕМИ

5.1 Функціональне призначення та технологічні особливості розробки

Метою дипломної роботи є створення гнучкої пошукової системи, що призначена для автоматизації обліку науково-дослідницької документації в умовах Криворізького металургійного факультету НМетАУ.

Система реалізована на основі клієнт-серверної архітектури і базується на існуючій раніше локальній базі даних. Перехід до клієнт-серверної архітектури був обумовлений необхідністю реалізації мережевого варіанту додатку, а також збільшенням об'єму бази даних. Також, на вимогу замовника, в системі був розроблений ряд додаткових функцій.

Розроблена гнучка система автоматизації обліку методичних матеріалів була реалізована з використанням системи програмування Delphi та технології доступу до бази даних ADO з використанням бази даних в форматі Microsoft Access.

В розробці були використані пакети альтернативних компонентів Development Express, Synactis та RXLib, за допомогою яких був реалізований інтерфейс системи. Використання пакету RXLib зумовлено вимогою замовника - можливістю застосування в системі редактору формул Microsoft Equation. Пакет компонентів Synactis призначений для відображення змісту файлів формату pdf.

Додаткове програмне забезпечення: установка пакету MS Office, Acrobat Reader (на клієнтських ЕОМ), IBProvider - ODBC- провайдера доступу до бази даних (на сервері);

Склад розробленої системи:

· ADOServer.exe - серверна частина системи;

· NAUKA_client.exe - клієнтська частина;

· baza.mdb - файл бази даних формату Microsoft Access;

· path.ini - зберігає інформацію про повний шлях до файлу бази даних;

· p2iagent.exe - консольний конвертор фалів формату pdf в формат bmp;

· Шаблон_карт.dot - шаблон документу MS Word для створення картки обліку патентів, що містить графічне зображення та короткий опис винаходу (формулу);

· Шаблон_таблиця.dot - шаблон документу, що призначений для експорту в MS Word переліку патентів на основі вибірки;

· Шаблон_статті.dot - шаблон документу, що призначений для експорту в MS Word переліку наукових публікацій.

5.2 Розробка логіко-функціональної схеми роботи користувача з системою

Логіко-функціональна схема роботи користувача з системою наведена на рис. 5.1.

Рис. 5.1 Логіко-функціональна схема роботи користувача з системою

5.3 Опис інтерфейсу користувача

При запуску на екрані з'являється вікно входу в систему (рис. 5.2). Вхід «Тільки для читання» доступний всім користувачам без введення пароля. Безпека при цьому визначається політикою локальної мережі.

Рис. 5.2 Вибір режиму входу до системи

Якщо ми виберемо варіант входу «З правами адміністратора», з'явиться список, в яким ми вибираємо логін зареєстрованого користувача і вводимо пароль (рис. 5.3).

Рис. 5.3 Ідентифікація користувача системи

При вході в систему з правами адміністратора крім редагування інформації ми маємо можливість змінювати шлях до бази даних, редагувати облікові записи користувача (рис. 5.4) , а також оновлювати посилання на папки з документами.

Головне вікно програми має дві вкладки - Патенти і Наукові публікації (рис. 5.5). На екрані ми бачимо таблиці, в якій відображається основна інформація. За допомогою заголовків стовпців можна проводити сортування і фільтрацію по необхідних полях. Відфільтрований список ми можемо експортувати в MS Word.

Рис. 5.4 Редагування інформації про користувача

Рис. 5.5 Зовнішній вигляд головного вікна системи

В базі зберігається наступна інформація про патент:

· номер патенту;

· номер заявки;

· міжнародна патентна класифікація (МПК);

· назва патенту;

· автори патенту;

· власники прав на патент (автори чи організація, в якій вони працюють);

· дата подання заявки;

· дата вступу патенту в силу;

· дата публікації;

· номер бюлетеню;

· графічне зображення;

· формула (короткий опис винаходу).

Щороку дію патенту необхідно підтверджувати. За три місяці до закінчення терміну подачі заявки, рядок, що містить інформацію про патент виділяється жовтим кольором. Відмітити, чи є патент діючим можна за допомогою прапорця.

Як вже було зазначено вище, інтерфейс системи був спроектований за допомогою пакету альтернативних компонентів Development Express. Однією з особливостей використання цього пакету є можливість настроювати зовнішній вигляд панелей інструментів (додавати або видаляти кнопки (рис. 5.7), переміщувати панелі). Головне вікно системи має наступні панелі:

Головна

Навігація

Адміністрування

Рис. 5.6 Зовнішній вигляд панелей інструментів

Рис. 5.7 Настроювання зовнішнього вигляду панелей інструментів

Проектована система дозволяє зберігати повний шлях до папки, що містить файл документа. Для цього необхідно натиснути на кнопку, що автоматично з'являється зліва від стовпчику «Ссылка на папку».

Рис. 5.8 Фрагмент робочого вікна у режимі визначення шляху до файлу

На екрані з'являється вікно, в якому необхідно вказати будь-який файл каталогу, посилання на який повинно бути розміщено у базі даних.

Використання компонентів Development Express дозволило автоматизувати процес сортування даних в головній таблиці. Для цього необхідно лише клацнути мишею по заголовку відповідного стовпчика.

Процес пошуку та фільтрації записів реалізовано наступним чином. В заголовку кожного стовпчика, для якого передбачено режими пошуку та фільтрації є кнопка для виводу на екран випадаючого списку (рис. 5.9). В цьому списку згідно абетки наведені всі значення, які містить цей стовпчик. При цьому ти значення, що використовувались останніми, наведені на початку списку.

Рис. 5.9 Фільтрація по автору патенту

Якщо в наведеному списку вибрати значення «Настройка», на екрані з'явиться вікно (рис. 5.10), за допомогою якого можна здійснити швидкий пошук необхідного документу. При цьому можна використовувати символи заміни для пошуку по частковому збігу.

Рис. 5.10 Вікно визначення параметрів пошуку

Наприклад, якщо ми введемо умови пошуку, які наведені на рис. 5.10, то отримаємо наступний результат (рис. 5.11):

Рис. 5.11 Результати пошуку

Для відміни режиму фільтрації необхідно зняти „прапорець” на панелі „Фільтрація”, що автоматично з'являється в нижній частині робочого вікна системи. На цій же панелі розташована кнопка, якою можна скористатися для вибору останніх використаних режимів.

Рис. 5.12 Зовнішній вигляд панелі фільтрації

Кнопка „Customize” призначена для побудови складного фільтру з багатьма умовами. При цьому створений фільтр можна зберегти у зовнішньому файлі та завантажити потім при необхідності.

Рис. 5.13 Вікно побудови складного фільтра

Увесь набір даних, що містить таблиця, ми маємо змогу експортувати в MS Word. Зовнішній вигляд отриманого переліку патентів наведений в додатку А.

Якщо натиснути кнопку „Редактировать” на головній панелі інструментів, на екрані з'явиться вікно, яке містить детальну інформацію про патент.

Рис. 5.14 Вікно виводу детальної інформації про патент

Усі поля, що мають тип „дата” ми маємо в змозі заповнювати за допомогою наступного елементу інтерфейсу:

Рис. 5.15 Ввід дати за допомогою календаря

Завантаження графічного зображення відбувається за допомогою спливаючого контекстного меню:

Рис. 5.16 Фрагмент вікна на етапі редагування графічного зображення

Джерелом зображення може бути графічний файл або буфер обміну. Завантажувати ми можемо файли у форматі pdf, jpg або bmp.

Меню передбачає наступні функції:

· вирізання чи копіювання в буфер обміну;

· вставка з буферу обміну;

· видалення зображення;

· завантаження зображення з файлу;

· зберігання зображення.

При натисненні кнопки «Открыть формулу» на екрані з'являється вікно діалогу відкриття файлу (рис. 5.17). При цьому використовується фільтр - „Файли формату rtf” або „Файл формату pdf”.

Рис. 5.17 Діалогове вікно завантаження файлу „формули”

Якщо формула представлена у форматі rtf, ми маємо можливість її відредагувати. Однією з вимог до розробленою системи була можливість зберігати та редагувати формули, що були створені за допомогою Microsoft Equations. На наступному рисунку наведений вигляд вікна в режимі редагування формули.

Рис. 5.18 Вигляд вікна в режимі редагування формули

При подвійному клацанні по зображенню, якщо воно в форматі jpg або bmp з'являється вікно (рис. 5.19), в якому зображення може бути відмасштабоване.

Рис. 5.19 Вікно перегляду зображення

Кнопки панелі „Масштаб” (рис. 5.20) призначені для налаштування детального перегляду зображення.

Рис. 5.20 Панель масштабування зображення

Якщо інформація збережена у форматі pdf, ми маємо можливість скористатися засобами Adobe Acrobat для обробки зображення.

За допомогою кнопки «Экспорт в Word» вікна інформації про патент можна створити картку патенту на основі шаблону, який зберігається в тому ж каталозі, що і виконавчий файл системи. Приклад створеної картки патенту наведений в Додатку А.

Облік наукових публікацій реалізований за допомогою аналогічних елементів інтерфейсу. На рис. 5.21 наведено головне вікно системи в режимі перегляду наукових публікацій. Отфільтрований список ми також в змозі експортувати в файл формату MS Word.

Крім загальною інформації про статтю, ми маємо також доступ до її сканованого варіанту, який зберігається в базі даних у форматі pdf. ми маємо можливість проглянути вміст або вивести на друк. На рис. 5.22 наведений зовнішній вигляд вікна „Відомості про публікацію”.

Рис. 5.21 Вікно системи в режимі „Наукові публікації”.

Рис. 5.22 Вікно „Відомості” про публікацію

5.4 Програмна реалізація системи

База даних складається з трьох не взаємозв'язаних один з одним таблиць наступної структури.

Таблиця «Користувачі» містить інформацію про логін і пароль осіб, що володіють доступом до системи з правами адміністратора.

Рис. 5.23 Структура полів таблиці „Коритсувачі”

Таблиця «Патенти» зберігає всю необхідну інформацію про винахід і має наступні особливості. Поле name_dir - зберігає ім'я директорії, що містить додаткову інформацію про патент, щодо файлу бази даних. Поле path - повний шлях до цієї директорії, що необхідне для реалізації гіперпосилання. Поле pic зберігає графічне зображення, при цьому підтримуються формати bmp, jpg і pdf. Для зберігання формули (короткого опису винаходу) призначені два поля. У першому випадку дані зберігаються у форматі rtf з можливістю подальшого редагування, в другому - це скановані сторінки у форматі pdf.

Рис. 5.24 Структура полів таблиці „Патенти”

Таблиця «Статті» містить інформацію про публікації. Крім загальної інформації про публікації тут також міститься поле «Scan», в якому зберігається скануюче зображення у форматі pdf. Структура таблиці наведена на рис. 5.25.

Рис. 5.25 Структур а полів таблиці „Статті”

Серверна частина системи не має власного вікна та призначена для зв'язку клієнтських програм з базою даних. Усі компоненті, що використовуються при розробці є невізуальними на розташовані на DataModule.

Рис. 5.26 DataModule серверної частини системи

При розробці системи для зв'язку з базою даних використовуємо ODBC- провайдер IBProvider, що повинен бути встановлений на сервері. Зв'язок з провайдером відбувається за допомогою компоненту ADOConnection. На рис. 5.27 та рис. 5.28 наведені параметри настройки компоненту.

Рис. 5.27 Вибір провайдеру доступу до бази даних

Рис. 5.28 Визначення джерела даних

Клієнтська частина системи містить 8 форм, за допомогою яких користувач має змогу заносити, змінювати інформацію у базі даних та застосовуючи надані засоби фільтрування вибирати потрібні дані. Всі невізуальні компоненти, що призначені для роботи з базою даних розташовані на DataModule2. Інтерфейс системи, зокрема плаваючі панелі інструментів були реалізовані за допомогою компонентів, що входять до пакету Development Express.

Рис. 5.29 Вікно настройки параметрів компоненту dxBarManager

Компонент dxBarManager дозволяє в гнучкому режимі створювати та редагувати набір кнопок, що мають бути розміщені на панелі інструментів.

Рис. 5.30 Вікно, що дозволяє редагувати категорії та набір кнопок

Розглянемо більш детально процес автоматичного визначення повного шляху до каталогу, що містить файли стосовно патенту.

procedure Tmain.cxGrid1DBTableView1DBColumn13PropertiesButtonClick(

Sender: TObject; AButtonIndex: Integer);

var s:string;

begin

with OpenDialog3 do //використовуємо компонент-діалог з фільтром „Всі файли” для визначення повного шляху до каталогу

if execute then

begin

s:=ExtractFilePath(filename); //виділяємо шлях до папки з повного імені відкритого файлу

DataModule2.ADOTable1.Edit; //переводимо таблицю в режим редагування

DataModule2.ADOTable1path.AsString:=s; //у відповідне поле бази даних заносимо інформацію про шлях

DataModule2.ADOTable1.Post; //зберігаємо дані

end;

end;

При цьому повний шлях до цієї директорії прив'язаний до місця знаходження файлу бази даних, і змінюється при її переміщенні. Оновлення посилань проводиться по алгоритму , наведеному на рис. 5.31. Далі наведена процедура, що відповідає за оновлення гіперпосилань.

procedure Tmain.dxBarButton8Click(Sender: TObject);

var s,s1:string;

k:integer;

begin

DataModule2.ADOTable1.First; // перехід на перший запис в таблиці

while not DataModule2.ADOTable1.Eof do // перебираємо всі записи

таблиці “Патенти”

begin

s:=DataModule2.ADOTable1name_dir.AsString; // зчитуємо ім'я папки,

що зберігається у базі даних

if length(s)<>0 then // якщо довжина поля не рівна нулю (посилання створене)

begin

s:= s1+s; // формуємо повний шлях

DataModule2.ADOTable1.Edit;

DataModule2.ADOTable1path.AsString:=s; // заносимо повний шлях в

відповідне поле бази даних

DataModule2.ADOTable1.Post;

end;

DataModule2.ADOTable1.Next; // перехід на наступний запис

end;

end;

Рис. 5.31 Алгоритм оновлення гіперпосилань

Розглянемо процес створення каталогу патентів на винаходи на основі шаблону 'Шаблон_таблица.dot', що міститься в поточному каталозі системи.

procedure Tmain.dxBarButton5Click(Sender: TObject);

var i,j:integer;

s:string;

begin

w:=createoleobject('word.application');

w.documents.add(ExtractFilePath(ParamStr(0)) + 'Шаблон_таблица.dot'); //створюємо документ MS Word на основі вказаного шаблону

table:= w.activedocument.tables.item(1); //створюємо посилання на таблицю, що міститься в документі

//Далі ми перебираємо усі записи, що містяться в наборі (і - номер рядка, j - номер стовпчика.

for i:=0 to cxGrid1DBTableView1.DataController.RecordCount-1 do

begin

table.rows.add; //додаємо до таблиці Word рядок

for j:=0 to cxGrid1DBTableView1.ColumnCount-1

do

case j of

0,1,2,3,4,5,9: begin

//в цих випадках дані мають строковий тип

if cxGrid1DBTableView1.DataController.Values[i,j]<>null then

//перевірка, чи присутні дані в комірці - для запобігання виключних ситуацій

s:=cxGrid1DBTableView1.DataController.Values[i,j] else s:='';

//заносимо текст у відповідну комірку таблиці

table.cell(i+2,j+1).range.text:=s;

end;

//випадок, коли дані мають тип - дата

6,7,8: begin

if cxGrid1DBTableView1.DataController.Values[i,j]<>null then

//якщо тип даних - дата, використовуємо функцію перетворювання дати в строкову змінну

s:=datetostr(cxGrid1DBTableView1.DataController.Values[i,j]) else s:='';

table.cell(i+2,j+1).range.text:=s;

end;

//цей випадок призначений для ознаки, чи діє патент

10:begin

if cxGrid1DBTableView1.DataController.Values[i,j]<>null then

begin

if cxGrid1DBTableView1.DataController.Values[i,j]=true then

s:= 'действует' else s:= 'не действует';

//якщо патент діє, строковій змінній привласнюється відповідне значення

end else s:=''; //випадок, коли дія патенту не визначена

table.cell(i+2,j+1).range.text:=s;

end;

end; //case

end; //for i

w.visible:=true; //візуалізація документу MS Word

end;

Як вже було зазначено вище, щороку дію патенту необхідно підтверджувати. За три місяці до закінчення терміну подачі заявки, рядок, що містить інформацію про патент виділяється жовтим кольором. Фрагмент алгоритму, що реалізовує дану функцію, має вигляд, наведений на рис. 5.32.

Стилі заливки визначаються при створені форми:

procedure Tmain.FormCreate(Sender: TObject);

begin

AYellowStyle := TcxStyle.Create(Self); //створення нового стилю

AYellowStyle.Color := $0080FFFF; //колір заливки рядку

AYellowStyle.TextColor := clMaroon ;//колір шрифту

end;

Наступна процедура відповідає за зміну кольору відповідного рядка:

procedure Tmain.cxGrid1DBTableView1StylesGetContentStyle(

Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;

AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);

var Present,d: TDateTime;

Year, Month, Day,Year1, Month1, Day1,dn :word;

fl:boolean; i:integer;

begin

dn:=0;

if ARecord.Values[cxGrid1DBTableView1DBColumn12.Index]=null

or ARecord.Values[cxGrid1DBTableView1DBColumn12.Index]=false

then exit; //якщо патент не є дійсним на даний час або дата подання заявки не визначена - процедура завершується

a:=0;

fl:=false; // ознака того, чи треба змінювати колір рядку

Present:= Now; // визначення поточної дати

DecodeDate(Present, Year, Month, Day); //за допомогою цієї процедури ми отримуємо окремо рік, місяць та день поточної дати

if ARecord.Values[cxGrid1DBTableView1DBColumn5.Index]=null then exit;

d:= ARecord.Values[cxGrid1DBTableView1DBColumn5.Index];

DecodeDate(d, Year1, Month1, Day1); // аналогічним чином отримуємо окремо рік, місяць та день подання заявки

year1:=year1+1; // знаходимо рік закінчення дії заявки

if year=year1 then // якщо рік закінчення рівний поточному

begin

if month1-month<3 // якщо різниця між місяцем закінчення і поточним місяцем <3

then fl:=true // ознака того, що запис буде виділений

else

if (month1-month=3) and (day1<=day) // якщо різниця між місяцем закінчення і поточним = 3, але день закінчення заявки менший поточного

then fl:=true // ознака того, що запис буде виділений

end

Рис. 5.32 Алгоритм зміни кольору рядка відповідно умові

else // аналогічно визначаємо різницю при переході між роками

if year1-year=1 then

begin

if 12-month+month1<3 then fl:=true else

if (12-month+month1=3) and (day<=day1) then fl:=true

end

else fl:=true;

if fl

then AStyle:=AYellowStyle // виділяємо комірку жовтим кольором

end;

При натисненні кнопки „Редагування” на екрані з'являється форма, що містить більш повну інформацію про патент.

procedure Tmain.dxBarButton2Click(Sender: TObject);

begin

DataModule2.ADOTable1.Insert;

forma.ShowModal

end;

Розглянемо алгоритм завантаження зображення (рис. 5.33).

Спочатку відбувається визначення типу завантаженого зображення по розширенню файлу. Якщо файл формату bmp або jpg, відбувається завантаження зображення в стандартний компонент Image і його запис в базу даних. Якщо ж це файл формату pdf, відбувається завантаження файлу в альтернативний компонент PdfViewer. Даний компонент дозволяє вбудовувати Acrobat Reader в додаток і потім використовувати його функції. При цьому зберігається копія файлу в каталозі temp.

При закритті форми відбувається перетворення тимчасового pdf-файлу в бінарний формат і запис в базу даних. Далі наведений листинг процедури, що відповідає за завантаження зображення.

procedure TForma.N6Click(Sender: TObject);

begin

with OpenPictureDialog1 do

if execute then

begin

ext:=ExtractFileExt(filename); // визначення типу завантаженого зображення по розширенню файлу

if (ext='.bmp')or (ext='.jpg') then // файл формату bmp або jpg

begin

PdfViewer2.Visible:=false;

Panel6.Visible:=false;

Image1.Picture.LoadFromFile(filename); // завантаження зображення

у стандартний компонент Image і запис зображення в БД

Image1.Visible:=true;

end

else if ext='.pdf' then // файл формату pdf

begin

fl_pdf:=true;

// завантаження файлу в компонент PdfViewer

PdfViewer2.Enabled:=true;

Panel6.Visible:=true;

PdfViewer2.Visible:=true;

PdfViewer2.FileName:=filename;

PdfViewer2.Open;

// збереження копії файлу у каталозі temp

CopyFile(pchar(PdfViewer2.filename),pchar

(ExtractFilePath(Application.ExeName)+'temp\temp.pdf'),true);

end;

fl_z:=true; // ознака того, що зображення зберігається в форматі pdf

end;

end;

При закритті форми відбувається перетворення тимчасового pdf-файлу в бінарний формат і запис в БД.

TBlobField(DataModule2.ADOTable1pic).

LoadFromFile(PdfViewer2.FileName);

DataModule2.ADOTable1.Post;

Рис. 5.33 Фрагменти алгоритму, що ілюструє завантаження зображення в базу даних

Аналогічним чином відбувається завантаження формули. Залежно від вибраного типа файлу, дані за допомогою різних компонентів будуть завантажені в поля БД.

За допомогою наступної процедури відбувається завантаження тексту „формули” формату rtf в базу даних:

procedure TForma.BitBtn1Click(Sender: TObject);

begin

DataModule2.ADOTable1.Edit;

with OpenDialog1 do

if Execute then

RxDBRichEdit1.Lines.LoadFromFile(filename);

end;

Головна проблема експорту картки патенту в MS Word полягає в копіюванні зображення формату pdf. Вона була вирішена за допомогою використання зовнішнього конвертора p2iagent.exe. Даний безкоштовний консольний додаток перетворить файл формату pdf в групу файлів формату bmp, кількість яких рівна числу сторінок початкового документа. При цьому системою генерується bat-файл наступного змісту (рис. 5.34).

Рис. 5.34 Схема конвертації зображення із формату pdf в формат bmp

Наступний фрагмент алгоритму (рис. 5.35) ілюструє процес експорту багатосторінкового pdf-файлу в Word. Після визначення шляху до файлу-джерела і каталогу призначення відбувається формування і запуск bat-файлу. Після затримки виконання процедури на вказаний інтервал часу ми перебираємо одержані файли формату bmp. Потім завантажуємо файл в компонент Image і експортуємо зображення в MS Word. Після завершення процедури видаляємо тимчасові файли.

Рис. 5.35 Фрагмент алгоритму процесу експорту богатосторінкового файлу формату pdf в MS Word

Наступний лістинг демонструє процес експорту даних в файл формату MS Word, який створюється на основі шаблону. При цьому використовується функція пошуку та заміни тексту:


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.