Розробка архітектури та технології побудови захищеної системи електронної комерції
Проектування дієздатної демонстраційної моделі системи електронної комерції. Розробка сценарію купівлі з використанням мережі Інтернет. Архітектура механізму розповсюдження сертифікатів відкритих ключів. Підсистема асиметричної і симетричної криптографії.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | украинский |
Дата добавления | 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