Розробка архітектури та технології побудови захищеної системи електронної комерції

Проектування дієздатної демонстраційної моделі системи електронної комерції. Розробка сценарію купівлі з використанням мережі Інтернет. Архітектура механізму розповсюдження сертифікатів відкритих ключів. Підсистема асиметричної і симетричної криптографії.

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

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

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

6. Покупець переглядає зміст замовлення, обирає один з наданих продавцем варіантів. Після натискання кнопки «Придбати» запускається один з доступних покупцеві платіжний засіб, також продавцеві передається інформація про вибір покупцем варіанту угоди.

7. Власне проведення платежу є задачею платіжного засобу.

Таким чином фактично клієнтські модулі СЕК відповідають за проміжний етап купівлі через мережу Інтернет: після вибору товарів та формування заявки, та перед власне платежем. Завданням системи на цьому етапі є захистити покупця та продавця від можливої фальсифікації угоди та використання підставного імені (назви). Таку мету досягнуто за допомогою використання взаємної суворої аутентифікації та підписування кожною з сторін змісту угоди.

Таким чином завданням модулів підтримки клієнтів СЕК є реалізація всіх кроків процесу купівлі, починаючи з 2-го (прийом заявки).

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

5.1.1 Послідовність дій клієнтських модулів

1. Модуль клієнта приймає заявку в спеціальному форматі від сайту продавця. За формування такої заявки відповідає програмне забезпечення сайту продавця. Оскільки для взаємодії із сайтом продавця покупець використовує браузер, то заявку сайт передасть саме браузеру. Таким чином очевидним є технологічний спосіб реалізації модуля покупця: це повинен бути підключаємий модуль (plug-in) до браузера. Це також дозволяє розв'язати проблему з каналом передачі даних: передача замовлення ведеться по каналу, який вже встановлений покупцем на етапі перегляду сайту продавця (за HTTP протоколом).

2. Модуль покупця (plug-in) разом із змістом заявки на покупку отримує адресу, за якою він може отримати доступ до модуля продавця. Такий спосіб надає широкі можливості по відокремленню сайту продавця від модуля СЕК продавця - наприклад це дозволяє малій організації орендувати типовий сайт на великому web- сервері. Але незалежно від реалізації сайту, кожен з продавців повинен мати свій власний модуль СЕК, що постійно підключений до мережі Інтернет.

3. Оскільки ми повинні використовувати той же канал зв'язку, що і покупець під час перегляду сайту продавця, то інформація від модуля СЕК покупця до модуля продавця повинна передаватись за протоколом HTTP з використанням інтерфейсу CGI. Від web- сервера вимагається передача інформації, що поступає за адресою модуля СЕК, безпосередньо до модуля СЕК продавця без змін та доповнень.

4. Модуль покупця передає модулю продавця сертифікат відкритого ключа покупця.

5. Модуль продавця перевіряє вірність сертифіката покупця. У випадку недійсного сертифіката модуль продавця повідомляє про неможливість аутентифікації, інакше модуль продавця передає сертифікат відкритого підпису продавця покупцеві.

6. Модуль покупця перевіряє вірність сертифіката продавця. У випадку недійсного сертифіката модуль продавця повідомляє про неможливість аутентифікації.

7. На кроках 4 - 5 формується сесійний ключ для симетричної криптосистеми, яким буде зашифровано весь подальший трафік між модулями СЕК покупця та продавця. Процес формування сесійного ключа відповідає стандарту [19], згідно якого за каналами зв'язку не передається жодна частина ключа - лише інформація, на базі якої сесійний ключ можуть створити обидві сторони і тільки вони. В якості симетричної криптосистеми для шифрування трафіка було використано стандарт ГОСТ 24148-87.

8. Модуль покупця підписує та передає модулю продавця заявку на покупку.

9. Модуль продавця за допомогою підпису покупця цілісність заявки (тобто заявку не було навмисно або ненавмисне змінено на етапі передачі після накладання покупцем ЕЦП).

10. Модуль продавця може ініціювати деяку взаємодію з КС продавця: перевірити наявність замовлених товарів на складі, перевірити право покупця на користування знижками або певними платіжними механізмами і таке інше. Заявку може бути доповнено, наприклад, вибором терміну доставки замовлення, способом доставки, вибором платіжного засобу - кожен з цих варіантів супроводжується своєю сумою до сплати, які можуть не співпадати між собою. Будь-яка інформація, якою продавець доповнює заявку, додається до існуючої заявки, інформація підписується та відправляється покупцеві.

11. Модуль покупця перевіряє цілісність замовлення за допомогою свого підпису - це гарантує, що продавець згоден виконати саме замовлення покупця, а не будь-яке інше.

12. Модуль покупця перевіряє цілісність замовлення та пропозицій продавця за допомогою ЕЦП продавця - це підтверджує те, що заявку не було навмисно або ненавмисно змінено після підписування продавцем на етапі передачі інформації.

13. Модуль покупця відображає у вікні браузера покупця зміст замовлення, в тому числи варіанти, які надає продавець. Якщо деякі з варіантів не доступні для покупця, то модуль покупця автоматично виключає їх із списку можливих варіантів угоди (наприклад оплата за карткою Visa, якщо покупець не має змоги користуватись такою карткою). Сума цін за кожну позицію в списку товарів може не співпадати із кінцевою вартістю угоди - її обрахунок бере на себе модуль СЕК продавця. Якщо продавець надає вибір варіантів угоди, покупець обов'язково має обрати один з них.

14. Покупець має погодитись із запропонованою угодою (з обраним на попередньому кроці варіанті - якщо вони є) та підтвердити своє рішення натисканням кнопки у вікні браузера.

15. Модуль покупця відправляє інформацію про вибір покупця та підтвердження згоди на виконання угоди до продавця. Для цього інформація додається до пакета інформації, отриманого від продавця на кроці 9 та підписується.

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

17. Модуль продавця ініціює виконання угоди з боку продавця: за допомогою КС продавця, абощо.

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

5.2 Реалізація підсистеми взаємодії з користувачами

На кроці 1 (тут і далі в цьому розділі: посилання на розділ 5.1.1, Послідовність дій клієнтських модулів) сайт формує замовлення та передає його браузеру покупця. Замовлення повинен прийняти модуль покупця, тому інформація форматується у вигляді параметрів до модуля (plug-in'а), безпосередньо всередині HTML відповіді сайту на натискання покупцем кнопки «Придбати». Спосіб генерації такої відповіді сайту є вільним.

Приклад HTML кода, що викликає модуль СЕК покупця:

<OBJECT ClassId="NBU.ECS" CodeBase="http://nbu.gov.ua/ECS/cabs/ecs.cab#version=1,0,0,0" WIDTH=100% HEIGHT=100%>

<PARAM NAME=data VALUE="SessionId.data">

В цьому прикладі використовується ідентифікатор COM класу модуля покупця «NBU.ECS». Якщо такий модуль відсутній в браузері користувача, то його може бути автоматично завантажено з адреси «http://nbu.gov.ua/ECS/cabs/ecs.cab» та встановлено в системі покупця, вимагається версія модуля не нижче 1.0.0.0. Модуль покупця займатиме всю площу вікна браузера. Власне замовлення знаходиться у файлі «SessionId.data», це ім'я передається модулю СЕК покупця в якості параметра з іменем «data». Ім'я файлу є ідентифікатором сесії передачі інформації від сайту до браузера покупця: його web- сервер, на якому розміщено сайт продавця, генерує випадковим чином з великих літер латинського алфавіту та цифр, довжина ідентифікатора - 40 символів.

Формат структури даних, що містить замовлення, розглянуто в розділі 5.2.1, Формати структур даних.

Модуль клієнта завантажує інформацію про замовлення, причому цей модуль має можливість відображати стан процесу завантаження. Коли модуль отримує адресу модуля СЕК продавця, він відсилає сертифікат відкритого підпису покупця продавцеві - з використанням протоколів HTTP та CGI за адресою, що вказана в заявці. Разом з сертифікатом модуль користувача відправляє ідентифікатор сесії обміну інформацією між модулями СЕК покупця та продавця. Правила формування ідентифікатора сесії такі ж, як і правила формування ідентифікатора сесії передачі інформації від сайту до браузера покупця - але модуль покупця може згенерувати новий ідентифікатор.

Модуль продавця приймає блок даних, що складається з сертифікату відкритого підпису покупця та ідентифікатору сесії, та розпочинає нову сесію з вказаним ідентифікатором. Тепер якщо модуль продавця прийме блок даних з таким самим ідентифікатором сесії, то ці дані буде передано екземпляру програми, що відповідає саме за цю сесію обміну інформацією між модулями СЕК покупця та продавця. Відповіді продавця передаються покупцеві у вигляді файлів з іменами «SessionId.data.StepNo», що складаються з ідентифікатора сесії та номеру кроку процесу укладання угоди. Далі під «модулем продавця» будемо розуміти саме програму, що обслуговує нашу сесію.

Модуль продавця (за допомогою бібліотеки розбору сертифікатів електронних підписів та перевірки ЕЦП) перевіряє: дійсність сертифікату (чи не скінчився термін дії сертифікату, чи не анульовано його), цілісність сертифікату (чи не було його змінено після підписування різними ЦСК) та допустимість ланцюжка довіри (чи міститься в послідовності ЦСК, які формували сертифікат, організація, якій продавець довіряє). Відкритий підпис покупця запам'ятовується, його буде використано пізніше для генерації сеансового ключа для симетричної криптосистеми та для перевірки ЕЦП покупця.

Модуль продавця відсилає сертифікат відкритого підпису продавця покупцеві - це 1-й крок передачі інформації покупцеві. Генерується сеансовий ключ для симетричної криптосистеми.

Модуль покупця перевіряє дійсність сертифікату продавця та запам'ятовує його відкритий ключ. Генерується сеансовий ключ для симетричної криптосистеми. Заявка на покупку підписується та відправляється продавцеві.

Модуль продавця перевіряє цілісність прийнятої заявки за допомогою ЕЦП та відкритого ключа покупця. Ініціюється взаємодія з КС продавця (див. крок 9). Заявка доповнюється варіантами (див. там же), підписується та відсилається покупцеві - це 2-й крок передачі інформації покупцеві.

Модуль покупця перевіряє цілісність прийнятої заявки за допомогою ЕЦП та відкритого ключа продавця. Також він перевіряє свій підпис, аби пересвідчитись, що продавець погодився саме на таку угоду, яку пропонує покупець. Заявка на покупку та надані продавцем варіанти відображаються у вікні браузера: перелік товарів у вигляді таблиці та перелік варіантів у вигляді списку з можливістю вибору єдиного варіанту. Покупцеві надається можливість вибрати один з варіантів (якщо продавець надає їх, та вони доступні для покупця, див. крок 13) та підтвердити початок виконання угоди натисканням кнопки «Купити». Також покупець може відхилити пропозицію кнопкою «Відмінити».

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

Модуль продавця перевіряє цілісність пакета даних за допомогою ЕЦП покупця. Також продавець перевіряє свій підпис, аби пересвідчитись в тому, що мова йде саме про ту угоду, яку він запропонував. У випадку ствердної відповіді покупця ініціюється процес доставки замовлення згідно угоди. Програма, яка приймає інформацію за адресою модуля СЕК продавця припиняє передачу інформації до модуля обслуговування сесії. Модуль, що відповідає за обслуговування сесії, закінчую свою роботу.

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

5.2.1 Формати структур даних

Формат заявки:

<адреса модуля СЕК продавця>

<порожній рядок>

<рядок з позицією замовлення>

...

<рядок з позицією замовлення>

Кінець рядка позначається парою символів з ASCII кодами 10 та 13. Всі дані наведені в кодовій таблиці ANSI 1251 (Win1251).

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

Рядок з позицією замовлення містить такі поля: код товару, назва товару, ціна за одиницю, назва одиниці (кг, л., шт., компл. і т. ін.), кількість одиниць, ціна за обрану кількість одиниць. Поля розділені символом табуляції (ASCII 9). Ціни наводяться в гривнях. Числа наводяться у форматі «ххххх0,00хх», де х - необов'язкова цифра, 0 - обов'язкова цифра (за відсутності відповідної частини числа на цьому місці повинен бути нуль). Ціну за обрану кількість одиниць проставляє продавець, вона може не співпадати із добутком ціни за одиницю товару на кількість одиниць - це дозволяє враховувати знижки для гуртових покупців. Код товару не відображається покупцеві - він має довільний формат та використовується продавцем за його бажанням. Вміст будь-якого з полів не може містити символів табуляції або кінця рядка.

Покупець пропонує покупку одним або кількома рядками, які містять: коди платіжних засобів (розділені комами), суму до сплати, текстовий коментар. Поля розділені символом табуляції. Інформація про строки та спосіб доставки замовлення подається в полі коментарів в довільній текстовій формі (передоплата, доставка за 2 тижні, тощо). Коментар може містити ще будь-яку текстову інформацію (як то: «знижка 2% користувачам НСМЕП!»), яку модуль покупця відобразить відразу після суми до сплати за варіантом угоди. Коментар може містити символи «\n», які будуть представлені як «кінець рядка» під час відображення модулем покупця. Коди платіжних засобів зумовлюються на етапі створення СЕК, наприклад: НСМЕП, Visa, EuroPay, HomeBanking. Під час відображення модуль покупця показує назву платіжної системи, а не її код.

Цифрові підписи додаються безпосередньо після тексту та одного порожнього рядку - цей рядок не враховується при підписуванні. ЕЦП складається із одного рядка заголовку («Begin RSA 1024 bit signature») та кількох рядків, що по 70 символів в кожному містять значення ЕЦП в текстовій формі, закодовані за стандартом BASE-64.

Доцільно на час передачі інформації каналами зв'язку стискати її за допомогою бібліотеки архіватора на базі методу Лемпеля-Зіва-Велча [22, 23] (саме він ефективно стискає короткі текстові повідомлення) - це дозволить зменшити об'єм інформації, що передається, а також значно підвищить крипостійкість каналу зв'язку (через те, що більшість методів криптоаналізу припускають, що каналом зв'язку передається текстова інформація).

5.2.2 Технологія побудови клієнтських модулів

Обидва модулі - як покупця, так і продавця, виконано у вигляді COM модулів. Така архітектура модулів СЕК дозволяє використовувати однакові технологічні рішення під час їх побудови. COM об'єкті легко інтегрувати в браузер Internet Explorer в якості plug-in модуля та у web- сервер Internet Information Server в якості програми, що виконується на сервері.

Обидва модулі спроектовано та написано мовою C++ в середовищі Microsoft Visual C++ 6.0 Service Pack 6 - стандарт de-facto серед інтегрованих середовищ з розробки програм для ОС Microsoft Windows - та середовище для швидкої розробки програм Borland Delphi 6 Enterprise. Модулі написано з використанням бібліотеки шаблонів ATL.

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

5.3 Сценарій використання СЕК

1. Кожен з учасників системи: покупці, продавці та всі ЦСК генерують собі пари ключів. Для цього використовується генератор ключів. Обов'язком кожного з учасників системи є зберігання в таємниці свого таємного ключа.

2. ЦСК вищого рівня видає сертифікати на відкриті підписи ЦСК нижчого рівня, і так далі по всіх рівнях ієрархії ЦСК.

3. Покупці та продавці отримують сертифікати своїх відкритих ключів.

4. Покупці та продавці укладають угоди з організаціями, що надають доступ до платіжних засобів (наприклад з банками - операторами платіжних систем).

5. Покупці та продавці готові до укладання угод за схемою згідно розділу 4.2.1, Алгоритм процесу купівлі.

5.3.1 Приклад сеансу купівлі за допомогою системи електронної комерції

Тестова система клієнта працює під керуванням ОС Microsoft Windows XP English, Internet Explorer 6.0.2600. Сервер запущено на ОС FreeBSD 4.6 RC #11, web- сервер Apache 1.3.26 з використанням PHP 4.2.1. Тестовий магазин доступний за адресою http://el.ntu-kpi.kiev.ua/~krolyk/Shop/ як з інститутської мережі КПІ, так і з мережі Інтернет. Тестовий модуль для покупця (plug-in для Internet Explorer) також доступний за цією адресою разом з інструкцією з установки.

Мал. 5.2. Перший крок: користувач відвідує сайт магазину

Мал. 5.3.Другий крок: користувач обирає товари.

Мал. 5.4.Третій крок: покупець перевіряє замовлення.

Мал. 5.5.Четвертий крок: покупець натискає кнопку «Купити», запускається платіжний засіб.

Мал. 5.6.Покупець також може дізнатися докладної інформації про сертифікат відкритого підпису магазину.

Мал. 5.7.Також покупцеві доступна інформація про версію клієнтського модуля, який він використовує.

6. Аналіз результатів

В ході цієї роботи було розроблено та формалізовано архітектуру побудови системи електронної комерції та технологію побудови окремих її складових частин. Був досліджений вибір засобів для реалізації цих компонентів. Докладно досліджено побудову найбільш важливих підсистем - див. роботи Івана Онищенка [15], Андрія Коваля [18] та Ярослава Гальчинського [17].

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

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

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

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

Перелік літератури та посилань

1. Bill Gates, Business @ the Speed of Thought - 1999, Warner Books, NY, USA.

2. Amazon.com - Earth's Biggest Selection™ - найбільша мережа електронних магазинів та аукціонів в мережі Інтернет (www.amazon.com).

3. VeriSign - The Value of Trust™ - VeriSign, Inc., світовий лідер у представленні сервісів розповсюдження довіри за допомогою цифрових засобів для електронної комерції (www.verisign.com).

4. Visa, Visa International Service Association - одна з найбільших в світі платіжних систем (www.visa.com).

5. MasterCard, MasterCard® International Incorporated - одна з найбільших в світі платіжних систем (www.mastercard.com).

6. Ивченко И. С., Коваленко С. А., Особенности построения систем защиты для on-line банковских технологий // Безопасность информаци, №2, 2000 г., с. 54 -56.

7. Федеральный закон России «Об электронной торговле».

8. ISO 9735:1988 Electronic data interchange for administration, commerce and transport (EDIFACT).

9. Richard Mangan, Mark McSherry, CA4 Project System Specification Secure E_Commerce final product, (http://www.compapp.dcu.ie/Projects/1999/rmanga.ca4/funcspec.html)

10. Вимоги до організації електронної комерції в Україні. Проект НБУ.

11. Towards a Model of Trust for E_Commerce System Design, Florian N. Egger (http://www.zurich.ibm.com/~mrs/chi2000/contributions/egger.html)

12. ITU-T Recommendation X.509 (1997), Information technology - Open Systems Interconnection - The Directory: Authentication framework.

13. Adams C., Farrell S. “Internet X.509 Public Key Infrastructure. Certificate Management Protocols», RFC 2510, March 1999.

14. PGP - (скорочення від Pretty Good Privacy) система шифрування з відкритим ключем, за десять років існування створено тисячі серверів, що підтримують мережу PGP - система фактично стала стандартом de-facto у шифруванні електронної пошти в мережі Інтернет. Також реалізую підтримку механізмів розповсюдження сертифікатів відкритих підписів (www.pgpi.org).

15. Аналіз та реалізація центра сертифікації ключів. / Онищенко І.В. Кваліфікаційна робота на здобуття ступеню магістра, Київ, 2002.

16. PKCS #1: RSA Encryption Standard, An RSA Laboratories Technical Note, Version 1.5, Revised November 1, 1993

17. Аналіз та побудова генератора ключів / Гальчинський Я. Л. Кваліфікаційна робота на здобуття ступеню магістра, Київ, 2002.

18. Аналіз і реалізація криптографічної підсистеми: хешування даних, можливі алгоритми реалізації «довгої» арифметики та методи генерації RSA- ключів / Андрій Коваль, Кваліфікаційна робота на здобуття ступеню магістра, Київ, 2002.

19. ISO 11166-1,2 : Banking - Key management by means of asymmetric algorithms 1994, 1995.

20. Don Box, Essential COM, Addison-Wesley, 1998.

21. Dale Rogerson, Inside COM, Microsoft Press, 1997.

22. J. Ziv and A. Lempel, “A Universal Algorithm for Sequential Data Compression”, IEEE Transactions on Information Theory, Vol. IT-23, No. 3, May 1977, pp. 337-343.

23. A Technique for High Performance Data Compression, Terry A. Welch, IEEE Computer, 17(6), June 1984, pp. 8-19.

24. Borland Delphi - інтегроване середовище для швидкої розробки програм - RAD tool (www.borland.com/delphi/)

25. MSDN, Microsoft Developer Network - збірка документації та іншої інформації для розробників від компанії Microsoft (msdn.microsoft.com).

26. Інформаційні банківські технології - конспект лекцій, Івченко І. С., Київ, 2000.

Додатки

Додаток А. Вихідні тексти

Тестовий модуль покупця

Тестовий модуль реалізовано на мові Object Pascal в середовищі Borland Delphi 6 Enterprise [24] за допомогою технології COM [20, 21].

ECSclientProject.dpr

library ECSclientProject;

uses

ComServ,

ECSclientProject_TLB in 'ECSclientProject_TLB.pas',

ECSclientImpl in 'ECSclientImpl.pas' {ECSclient: TActiveForm} {ECSclient: CoClass};

{$E ocx}

exports

DllGetClassObject,

DllCanUnloadNow,

DllRegisterServer,

DllUnregisterServer;

{$R *.TLB}

{$R *.RES}

begin

end.

ECSclientImpl.dfm

object ECSclient: TECSclient

Left = 188

Top = 118

Width = 528

Height = 347

Caption = 'ECSclient'

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -13

Font.Name = 'MS Sans Serif'

Font.Style = []

OldCreateOrder = False

PixelsPerInch = 120

TextHeight = 16

object MainPageControl: TPageControl

Left = 0

Top = 0

Width = 520

Height = 315

ActivePage = MainPage

Align = alClient

TabIndex = 0

TabOrder = 0

object MainPage: TTabSheet

Caption = #1047#1072#1084#1086#1074#1083#1077#1085#1085#1103

object LoadingLabel: TLabel

Left = 16

Top = 256

Width = 195

Height = 16

Caption = #1047#1072#1074#1072#1085#1090#1072#1078#1077#1085#1085#1103' '#1079#1072#1084#1086#1074#1083#1077#1085#1085#1103'...'

Font.Charset = DEFAULT_CHARSET

Font.Color = clRed

Font.Height = -13

Font.Name = 'MS Sans Serif'

Font.Style = []

ParentFont = False

end

object OrderTable: TListView

Left = 16

Top = 16

Width = 481

Height = 225

Columns = <

item

Caption = #1050#1086#1076

Width = 1

end

item

Caption = #1053#1072#1079#1074#1072

Width = 160

end

item

Caption = #1062#1110#1085#1072

Width = 70

end

item

Caption = #1054#1076#1080#1085#1080#1094#1103

Width = 75

end

item

Caption = #1050#1110#1083#1100#1082#1110#1089#1090#1100

Width = 75

end

item

Caption = #1057#1091#1084#1072

Width = 70

end>

ColumnClick = False

GridLines = True

RowSelect = True

TabOrder = 0

ViewStyle = vsReport

end

object BuyButton: TButton

Left = 256

Top = 248

Width = 97

Height = 28

Caption = #1050#1091#1087#1080#1090#1080

Default = True

Enabled = False

ModalResult = 1

TabOrder = 1

OnClick = BuyButtonClick

end

object CancelButton: TButton

Left = 384

Top = 248

Width = 115

Height = 28

Cancel = True

Caption = #1042#1110#1076#1084#1086#1074#1080#1090#1080#1089#1100

Enabled = False

TabOrder = 2

OnClick = CancelButtonClick

end

end

object ShopPage: TTabSheet

Caption = #1052#1072#1075#1072#1079#1080#1085

ImageIndex = 1

object CertificateGroupBox: TGroupBox

Left = 0

Top = 0

Width = 512

Height = 284

Align = alClient

Caption = #1044#1072#1085#1110' '#1089#1077#1088#1090#1080#1092#1110#1082#1072#1090#1072

TabOrder = 0

object CertificateInfo: TMemo

Left = 16

Top = 32

Width = 480

Height = 241

BorderStyle = bsNone

Lines.Strings = (

#1052#1072#1075#1072#1079#1080#1085': '#1058#1077#1089#1090#1086#1074#1080#1081' '#1084#1072#1075#1072#1079#1080#1085' '#8470'1'

''

#1057#1077#1088#1090#1080#1092#1110#1082#1072#1090' '#1074#1080#1076#1072#1085#1080#1081': 1 '#1090#1088#1072#1074#1085#1103' 2002 '#1088#1086#1082#1091','

#1089#1077#1088#1090#1080#1092#1110#1082#1072#1090' '#1076#1110#1081#1089#1085#1080#1081' '#1076#1086': 1 '#1090#1088#1072#1074#1085#1103' 2003 '#1088#1086#1082#1091

''

#1057#1077#1088#1090#1080#1092#1110#1082#1072#1090' '#1087#1110#1076#1090#1074#1077#1088#1076#1078#1077#1085#1086': '#1041#1072#1085#1082' '#1040#1074#1072#1083#1100', '#1074#1110#1076#1076#1110#1083#1077#1085#1085#1103' '#8470' 7648.'

#1057#1077#1088#1090#1080#1092#1110#1082#1072#1090' '#1074#1080#1076#1072#1085#1080#1081': 1 '#1073#1077#1088#1077#1079#1085#1103' 2002 '#1088#1086#1082#1091','

#1089#1077#1088#1090#1080#1092#1110#1082#1072#1090' '#1076#1110#1081#1089#1085#1080#1081' '#1076#1086': 1 '#1073#1077#1088#1077#1079#1085#1103' 2003 '#1088#1086#1082#1091'.'

#1057#1077#1088#1090#1080#1092#1110#1082#1072#1090' '#1087#1110#1076#1090#1074#1077#1088#1076#1078#1077#1085#1086': '#1074#1110#1085#1085#1080#1094#1100#1082#1077' '#1086#1073#1083#1072#1089#1085#1077' '#1074#1110#1076#1076#1110#1083#1077#1085#1085#1103' '#1053#1041#1059'.'

#1057#1077#1088#1090#1080#1092#1110#1082#1072#1090' '#1074#1080#1076#1072#1085#1080#1081': 1 '#1089#1110#1095#1085#1103' 2002 '#1088#1086#1082#1091','

#1089#1077#1088#1090#1080#1092#1110#1082#1072#1090' '#1076#1110#1081#1089#1085#1080#1081' '#1076#1086': 1 '#1089#1110#1095#1085#1103' 2003 '#1088#1086#1082#1091'.'

#1057#1077#1088#1090#1080#1092#1110#1082#1072#1090' '#1087#1110#1076#1090#1074#1077#1088#1076#1078#1077#1085#1086': '#1094#1077#1085#1090#1088#1072#1083#1100#1085#1077' '#1074#1110#1076#1076#1110#1083#1077#1085#1085#1103' '#1053#1041#1059'.'

#1057#1077#1088#1090#1080#1092#1110#1082#1072#1090' '#1074#1080#1076#1072#1085#1080#1081': 1 '#1078#1086#1074#1090#1085#1103' 2001 '#1088#1086#1082#1091','

#1089#1077#1088#1090#1080#1092#1110#1082#1072#1090' '#1076#1110#1081#1089#1085#1080#1081' '#1076#1086': 1 '#1078#1086#1074#1090#1085#1103' 2002 '#1088#1086#1082#1091'.')

ParentColor = True

ScrollBars = ssVertical

TabOrder = 0

end

end

end

object AboutPage: TTabSheet

Caption = #1055#1088#1086' '#1087#1088#1086#1075#1088#1072#1084#1091

ImageIndex = 2

object AboutText: TRichEdit

Left = 16

Top = 24

Width = 481

Height = 241

Alignment = taCenter

BorderStyle = bsNone

Enabled = False

Font.Charset = RUSSIAN_CHARSET

Font.Color = clWindowText

Font.Height = -17

Font.Name = 'Tahoma'

Font.Style = [fsBold]

Lines.Strings = (

#1057#1080#1089#1090#1077#1084#1072' '#1077#1083#1077#1082#1090#1088#1086#1085#1085#1086#1111' '#1082#1086#1084#1077#1088#1094#1110#1111

''

#1084#1086#1076#1091#1083#1100' '#1087#1086#1082#1091#1087#1094#1103

''

#1084#1086#1076#1077#1083#1100', '#1074#1077#1088#1089#1110#1103' 1.0'

''

''

''

'('#1089') 2002, '#1040#1085#1076#1088#1110#1081' '#1043#1091#1083#1077', '#1076#1080#1084#1087#1083#1086#1084#1085#1072' '#1088#1086#1073#1086#1090#1072' '#1084#1072#1075#1110#1089#1090#1088#1072)

ParentColor = True

ParentFont = False

TabOrder = 0

end

end

end

object IdHTTP: TIdHTTP

Request.Accept = 'text/html, */*'

Request.ContentLength = 0

Request.ContentRangeEnd = 0

Request.ContentRangeStart = 0

Request.ProxyPort = 0

Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'

Left = 24

Top = 272

end

object Timer: TTimer

Interval = 50

OnTimer = TimerTimer

Left = 56

Top = 272

end

end

ECSclientImpl.pas

unit ECSclientImpl;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ActiveX, AxCtrls, ECSclientProject_TLB, StdVcl, StdCtrls, ComCtrls,

OleCtrls, SHDocVw, IdBaseComponent, IdComponent, IdTCPConnection,

IdTCPClient, IdHTTP, ExtCtrls;

type

TECSclient = class(TActiveForm, IECSclient)

MainPageControl: TPageControl;

MainPage: TTabSheet;

ShopPage: TTabSheet;

AboutPage: TTabSheet;

AboutText: TRichEdit;

CertificateGroupBox: TGroupBox;

CertificateInfo: TMemo;

OrderTable: TListView;

BuyButton: TButton;

CancelButton: TButton;

IdHTTP: TIdHTTP;

Timer: TTimer;

LoadingLabel: TLabel;

procedure BuyButtonClick(Sender: TObject);

procedure CancelButtonClick(Sender: TObject);

procedure TimerTimer(Sender: TObject);

private

{ Private declarations }

FEvents: IECSclientEvents;

procedure ActivateEvent(Sender: TObject);

procedure ClickEvent(Sender: TObject);

procedure CreateEvent(Sender: TObject);

procedure DblClickEvent(Sender: TObject);

procedure DeactivateEvent(Sender: TObject);

procedure DestroyEvent(Sender: TObject);

procedure KeyPressEvent(Sender: TObject; var Key: Char);

procedure PaintEvent(Sender: TObject);

protected

{ Protected declarations }

procedure DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage); override;

procedure EventSinkChanged(const EventSink: IUnknown); override;

function Get_Active: WordBool; safecall;

function Get_AlignDisabled: WordBool; safecall;

function Get_AutoScroll: WordBool; safecall;

function Get_AutoSize: WordBool; safecall;

function Get_AxBorderStyle: TxActiveFormBorderStyle; safecall;

function Get_Caption: WideString; safecall;

function Get_Color: OLE_COLOR; safecall;

function Get_Cursor: Smallint; safecall;

function Get_DoubleBuffered: WordBool; safecall;

function Get_DropTarget: WordBool; safecall;

function Get_Enabled: WordBool; safecall;

function Get_Font: IFontDisp; safecall;

function Get_HelpFile: WideString; safecall;

function Get_HelpKeyword: WideString; safecall;

function Get_HelpType: TxHelpType; safecall;

function Get_KeyPreview: WordBool; safecall;

function Get_PixelsPerInch: Integer; safecall;

function Get_PrintScale: TxPrintScale; safecall;

function Get_Scaled: WordBool; safecall;

function Get_Visible: WordBool; safecall;

function Get_VisibleDockClientCount: Integer; safecall;

procedure _Set_Font(var Value: IFontDisp); safecall;

procedure Set_AutoScroll(Value: WordBool); safecall;

procedure Set_AutoSize(Value: WordBool); safecall;

procedure Set_AxBorderStyle(Value: TxActiveFormBorderStyle); safecall;

procedure Set_Caption(const Value: WideString); safecall;

procedure Set_Color(Value: OLE_COLOR); safecall;

procedure Set_Cursor(Value: Smallint); safecall;

procedure Set_DoubleBuffered(Value: WordBool); safecall;

procedure Set_DropTarget(Value: WordBool); safecall;

procedure Set_Enabled(Value: WordBool); safecall;

procedure Set_Font(const Value: IFontDisp); safecall;

procedure Set_HelpFile(const Value: WideString); safecall;

procedure Set_HelpKeyword(const Value: WideString); safecall;

procedure Set_HelpType(Value: TxHelpType); safecall;

procedure Set_KeyPreview(Value: WordBool); safecall;

procedure Set_PixelsPerInch(Value: Integer); safecall;

procedure Set_PrintScale(Value: TxPrintScale); safecall;

procedure Set_Scaled(Value: WordBool); safecall;

procedure Set_Visible(Value: WordBool); safecall;

public

{ Public declarations }

procedure Initialize; override;

end;

implementation

uses ComObj, ComServ;

{$R *.DFM}

{ TECSclient }

procedure TECSclient.DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage);

begin

{ Define property pages here. Property pages are defined by calling

DefinePropertyPage with the class id of the page. For example,

DefinePropertyPage(Class_ECSclientPage); }

end;

procedure TECSclient.EventSinkChanged(const EventSink: IUnknown);

begin

FEvents := EventSink as IECSclientEvents;

inherited EventSinkChanged(EventSink);

end;

procedure TECSclient.Initialize;

begin

inherited Initialize;

OnActivate := ActivateEvent;

OnClick := ClickEvent;

OnCreate := CreateEvent;

OnDblClick := DblClickEvent;

OnDeactivate := DeactivateEvent;

OnDestroy := DestroyEvent;

OnKeyPress := KeyPressEvent;

OnPaint := PaintEvent;

end;

function TECSclient.Get_Active: WordBool;

begin

Result := Active;

end;

function TECSclient.Get_AlignDisabled: WordBool;

begin

Result := AlignDisabled;

end;

function TECSclient.Get_AutoScroll: WordBool;

begin

Result := AutoScroll;

end;

function TECSclient.Get_AutoSize: WordBool;

begin

Result := AutoSize;

end;

function TECSclient.Get_AxBorderStyle: TxActiveFormBorderStyle;

begin

Result := Ord(AxBorderStyle);

end;

function TECSclient.Get_Caption: WideString;

begin

Result := WideString(Caption);

end;

function TECSclient.Get_Color: OLE_COLOR;

begin

Result := OLE_COLOR(Color);

end;

function TECSclient.Get_Cursor: Smallint;

begin

Result := Smallint(Cursor);

end;

function TECSclient.Get_DoubleBuffered: WordBool;

begin

Result := DoubleBuffered;

end;

function TECSclient.Get_DropTarget: WordBool;

begin

Result := DropTarget;

end;

function TECSclient.Get_Enabled: WordBool;

begin

Result := Enabled;

end;

function TECSclient.Get_Font: IFontDisp;

begin

GetOleFont(Font, Result);

end;

function TECSclient.Get_HelpFile: WideString;

begin

Result := WideString(HelpFile);

end;

function TECSclient.Get_HelpKeyword: WideString;

begin

Result := WideString(HelpKeyword);

end;

function TECSclient.Get_HelpType: TxHelpType;

begin

Result := Ord(HelpType);

end;

function TECSclient.Get_KeyPreview: WordBool;

begin

Result := KeyPreview;

end;

function TECSclient.Get_PixelsPerInch: Integer;

begin

Result := PixelsPerInch;

end;

function TECSclient.Get_PrintScale: TxPrintScale;

begin

Result := Ord(PrintScale);

end;

function TECSclient.Get_Scaled: WordBool;

begin

Result := Scaled;

end;

function TECSclient.Get_Visible: WordBool;

begin

Result := Visible;

end;

function TECSclient.Get_VisibleDockClientCount: Integer;

begin

Result := VisibleDockClientCount;

end;

procedure TECSclient._Set_Font(var Value: IFontDisp);

begin

SetOleFont(Font, Value);

end;

procedure TECSclient.ActivateEvent(Sender: TObject);

begin

if FEvents <> nil then FEvents.OnActivate;

end;

procedure TECSclient.ClickEvent(Sender: TObject);

begin

if FEvents <> nil then FEvents.OnClick;

end;

procedure TECSclient.CreateEvent(Sender: TObject);

begin

if FEvents <> nil then FEvents.OnCreate;

end;

procedure TECSclient.DblClickEvent(Sender: TObject);

begin

if FEvents <> nil then FEvents.OnDblClick;

end;

procedure TECSclient.DeactivateEvent(Sender: TObject);

begin

if FEvents <> nil then FEvents.OnDeactivate;

end;

procedure TECSclient.DestroyEvent(Sender: TObject);

begin

if FEvents <> nil then FEvents.OnDestroy;

end;

procedure TECSclient.KeyPressEvent(Sender: TObject; var Key: Char);

var

TempKey: Smallint;

begin

TempKey := Smallint(Key);

if FEvents <> nil then FEvents.OnKeyPress(TempKey);

Key := Char(TempKey);

end;

procedure TECSclient.PaintEvent(Sender: TObject);

begin

if FEvents <> nil then FEvents.OnPaint;

end;

procedure TECSclient.Set_AutoScroll(Value: WordBool);

begin

AutoScroll := Value;

end;

procedure TECSclient.Set_AutoSize(Value: WordBool);

begin

AutoSize := Value;

end;

procedure TECSclient.Set_AxBorderStyle(Value: TxActiveFormBorderStyle);

begin

AxBorderStyle := TActiveFormBorderStyle(Value);

end;

procedure TECSclient.Set_Caption(const Value: WideString);

begin

Caption := TCaption(Value);

end;

procedure TECSclient.Set_Color(Value: OLE_COLOR);

begin

Color := TColor(Value);

end;

procedure TECSclient.Set_Cursor(Value: Smallint);

begin

Cursor := TCursor(Value);

end;

procedure TECSclient.Set_DoubleBuffered(Value: WordBool);

begin

DoubleBuffered := Value;

end;

procedure TECSclient.Set_DropTarget(Value: WordBool);

begin

DropTarget := Value;

end;

procedure TECSclient.Set_Enabled(Value: WordBool);

begin

Enabled := Value;

end;

procedure TECSclient.Set_Font(const Value: IFontDisp);

begin

SetOleFont(Font, Value);

end;

procedure TECSclient.Set_HelpFile(const Value: WideString);

begin

HelpFile := String(Value);

end;

procedure TECSclient.Set_HelpKeyword(const Value: WideString);

begin

HelpKeyword := String(Value);

end;

procedure TECSclient.Set_HelpType(Value: TxHelpType);

begin

HelpType := THelpType(Value);

end;

procedure TECSclient.Set_KeyPreview(Value: WordBool);

begin

KeyPreview := Value;

end;

procedure TECSclient.Set_PixelsPerInch(Value: Integer);

begin

PixelsPerInch := Value;

end;

procedure TECSclient.Set_PrintScale(Value: TxPrintScale);

begin

PrintScale := TPrintScale(Value);

end;

procedure TECSclient.Set_Scaled(Value: WordBool);

begin

Scaled := Value;

end;

procedure TECSclient.Set_Visible(Value: WordBool);

begin

Visible := Value;

end;

procedure TECSclient.BuyButtonClick(Sender: TObject);

begin

MessageDlg('Вашу заявку прийнято.'+#10+#13+'Запускаємо платiжний засiб...', mtInformation, [mbOK], 0);

end;//procedure TECSclient.BuyButtonClick(Sender: TObject);

procedure TECSclient.CancelButtonClick(Sender: TObject);

begin

Close;

end;//procedure TECSclient.CancelButtonClick(Sender: TObject);

procedure TECSclient.TimerTimer(Sender: TObject);

var

Order, st: string;

i: integer;

NewItem: TListItem;

FirstItem: boolean;

begin

Timer.Enabled:= false;

Order := IdHTTP.Get('http://el.ntu-kpi.kiev.ua/~krolyk/Shop/data.txt');

if Length(Order) = 0 then exit;

st := '';

FirstItem := true;

NewItem := OrderTable.Items.Add;

for i := 1 to Length(Order) do begin

if Order[i] = #9 then begin

if FirstItem then begin

NewItem.Caption := st;

FirstItem := false;

end//if FirstItem then begin

else NewItem.SubItems.Add(st);

st := '';

continue;

end;//if Order[i] = #9 then begin

if Order[i] = #13 then continue;

if Order[i] = #10 then begin

NewItem.SubItems.Add(st);

st := '';

FirstItem := true;

NewItem := OrderTable.Items.Add;

continue;

end;//if Order[i] = #13 then begin

if Order[i] = '\' then continue;

st := st + Order[i];

end;//for i := 1 to Length(Order) do begin

LoadingLabel.Visible := false;

BuyButton.Enabled := true;

CancelButton.Enabled := true;

end;//procedure TECSclient.TimerTimer(Sender: TObject);

initialization

TActiveFormFactory.Create(

ComServer,

TActiveFormControl,

TECSclient,

Class_ECSclient,

1,

'',

OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,

tmApartment);

end.//unit ECSclientImpl;

ECSclientProject_TLB.pas

unit ECSclientProject_TLB;

// ********************************************************** //

// WARNING

// -------

// The types declared in this file were generated from data read from a

// Type Library. If this type library is explicitly or indirectly (via

// another type library referring to this type library) re-imported, or the

// 'Refresh' command of the Type Library Editor activated while editing the

// Type Library, the contents of this file will be regenerated and all

// manual modifications will be lost.

// ********************************************************* //

// PASTLWTR : $Revision: 1.130 $

// File generated on 23.06.2002 16:59:55 from Type Library described below.

// ********************************************************** //

// Type Lib: C:\Projects\Diploma\Magister\Soft\ECSclient\ECSclientProject.tlb (1)

// LIBID: {76691FFA-5E34-4CE1-90A8-4FED01DCB6D1}

// LCID: 0

// Helpfile:

// DepndLst:

// (1) v2.0 stdole, (C:\WINDOWS\System32\STDOLE2.TLB)

// (2) v4.0 StdVCL, (C:\WINDOWS\System32\stdvcl40.dll)

// ********************************************************* //

{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.

{$WARN SYMBOL_PLATFORM OFF}

{$WRITEABLECONST ON}

interface

uses ActiveX, Classes, Graphics, OleCtrls, StdVCL, Variants, Windows;

// *******************************************************//

// GUIDS declared in the TypeLibrary. Following prefixes are used:

// Type Libraries : LIBID_xxxx

// CoClasses : CLASS_xxxx

// DISPInterfaces : DIID_xxxx

// Non-DISP interfaces: IID_xxxx

// ******************************************************//

const

// TypeLibrary Major and minor versions

ECSclientProjectMajorVersion = 1;

ECSclientProjectMinorVersion = 0;

LIBID_ECSclientProject: TGUID = '{76691FFA-5E34-4CE1-90A8-4FED01DCB6D1}';

IID_IECSclient: TGUID = '{FA39F062-7E19-41FC-959B-F15CAA0E2775}';

DIID_IECSclientEvents: TGUID = '{094EAAA7-1DB1-4F1D-8B76-FB4025C2D91B}';

CLASS_ECSclient: TGUID = '{39709214-B69F-4194-A774-48ED435D24F3}';

// *******************************************************//

// Declaration of Enumerations defined in Type Library

// **********************************************************//

// Constants for enum TxActiveFormBorderStyle

type

TxActiveFormBorderStyle = TOleEnum;

const

afbNone = $00000000;

afbSingle = $00000001;

afbSunken = $00000002;

afbRaised = $00000003;

// Constants for enum TxPrintScale

type

TxPrintScale = TOleEnum;

const

poNone = $00000000;

poProportional = $00000001;

poPrintToFit = $00000002;

// Constants for enum TxMouseButton

type

TxMouseButton = TOleEnum;

const

mbLeft = $00000000;

mbRight = $00000001;

mbMiddle = $00000002;

// Constants for enum TxHelpType

type

TxHelpType = TOleEnum;

const

htKeyword = $00000000;

htContext = $00000001;

type

// **********************************************************//

// Forward declaration of types defined in TypeLibrary

// ********************************************************//

IECSclient = interface;

IECSclientDisp = dispinterface;

IECSclientEvents = dispinterface;

//**********************************************************//

// Declaration of CoClasses defined in Type Library

// (NOTE: Here we map each CoClass to its Default Interface)

//******************************************************//

ECSclient = IECSclient;

//********************************************************//

// Declaration of structures, unions and aliases.

//******************************************************//

PPUserType1 = ^IFontDisp; {*}

//******************************************************//

// Interface: IECSclient

// Flags: (4416) Dual OleAutomation Dispatchable

// GUID: {FA39F062-7E19-41FC-959B-F15CAA0E2775}

//*******************************************************//

IECSclient = interface(IDispatch)

['{FA39F062-7E19-41FC-959B-F15CAA0E2775}']

function Get_Visible: WordBool; safecall;

procedure Set_Visible(Value: WordBool); safecall;

function Get_AutoScroll: WordBool; safecall;

procedure Set_AutoScroll(Value: WordBool); safecall;

function Get_AutoSize: WordBool; safecall;

procedure Set_AutoSize(Value: WordBool); safecall;

function Get_AxBorderStyle: TxActiveFormBorderStyle; safecall;

procedure Set_AxBorderStyle(Value: TxActiveFormBorderStyle); safecall;

function Get_Caption: WideString; safecall;

procedure Set_Caption(const Value: WideString); safecall;

function Get_Color: OLE_COLOR; safecall;

procedure Set_Color(Value: OLE_COLOR); safecall;

function Get_Font: IFontDisp; safecall;

procedure Set_Font(const Value: IFontDisp); safecall;

procedure _Set_Font(var Value: IFontDisp); safecall;

function Get_KeyPreview: WordBool; safecall;

procedure Set_KeyPreview(Value: WordBool); safecall;

function Get_PixelsPerInch: Integer; safecall;

procedure Set_PixelsPerInch(Value: Integer); safecall;

function Get_PrintScale: TxPrintScale; safecall;

procedure Set_PrintScale(Value: TxPrintScale); safecall;

function Get_Scaled: WordBool; safecall;

procedure Set_Scaled(Value: WordBool); safecall;

function Get_Active: WordBool; safecall;

function Get_DropTarget: WordBool; safecall;

procedure Set_DropTarget(Value: WordBool); safecall;

function Get_HelpFile: WideString; safecall;

procedure Set_HelpFile(const Value: WideString); safecall;

function Get_DoubleBuffered: WordBool; safecall;

procedure Set_DoubleBuffered(Value: WordBool); safecall;

function Get_AlignDisabled: WordBool; safecall;

function Get_VisibleDockClientCount: Integer; safecall;

function Get_Enabled: WordBool; safecall;

procedure Set_Enabled(Value: WordBool); safecall;

function Get_Cursor: Smallint; safecall;

procedure Set_Cursor(Value: Smallint); safecall;

function Get_HelpType: TxHelpType; safecall;

procedure Set_HelpType(Value: TxHelpType); safecall;

function Get_HelpKeyword: WideString; safecall;

procedure Set_HelpKeyword(const Value: WideString); safecall;

property Visible: WordBool read Get_Visible write Set_Visible;

property AutoScroll: WordBool read Get_AutoScroll write Set_AutoScroll;

property AutoSize: WordBool read Get_AutoSize write Set_AutoSize;

property AxBorderStyle: TxActiveFormBorderStyle read Get_AxBorderStyle write Set_AxBorderStyle;

property Caption: WideString read Get_Caption write Set_Caption;

property Color: OLE_COLOR read Get_Color write Set_Color;

property Font: IFontDisp read Get_Font write Set_Font;

property KeyPreview: WordBool read Get_KeyPreview write Set_KeyPreview;

property PixelsPerInch: Integer read Get_PixelsPerInch write Set_PixelsPerInch;

property PrintScale: TxPrintScale read Get_PrintScale write Set_PrintScale;

property Scaled: WordBool read Get_Scaled write Set_Scaled;

property Active: WordBool read Get_Active;

property DropTarget: WordBool read Get_DropTarget write Set_DropTarget;

property HelpFile: WideString read Get_HelpFile write Set_HelpFile;

property DoubleBuffered: WordBool read Get_DoubleBuffered write Set_DoubleBuffered;

property AlignDisabled: WordBool read Get_AlignDisabled;

property VisibleDockClientCount: Integer read Get_VisibleDockClientCount;

property Enabled: WordBool read Get_Enabled write Set_Enabled;

property Cursor: Smallint read Get_Cursor write Set_Cursor;

property HelpType: TxHelpType read Get_HelpType write Set_HelpType;

property HelpKeyword: WideString read Get_HelpKeyword write Set_HelpKeyword;

end;

//******************************************************//

// DispIntf: IECSclientDisp

// Flags: (4416) Dual OleAutomation Dispatchable

// GUID: {FA39F062-7E19-41FC-959B-F15CAA0E2775}

//*******************************************************//

IECSclientDisp = dispinterface

['{FA39F062-7E19-41FC-959B-F15CAA0E2775}']

property Visible: WordBool dispid 1;

property AutoScroll: WordBool dispid 2;

property AutoSize: WordBool dispid 3;

property AxBorderStyle: TxActiveFormBorderStyle dispid 4;

property Caption: WideString dispid -518;

property Color: OLE_COLOR dispid -501;

property Font: IFontDisp dispid -512;

property KeyPreview: WordBool dispid 5;

property PixelsPerInch: Integer dispid 6;

property PrintScale: TxPrintScale dispid 7;

property Scaled: WordBool dispid 8;

property Active: WordBool readonly dispid 9;

property DropTarget: WordBool dispid 10;

property HelpFile: WideString dispid 11;

property DoubleBuffered: WordBool dispid 12;

property AlignDisabled: WordBool readonly dispid 13;

property VisibleDockClientCount: Integer readonly dispid 14;

property Enabled: WordBool dispid -514;

property Cursor: Smallint dispid 15;

property HelpType: TxHelpType dispid 16;

property HelpKeyword: WideString dispid 17;

end;

//********************************************************//

// DispIntf: IECSclientEvents

// Flags: (4096) Dispatchable

// GUID: {094EAAA7-1DB1-4F1D-8B76-FB4025C2D91B}

//********************************************************//

IECSclientEvents = dispinterface

['{094EAAA7-1DB1-4F1D-8B76-FB4025C2D91B}']

procedure OnActivate; dispid 1;

procedure OnClick; dispid 2;

procedure OnCreate; dispid 3;

procedure OnDblClick; dispid 5;

procedure OnDestroy; dispid 6;

procedure OnDeactivate; dispid 7;

procedure OnKeyPress(var Key: Smallint); dispid 11;

procedure OnPaint; dispid 16;

end;

//*********************************************************//

// OLE Control Proxy class declaration

// Control Name : TECSclient

// Help String : ECSclient Control

// Default Interface: IECSclient

// Def. Intf. DISP? : No

// Event Interface: IECSclientEvents

// TypeFlags : (34) CanCreate Control

//*********************************************************//

TECSclientOnKeyPress = procedure(Sender: TObject; var Key: Smallint) of object;

TECSclient = class(TOleControl)

private

FOnActivate: TNotifyEvent;

FOnClick: TNotifyEvent;

FOnCreate: TNotifyEvent;

FOnDblClick: TNotifyEvent;

FOnDestroy: TNotifyEvent;

FOnDeactivate: TNotifyEvent;

FOnKeyPress: TECSclientOnKeyPress;

FOnPaint: TNotifyEvent;

FIntf: IECSclient;

function GetControlInterface: IECSclient;

protected

procedure CreateControl;

procedure InitControlData; override;

public

property ControlInterface: IECSclient read GetControlInterface;

property DefaultInterface: IECSclient read GetControlInterface;

property Visible: WordBool index 1 read GetWordBoolProp write SetWordBoolProp;

property Active: WordBool index 9 read GetWordBoolProp;

property DropTarget: WordBool index 10 read GetWordBoolProp write SetWordBoolProp;

property HelpFile: WideString index 11 read GetWideStringProp write SetWideStringProp;

property DoubleBuffered: WordBool index 12 read GetWordBoolProp write SetWordBoolProp;

property AlignDisabled: WordBool index 13 read GetWordBoolProp;

property VisibleDockClientCount: Integer index 14 read GetIntegerProp;

property Enabled: WordBool index -514 read GetWordBoolProp write SetWordBoolProp;

published

property ParentColor;

property ParentFont;

property Align;

property DragCursor;

property DragMode;

property ParentShowHint;

property PopupMenu;

property ShowHint;

property TabOrder;

property OnDragDrop;

property OnDragOver;

property OnEndDrag;

property OnEnter;

property OnExit;

property OnStartDrag;

property AutoScroll: WordBool index 2 read GetWordBoolProp write SetWordBoolProp stored False;

property AutoSize: WordBool index 3 read GetWordBoolProp write SetWordBoolProp stored False;

property AxBorderStyle: TOleEnum index 4 read GetTOleEnumProp write SetTOleEnumProp stored False;

property Caption: WideString index -518 read GetWideStringProp write SetWideStringProp stored False;

property Color: TColor index -501 read GetTColorProp write SetTColorProp stored False;

property Font: TFont index -512 read GetTFontProp write _SetTFontProp stored False;

property KeyPreview: WordBool index 5 read GetWordBoolProp write SetWordBoolProp stored False;

property PixelsPerInch: Integer index 6 read GetIntegerProp write SetIntegerProp stored False;

property PrintScale: TOleEnum index 7 read GetTOleEnumProp write SetTOleEnumProp stored False;

property Scaled: WordBool index 8 read GetWordBoolProp write SetWordBoolProp stored False;

property Cursor: Smallint index 15 read GetSmallintProp write SetSmallintProp stored False;


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

  • Дослідження ключових інструментів електронної торгівлі: системи електронних платежів, переказів грошових коштів, обміну даними та глобальної мережі Інтернет. Характеристика використання інформаційних технологій у виробничій та збутовій сфері комерції.

    реферат [20,9 K], добавлен 14.05.2011

  • Переваги електронної комерції. Історія створення та мова WEB-сценаріїв PHP. Розробка системи доступу до бази даних магазину за допомогою WEB-каталогу, який надає інформацію про товари в зручній для клієнта формі, використовуючи нові Internet-технології.

    курсовая работа [78,2 K], добавлен 28.12.2013

  • Розрахунки з використанням телекомунікаційної інфраструктури, їх характеристика та сучасний розвиток. Методи реалізації та захисту платежів у мережі Інтернет. Проблеми, пов'язані із впровадженням систем електронної комерції, та шляхи їх вирішення.

    контрольная работа [658,9 K], добавлен 26.07.2009

  • Платіжні системи і механізми, що застосовуються у мережі Іntеrnet. Організація платежів та методи їх захисту. Платіжний цикл засобами Іntегnеt. Призначення цифрових сертифікатів. Проблеми, пов'язані із впровадженням електронної комерції та їх вирішення.

    контрольная работа [344,0 K], добавлен 26.07.2009

  • Розгляд поняття електронної комерції як складової частини електронного бізнесу. Розробка і впровадження рішень для Інтернет-торгівлі: відправлення на обробку та передача платіжного доручення по каналах зв'язку. Вивчення можливостей комп'ютерної телефонії.

    реферат [34,0 K], добавлен 11.06.2010

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

    лабораторная работа [45,1 K], добавлен 23.02.2011

  • Переваги електронного ринку над традиційним. Характеристика платіжної системи PayCash (Україна). Класифікація програмного забезпечення електронної комерції. Відкрите інформаційне суспільство, види віртуальних підприємств. Поняття інтернет-трейдингу.

    реферат [687,2 K], добавлен 07.02.2011

  • Комплексна обробка просторово-розподілених ресурсів мережі Інтернет. Системи інформаційного моніторингу в мережі. Обґрунтування технологій, розробка системи інтеграції Інтернет-контенту для конкурентного середовища ринку праці. Оцінювання систем аналізу.

    дипломная работа [763,8 K], добавлен 14.07.2013

  • Аналіз банківських автоматизованих систем та інтернет-банкінгу в Україні та світ. Проектування бази даних web-орієнтованої банківської системи та розробка програмного продукту. Моніторинг курсів валют банків держави. Розміщення системи у мережі Інтернет.

    дипломная работа [2,7 M], добавлен 12.06.2013

  • Характеристика функціональної структури предметної області програмного комплексу. Розробка архітектури програмної системи. Вибір типу архітектури й зразків проектування. Опис декомпозиції, залежностей та інтерфейсу. Детальне проектування модулів та даних.

    курсовая работа [462,2 K], добавлен 19.12.2013

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