Курсовая работа по предмету "Программирование, компьютеры и кибернетика, ИТ технологии"


Проектування користувальницького інтерфейсу в C++ Builder


Міністерство освіти і науки України

Закарпатський державний університет

ФАКУЛЬТЕТ ІНФОРМАТИКИ

КАФЕДРА ІНФОРМАЦІЙНИХ УПРАВЛЯЮЧИХ СИСТЕМ ТА ТЕХНОЛОГІЙ

Реєстраційний №________

Дата ___________________

КУРСОВА РОБОТА

Тема:

Проектування користувальницького інтерфейсу в C++ Builder

Рекомендована до захисту

“____” __________ 2008р.

Робота захищена

“____” __________ 2008р.

з оцінкою

_____________________

Підписи членів комісії

Зміст

Вступ

Теорія

Практична частина

Висновки

Література

Вступ

Borland C++ Builder - створене недавно компанією Borland засіб швидкої розробки проектів, що дозволяє створювати проекту мовою C++, використовуючи при цьому середовище розробки та бібліотеку компонентів Delphi. У даній частині роботи розглядається середовище розробки C++ Builder та основні прийоми, застосовувані при проектуванні користувальницького інтерфейсу. C++ Builder виробництва корпорації Borland призначена для операційних систем Windows 95 та NT. Інтегроване середовище C++ Builder забезпечує швидкість візуальної розробки, продуктивність повторно використовуваних компонентів у сполученні з міццю мовних засобів C++, удосконаленими інструментами та різномасштабними засобами доступу до баз даних. C++ Builder може бути використаний скрізь, де потрібно доповнити існуючі додатки розширеним стандартом мови C++, підвищити швидкодія та додати користувальницькому інтерфейсу якості професійного рівня.

Головною метою нашої роботи, буде написання інтерактивної системи навчання програмуванню на мові C++. В теоретичній частині наведемо основні відомості про інструментарій.

Теорія

Розглянемо характеристики, які притаманні Borland C++ Builder на як системі объєктно-орієнтованого програмування для швидкої розробки сучасного математичного забезпечення персональних компютерів. Borland C++ Builder випускається в трьох варіантах: Standard, Professional й Client/Server Suite.

Швидкість візуальної розробки

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

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

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

Механізми двунаправленої розробки (two-way-tools) усувають барєри між програмістом і його кодом. Технологія двунаправленої розробки забезпечує контроль за вашим кодом за допомогою гнучкого, інтегрованого й синхронізованої взаємодії між інструментами візуального проектування й Редактором коду.

Властивості, методи й події - це саме ті елементи мови, які забезпечують швидку розробку додатків у рамках об`єктно - орієнтованого програмування. Властивості дозволяють легко встановлювати різноманітні характеристики обєктів. Методи роблять певні, іноді досить складні, операції над обєктом. Події звязують впливу користувача на обєкти з кодами реакції на ці впливи. Події можуть виникати при таких специфічних змінах стану обєктів як відновлення даних в інтерфейсних елементах доступу до баз даних. Працюючи спільно, властивості, методи й події утворять середовище RAD (Rapid Application Development) швидкого й інтуїтивного програмування надійних додатків для Windows.

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

Випробування прототипу дозволяє без праці переходити від прототипу додатка до повністю функціонального, професійно оформленому програмному продукту, діючи в межах інтегрованого середовища. Щоб упевнитися, що ваша програма робить очікувані результати, раніше доводилося багаторазово проходити по циклі редагування => компіляція => зборка, непродуктивно витрачаючи час. C++Builder поєднує три етапи розробки в єдиний виробничий процес. У результаті вдається будувати додатка, що базуються на поточних вимогах замовника, разом з тим гнучкі настільки, щоб швидко адаптувати їх до нових запитів користувачів.

Майстер інсталяції керує створенням уніфікованих дистрибутивних пакетів для розроблених додатків.

Вихідні тексти Бібліотеки Візуальних Компонентів полегшують розробку нових компонентів на базі готових прикладів.

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

Розширена математична бібліотека містить додаткові уніфіковані функції статистичних і фінансових обчислень.

Продуктивність компонентів

Бібліотека Візуальних Компонентів VCL придбала статус нового промислового стандарту й у цей час застосовується більш ніж півмільйоном користувачів, істотно прискорюючи розробку надійних додатків будь-якого ступеня складності. VCL містить близько 100 повторно використовуваних компонентів, які реалізують всі елементи користувальницького інтерфейсу операційної системи Windows 95. Крім того, VCL надають у розпорядження програмістів такі оригінальні обєкти, як записні книжки із закладками, табличні сітки для відображення вмісту баз даних і навіть органи керування пристроями мультимедія. Перебуваючи в середовищі об`єктно - орієнтованого Програмування C++Builder, компоненти можна використати безпосередньо, міняти їхні властивості, вигляд і поводження або породжувати похідні елементи, з потрібними відмітними характеристиками.

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

Компонента ChartFX забезпечує негайна побудова на вашій формі різноманітних графіків, діаграм, таблиць і передбачає перевірку правопису на багатьох мовах. У варіанті C++Builder Standard цей компонент є єдиним представником групи Active.

Інтеграція компонентів Active дозволяє розширити Бібліотеку Візуальних Компонентів, включивши компоненти стандарту Active для розробки додатків у мережі Internet. Якщо ваш компютер має вихід в Internet, зєднаєтеся із сервером за адресою

http://www.borland.com/devsupport/bcppbuilder/netmanage.html

і скачайте файл автоматичної інтеграції OCXINTEG.ZIP (12 Кбайт) і файл керування мережею AX602.ZIP (6.5 байт), розроблений фірмою NetManage. Файл інтеграції автоматично проведе для вас процедуру додавання нових компонентів до VCL й установить їх на Палітру. У результаті ви одержите можливість розробляти додатка для Internet, аж до створення власного мережного коммуникатора (HTML browser).

Потужність язикових засобів C++

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

Нові елементи стандарту ANSI/ISO мови C++ представлені шаблонами, просторами імен, виключеннями, інформацією про типи часу виконання (RTTI), поряд з розширенням набору ключових слів bool, explicit, mutable, typename. automated й ін.

Инкрементальный линкер здійснює швидку й надійну зборку додатку у форматі ЕХЕ файлів порівняно меншого розміру. Автоматично усуваючи повторну зборку не змінилися вихідних обєктних файлів і підключення невикористовуваних функцій, інкрементальній линкер будує ефективну виконувану програму з мінімальними втратами часу.

Чистий і доступний код додатків, які C++Builder будує на основі надаваних розроблювачеві компонентних властивостей, подій і методів, виключає сховані й важкі в налагодженні макроси.

Підтримка промислових стандартів Active, OLE, СОМ, MAPI, Windows Sockets TCP/IP, ISAPI. NSAPI, ODBC, Unicode й MBCS.

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

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

Створення DLL, LIB, і ЕХЕ файлів надає волю вибору формату цільового додатка відповідно до вимог конкретного проекту.

Пряме звертання до системних функцій Windows 95 й NT дає можливість програмістам, що працюють у середовищі C++Builder. при необхідності скористатися всіма вдосконаленнями сучасних операційних систем.

Механізм OLE Automation надає вашому додатку можливість управляти іншими типовими програмними комплексами для Windows (такими як Microsoft Word, Excel, Visual Basic, Lotus 1-2-3, dBASE й Paradox) за схемою мережної взаємодії контролер/сервер.

Масштабовані зєднання з базами даних

Розробка по способі "drag-and-drop" багаторазово спрощує й прискорює звичайно трудомісткий процес програмування СУБД в архітектурі клієнт/сервер. Широкий вибір компонентів керування візуалізацією й редагуванням дозволяє легко змінювати вид відображуваної інформації й поводження програми. C++Builder використає Провідник баз даних (Database Explorer) і масштабований Словник даних (Data Dictionary ), щоб автоматично настроїти засобу відображення й редагування стосовно до специфіки вашої інформації.

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

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

Живі дані (live data) надаються розроблювачеві в процесі візуального проектування прототипів і при випробуванні додатків баз даних. Вам не буде потрібно більше писати тестові пастки або багаторазово перетранслювати й запускати додаток - дані на стадії проектування будуть точно такими ж і представлені точно так само, як їх побачить користувач закінченої програми.

Механізм BDE (Borland Database Engine) підтримує високопродуктивний 32-розрядний доступ до баз даних dBASE, Paradox: Sybase. Oracle, DB2. Microsoft SQL Server. Informix, InterBase й Local InterBase. C++Builder використає контролер ODBC (Open Database Connectivity) виробництва Microsoft для звязку із серверами баз даних Excel, Access, FoxPro й Btrieve. Будучи фундаментом будь-якого додатка бази даних, BDE тісно повязаний зі Сховищем обєктів і Модулями даних.

Обєкти Модулів даних діють як сполучний каркас додатка - вони визначають джерела й бізнес-логіку бази даних, фіксують взаємозвязку компонентів. У централізованій моделі доступу до даних бізнесу-логіка відділена від розробки графічного інтерфейсу з користувачем (GUI). Будь-яка зміна бізнесу-логіки вашої бази даних позначається на поводженні тільки відповідного Модуля даних, а результати зміни проявляються негайно у всіх додатках, що використають даний модуль. Працюючи з модулями даних, ви однократно встановлюєте звязки вашого додатка з адресуємої базою даних, а потім по способі "drag-and-drop" можете перетаскувати поля записів на нові форми - у будь-який вузол вашої мережі. Ніякого додаткового кодування при цьому не потрібно.

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

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

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

Застосування BORLAND C++ BUILDER для створення ігрових програм:

Borland C++ Builder - випущене недавно компанією Borland засіб швидкої розробки проектів, що дозволяє створювати проекту мовою C++, використовуючи при цьому середовище розробки та бібліотеку компонентів Delphi. У даній частині роботи розглядається середовище розробки C++ Builder та основні прийоми, застосовувані при проектуванні користувальницького інтерфейсу.

Середовище розробки C++ Builder

C++ Builder являє собою SDI-додаток, головне вікно якого містить інструментальну панель, що набудоване (ліворуч) і палітру компонентів (праворуч). Крім цього, при запуску C++ Builder зявляються вікно інспектора обєктів (ліворуч) і форма нового проекту (праворуч). Під вікном форми проекту перебуває вікно редактора коду.

Рис.1. Середовище розробки C++ Builder

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

Компоненти C++ Builder

Компоненти розділяються на видимі (візуальні) і невидимі (невізуальні). Візуальні компоненти зявляються під час виконання точно так само, як і під час проектування. Прикладами є кнопки та редагують поля, що. Невізуальні компоненти зявляються під час проектування як піктограми на формі. Вони ніколи не видні під час виконання, але мають певну функціональність (наприклад, забезпечують доступ до даних, викликають стандартні діалоги Windows 95та ін.)

Рис. 2. Приклад використання видимих і невидимих компонентів

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

Кожен компонент C++ Builder має три різновиди характеристик: властивості, події та методи.

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

Рис.3. Інспектор обєктів

Властивості компонентів

Властивості є атрибутами компонента, що визначають його зовнішній вигляд і поводження. Багато властивостей компонента в колонку властивостей мають значення, яке встановлюється за замовчуванням (наприклад, висота кнопок). Властивості компонента відображаються а сторінці властивостей (Properties). Інспектор обєктів відображає опубліковані (published) властивості компонентів. Крім published-властивостей, компоненти можуть і найчастіше мають загальні (public), опубліковані властивості, які доступні тільки під час виконання проекту. Інспектор обєктів використається для установки властивостей під час проектування. Список властивостей розташовується на сторінці властивостей інспектори обєктів. Можна визначити властивості під час проектування або написати код для видозміни властивостей компонента під час виконання проекту.

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

Події

Сторінка подій (Events) інспектори обєктів показує список подій, розпізнаваних компонентом (програмування для операційних систем із графічним користувальницьким інтерфейсом, зокрема, для Windows 95 або Windows NT пре думає опис реакції проекту на ті або інші події, а сама операційна система займається постійним опитуванням компютера з метою виявлення настання якої-небудь події). Кожен компонент має свій власний набір оброблювачів подій. В C++ Builder варто писати функції, називані оброблювачами подій, і звязувати події із цими функціями. Створюючи оброблювач тої чи іншої події, ви доручаєте програмі виконати написану функцію, якщо ця подія відбудеться.

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

Рис.4. Прототип оброблювача подій.

Методи

Метод є функцією, що повязана з компонентом, і яка оголошується як частина обєкта. Створюючи оброблювачі подій, можна викликати методи, використовуючи наступну нотацію: ->, наприклад:

Edit1->Show();

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

Менеджер проектів

Файли, що утворять додаток - форми та модулі - зібрані в проект. Менеджер проектів показує списки файлів і модулів проекту та дозволяє створювати навігацію між ними. Можна викликати менеджер проектів , вибравши пункт меню View/Project Manager. За замовчуванням знову створений проект одержує імя Project1.cpp.

Рис.5. Менеджер проектів

За замовчуванням проект спочатку містить файли для однієї форми та вихідного коду одного модуля. Однак більшість проектів містять кілька форм і модулів. Щоб додати модуль або форму до проекту, потрібно клацнути правою кнопкою миші та вибрати пункт New Form з контекстного меню. Можна також додавати існуючі форми та модулі до проекту, використовуючи кнопку Add контекстного меню менеджера проектів і вибираючи модуль або форму, яку потрібно додати. Форми та модулі можна видалити в будь-який момент протягом розробки проекту. Однак, через те, що форма звязані завжди з модулем, не можна видалити одне без видалення іншого, за винятком случаючи, коли модуль не має звязку з формою. Видалити модуль із проекту можна, використовуючи кнопку Remove менеджера проектів.

Якщо вибрати кнопку Options у менеджері проектів, відкриється діалогова панель опцій проекту, у якій можна вибрати головну форму проекту, визначити, які форми будуть створюватися динамічно, які параметри компіляції модулів (у тому числі створених в Delphi 2.0, тому що C++ Builder може включати їх у проекти) і компонування.

Рис. 6. Установка опцій проекту

Важливим елементом середовища розробки C++ Builder є контекстне меню, яке з`являється при натисканні на праву клавішу миші та дозволяє швидкий доступ до найбільше часто використовуваних команд.

Зрозуміло, C++ Builder має убудовану систему контекстно-контекстно-залежної допомоги, доступної для будь-якого елемента інтерфейсу та довідкової інформації, що є великим джерелом, про C++ Builder.

Практична частина

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

Лістинг 1. (project.cpp)

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

USERES("Project1.res");

USEFORM("Unit1.cpp", Form1);

USEFORM("Unit2.cpp", Form2);

USEFORM("Unit3.cpp", Form3);

USEFORM("Unit4.cpp", Form4);

USEFORM("Unit5.cpp", Form5);

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm(__classid(TForm1), &Form1);

Application->CreateForm(__classid(TForm2), &Form2);

Application->CreateForm(__classid(TForm3), &Form3);

Application->CreateForm(__classid(TForm4), &Form4);

Application->CreateForm(__classid(TForm5), &Form5);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

//---------------------------------------------------------------------------

Лістинг 2. (Unit1.cpp)

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Timer1Timer(TObject *Sender)

{

Timer1->Enabled = false;

DrawScene();

Yield();

Timer1->Enabled = true;

}

//---------------------------------------------------------------------------

BOOL bSetupPixelFormat(HDC hdc)

{

PIXELFORMATDESCRIPTOR pfd, *ppfd;

int pixelformat;

ppfd = &pfd;

ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR);

ppfd->nVersion = 1;

ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |

PFD_DOUBLEBUFFER;

ppfd->dwLayerMask = PFD_MAIN_PLANE;

ppfd->iPixelType = PFD_TYPE_COLORINDEX;

ppfd->cColorBits = 8;

ppfd->cDepthBits = 16;

ppfd->cAccumBits = 0;

ppfd->cStencilBits = 0;

if ( (pixelformat = ChoosePixelFormat(hdc, ppfd)) == 0 )

{

MessageBox(NULL, "ChoosePixelFormat failed", "Error", MB_OK);

return FALSE;

}

if (SetPixelFormat(hdc, pixelformat, ppfd) == FALSE)

{

MessageBox(NULL, "SetPixelFormat failed", "Error", MB_OK);

return FALSE;

}

return TRUE;

}

void TForm2::DrawScene()

{

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glPushMatrix();

latitude += latinc;

longitude += longinc;

polarView( radius, 0, latitude, longitude );

glIndexi(RED_INDEX);

glCallList(CONE);

glIndexi(BLUE_INDEX);

glCallList(GLOBE);

glIndexi(GREEN_INDEX);

glPushMatrix();

glTranslatef(0.8F, -0.65F, 0.0F);

glRotatef(30.0F, 1.0F, 0.5F, 1.0F);

glCallList(CYLINDER);

glPopMatrix();

glPopMatrix();

SwapBuffers(ghDC);

}

GLvoid TForm2::resize( GLsizei width, GLsizei height )

{

GLfloat aspect;

glViewport( 0, 0, width, height );

aspect = (GLfloat) width / height;

glMatrixMode( GL_PROJECTION );

glLoadIdentity();

gluPerspective( 45.0, aspect, 3.0, 7.0 );

glMatrixMode( GL_MODELVIEW );

}

GLvoid TForm2::createObjects()

{

GLUquadricObj *quadObj;

glNewList(GLOBE, GL_COMPILE);

quadObj = gluNewQuadric ();

gluQuadricDrawStyle (quadObj, GLU_LINE);

gluSphere (quadObj, 1.5, 16, 16);

glEndList();

glNewList(CONE, GL_COMPILE);

quadObj = gluNewQuadric ();

gluQuadricDrawStyle (quadObj, GLU_FILL);

gluQuadricNormals (quadObj, GLU_SMOOTH);

gluCylinder(quadObj, 0.3, 0.0, 0.6, 15, 10);

glEndList();

glNewList(CYLINDER, GL_COMPILE);

glPushMatrix ();

glRotatef ((GLfloat)90.0, (GLfloat)1.0, (GLfloat)0.0, (GLfloat)0.0);

glTranslatef ((GLfloat)0.0, (GLfloat)0.0, (GLfloat)-1.0);

quadObj = gluNewQuadric ();

gluQuadricDrawStyle (quadObj, GLU_FILL);

gluQuadricNormals (quadObj, GLU_SMOOTH);

gluCylinder (quadObj, 0.3, 0.3, 0.6, 12, 2);

glPopMatrix ();

glEndList();

}

GLvoid TForm2::initializeGL(GLsizei width, GLsizei height)

{

GLfloat maxObjectSize, aspect;

GLdouble near_plane;

glClearIndex( (GLfloat)BLACK_INDEX);

glClearDepth( 1.0 );

glEnable(GL_DEPTH_TEST);

glMatrixMode( GL_PROJECTION );

aspect = (GLfloat) width / height;

gluPerspective( 45.0, aspect, 3.0, 7.0 );

glMatrixMode( GL_MODELVIEW );

near_plane = 3.0;

maxObjectSize = 3.0F;

radius = near_plane + maxObjectSize/2.0;

latitude = 0.0F;

longitude = 0.0F;

latinc = 6.0F;

longinc = 2.5F;

createObjects();

}

void TForm2::polarView(GLdouble radius, GLdouble twist, GLdouble latitude,

GLdouble longitude)

{

glTranslated(0.0, 0.0, -radius);

glRotated(-twist, 0.0, 0.0, 1.0);

glRotated(-latitude, 1.0, 0.0, 0.0);

glRotated(longitude, 0.0, 0.0, 1.0);

}

void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)

{

/* Timer1->Enabled = false;

*/

if (ghRC)

wglDeleteContext(ghRC);

if (ghDC)

ReleaseDC(Handle, ghDC);

MediaPlayer1->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::FormCreate(TObject *Sender)

{

ghDC = GetDC(Handle);

if (!bSetupPixelFormat(ghDC))

Close();

ghRC = wglCreateContext(ghDC);

wglMakeCurrent(ghDC, ghRC);

initializeGL(ClientRect.Right, ClientRect.Bottom);

MediaPlayer1->Open();

MediaPlayer1->Play();

ProgressBar1->Position = 0;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::FormKeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{

MediaPlayer1->Close();

Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::FormResize(TObject *Sender)

{

resize(ClientRect.Right, ClientRect.Bottom);

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Timer2Timer(TObject *Sender)

{

ProgressBar1->Position++;

}

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit3.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm3 *Form3;

//---------------------------------------------------------------------------

__fastcall TForm3::TForm3(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

int step=0;

TForm3::nextstep(){

switch(step){

case 0:

deltatime(300);

break;

case 1:

MediaPlayer1->FileName = "data765888.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 2:

deltatime(1000);

break;

case 3:

Shape3->Visible=true;

deltatime(300);

break;

case 4:

MediaPlayer1->FileName = "data9564334.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 5:

Label1->Visible = false;

Label2->Visible = false;

Label3->Visible = false;

Label4->Visible = false;

Label5->Visible = false;

Label6->Visible = false;

Label7->Visible = false;

Label8->Visible = false;

Label9->Visible = false;

Label13->Visible = false;

Shape3->Visible=false;

/* Label10->Visible = false;

Label11->Visible = false;

Label12->Visible = false;

Label14->Visible = false;

Label15->Visible = false;

Label16->Visible = false;*/

Label10->Visible = true;

Label11->Visible = true;

Label12->Visible = true;

Label14->Visible = true;

deltatime(300);

break;

case 6:

MediaPlayer1->FileName = "data533677.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 7:

deltatime(400);

break;

case 8:

Label1->Visible = true;

Label2->Visible = true;

Label3->Visible = true;

Label4->Visible = true;

Label5->Visible = true;

Label6->Visible = true;

Label7->Visible = true;

Label8->Visible = true;

Label9->Visible = true;

Label13->Visible = true;

Label10->Visible = false;

Label11->Visible = false;

Label12->Visible = false;

Label14->Visible = false;

deltatime(300);

break;

case 9:

Shape2->Visible=true;

deltatime(300);

break;

case 10:

MediaPlayer1->FileName = "data822567.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 11:

deltatime(400);

break;

case 12:

Shape2->Visible=false;

deltatime(300);

break;

case 13:

MediaPlayer1->FileName = "data6345676.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 14:

deltatime(400);

break;

case 15:

Label1->Visible = false;

Label3->Visible = false;

Label4->Visible = false;

Label5->Visible = false;

Label8->Visible = false;

Label9->Visible = false;

Label13->Visible = false;

deltatime(300);

break;

case 16:

MediaPlayer1->FileName = "data123423.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 17:

deltatime(300);

break;

case 18:

Label1->Visible = true;

Label2->Visible = true;

Label3->Visible = true;

Label4->Visible = true;

Label5->Visible = true;

Label6->Visible = true;

Label7->Visible = true;

Label8->Visible = true;

Label9->Visible = true;

Label13->Visible = true;

Label10->Visible = false;

Label11->Visible = false;

Label12->Visible = false;

Label14->Visible = false;

deltatime(300);

break;

case 19:

MediaPlayer1->FileName = "data908976.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 20:

deltatime(300);

break;

case 21:

Label2->Visible = false;

Label4->Visible = false;

Label6->Visible = false;

Label7->Visible = false;

Label8->Visible = false;

Label9->Visible = false;

deltatime(300);

break;

case 22:

MediaPlayer1->FileName = "data444555.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 23:

deltatime(300);

break;

case 24:

Label1->Visible = true;

Label2->Visible = true;

Label3->Visible = true;

Label4->Visible = true;

Label5->Visible = true;

Label6->Visible = true;

Label7->Visible = true;

Label8->Visible = true;

Label9->Visible = true;

Label13->Visible = true;

Label10->Visible = false;

Label11->Visible = false;

Label12->Visible = false;

Label14->Visible = false;

deltatime(1500);

break;

case 25:

Label1->Visible = false;

Label2->Visible = false;

Label3->Visible = false;

Label5->Visible = false;

Label6->Visible = false;

Label7->Visible = false;

Label8->Visible = false;

Label9->Visible = false;

Label13->Visible = false;

deltatime(300);

break;

case 26:

MediaPlayer1->FileName = "data444777.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 27:

deltatime(300);

break;

case 28:

MediaPlayer1->FileName = "data8349244.avi";

MediaPlayer1->Open();

MediaPlayer1->Play();

Label4->Visible = false;

break;

case 29:

Close();

break;

}

}

TForm3::deltatime(int delta){

Timer1->Interval = delta;

Timer1->Enabled = true;

}

void __fastcall TForm3::FormActivate(TObject *Sender)

{

Label1->Visible = true;

Label2->Visible = true;

Label3->Visible = true;

Label4->Visible = true;

Label5->Visible = true;

Label6->Visible = true;

Label7->Visible = true;

Label8->Visible = true;

Label9->Visible = true;

Label13->Visible = true;

Label10->Visible = false;

Label11->Visible = false;

Label12->Visible = false;

Label14->Visible = false;

step=0;

nextstep();

}

//---------------------------------------------------------------------------

void __fastcall TForm3::Timer1Timer(TObject *Sender)

{

Timer1->Enabled = false;

step++;

nextstep();

}

//---------------------------------------------------------------------------

void __fastcall TForm3::BitBtn1Click(TObject *Sender)

{

MediaPlayer1->Close();

Timer1->Enabled = false;

deltatime(10);

}

//---------------------------------------------------------------------------

void __fastcall TForm3::Timer2Timer(TObject *Sender)

{

nextstep();

}

//---------------------------------------------------------------------------

void __fastcall TForm3::MediaPlayer1Notify(TObject *Sender)

{

step++;

nextstep();

}

//---------------------------------------------------------------------------

void __fastcall TForm3::FormClose(TObject *Sender, TCloseAction &Action)

{

MediaPlayer1->Close();

Timer1->Enabled = false;

step=1000;

}

//---------------------------------------------------------------------------

int t=1;

void __fastcall TForm3::BitBtn3Click(TObject *Sender)

{

if(t)

{

MediaPlayer1->Notify = false;

MediaPlayer1->Pause();

}

else

{

MediaPlayer1->Resume();

MediaPlayer1->Notify = true;

}

//Timer1->Enabled = false;

}

//---------------------------------------------------------------------------

Лістинг 4. (Unit4.cpp)

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit4.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm4 *Form4;

//---------------------------------------------------------------------------

__fastcall TForm4::TForm4(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

TForm4::deltatime(int delta){

Timer1->Interval = delta;

Timer1->Enabled = true;

}

int step=0;

TForm4::nextstep(){

switch(step){

case 0:

deltatime(200);

break;

case 1:

MediaPlayer1->FileName = "data6565.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 2:

deltatime(200);

break;

case 3:

MediaPlayer1->FileName = "data555.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 4:

deltatime(200);

break;

case 5:

MediaPlayer1->FileName = "data4567.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 6:

Close();

break;

}

void __fastcall TForm4::Timer1Timer(TObject *Sender)

{

Timer1->Enabled = false;

step++;

nextstep();

}

//---------------------------------------------------------------------------

void __fastcall TForm4::FormActivate(TObject *Sender)

{

step=0;

nextstep();

}

//---------------------------------------------------------------------------

void __fastcall TForm4::MediaPlayer1Notify(TObject *Sender)

{

step++;

nextstep();

}

//---------------------------------------------------------------------------

void __fastcall TForm4::FormClose(TObject *Sender, TCloseAction &Action)

{

MediaPlayer1->Close();

Timer1->Enabled = false;

step=1000;

}

//---------------------------------------------------------------------------

void __fastcall TForm4::BitBtn1Click(TObject *Sender)

{

MediaPlayer1->Close();

Timer1->Enabled = false;

deltatime(10);

}

//---------------------------------------------------------------------------

int t=1;

void __fastcall TForm4::BitBtn3Click(TObject *Sender)

{

if(t)

{

MediaPlayer1->Notify = false;

MediaPlayer1->Pause();

}

else

{

MediaPlayer1->Resume();

MediaPlayer1->Notify = true;

}

}

//---------------------------------------------------------------------------

Лістинг 5. (Unit5.cpp)

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit5.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm5 *Form5;

//---------------------------------------------------------------------------

__fastcall TForm5::TForm5(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

int step=0;

TForm5::nextstep(){

switch(step){

case 0:

deltatime(300);

break;

case 1:

MediaPlayer1->FileName = "data89674.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 2:

deltatime(300);

break;

case 3:

Image3->Visible = true;

deltatime(300);

break;

case 4:

MediaPlayer1->FileName = "data888777.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

case 5:

deltatime(200);

break;

case 6:

Image3->Visible = false;

deltatime(400);

break;

case 7:

Label1->Visible = true;

Label2->Visible = true;

Label3->Visible = true;

deltatime(200);

break;

case 8:

MediaPlayer1->FileName = "data876.mp3";

MediaPlayer1->Open();

MediaPlayer1->Play();

break;

}

}

TForm5::deltatime(int delta){

Timer1->Interval = delta;

Timer1->Enabled = true;

}

void __fastcall TForm5::FormActivate(TObject *Sender)

{

Label1->Visible = false;

Label2->Visible = false;

Label3->Visible = false;

Label4->Visible = false;

Label5->Visible = false;

Label6->Visible = false;

Label7->Visible = false;

Label8->Visible = false;

Label9->Visible = false;

Label13->Visible = false;

Label10->Visible = false;

Label11->Visible = false;

Label12->Visible = false;

Label14->Visible = false;

Image1->Visible = false;

Image2->Visible = false;

step=0;

nextstep();

}

//---------------------------------------------------------------------------

void __fastcall TForm5::Timer1Timer(TObject *Sender)

{

Timer1->Enabled = false;

step++;

nextstep();

}

//---------------------------------------------------------------------------

void __fastcall TForm5::BitBtn1Click(TObject *Sender)

{

MediaPlayer1->Close();

Timer1->Enabled = false;

deltatime(10);

}

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------

void __fastcall TForm5::MediaPlayer1Notify(TObject *Sender)

{

step++;

nextstep();

}

//---------------------------------------------------------------------------

void __fastcall TForm5::FormClose(TObject *Sender, TCloseAction &Action)

{

MediaPlayer1->Close();

Timer1->Enabled = false;

step=1000;

}

//---------------------------------------------------------------------------

int t=1;

void __fastcall TForm5::BitBtn3Click(TObject *Sender)

{

if(t)

{

MediaPlayer1->Notify = false;

MediaPlayer1->Pause();

}

else

{

MediaPlayer1->Resume();

MediaPlayer1->Notify = true;

}

//Timer1->Enabled = false;

}

//---------------------------------------------------------------------------

Результат роботи програми

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

Скрін 1. Загальний графічний інтерфейс програми.

Скрін 2. Приклад уроку по Borland C++ Builder в розробленій нами програмі

Висновки

В нашій роботі були проаналізовані питання відносно теоретичної основи побудови програм з простим інтерфейсом користувача в середовищі Borland C++ Builder а також проблеми, які виникають при цьому. Результатом цього є програма яка реалізує процес навчання програмування на даній мові програмування.

Дана програма має досить простий інтерфейс та алгоритмічну структуру.

Література

Касаткин А.И., Вальвачев А.Н. Профессиональное прогрпммирование на языке Си. Мн., 1992. 240 С.

Бруно Бабэ. Просто и ясно о Borland C++. М., 1996. 400 С.

Справочник по классам Borland C++ 4.0. К., 1994. 256 С.



Не сдавайте скачаную работу преподавателю!
Данную курсовую работу Вы можете использовать для написания своего курсового проекта.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем курсовую работу самостоятельно:
! Как писать курсовую работу Практические советы по написанию семестровых и курсовых работ.
! Схема написания курсовой Из каких частей состоит курсовик. С чего начать и как правильно закончить работу.
! Формулировка проблемы Описываем цель курсовой, что анализируем, разрабатываем, какого результата хотим добиться.
! План курсовой работы Нумерованным списком описывается порядок и структура будующей работы.
! Введение курсовой работы Что пишется в введении, какой объем вводной части?
! Задачи курсовой работы Правильно начинать любую работу с постановки задач, описания того что необходимо сделать.
! Источники информации Какими источниками следует пользоваться. Почему не стоит доверять бесплатно скачанным работа.
! Заключение курсовой работы Подведение итогов проведенных мероприятий, достигнута ли цель, решена ли проблема.
! Оригинальность текстов Каким образом можно повысить оригинальность текстов чтобы пройти проверку антиплагиатом.
! Оформление курсовика Требования и методические рекомендации по оформлению работы по ГОСТ.

Читайте также:
Разновидности курсовых Какие курсовые бывают в чем их особенности и принципиальные отличия.
Отличие курсового проекта от работы Чем принципиально отличается по структуре и подходу разработка курсового проекта.
Типичные недостатки На что чаще всего обращают внимание преподаватели и какие ошибки допускают студенты.
Защита курсовой работы Как подготовиться к защите курсовой работы и как ее провести.
Доклад на защиту Как подготовить доклад чтобы он был не скучным, интересным и информативным для преподавателя.
Оценка курсовой работы Каким образом преподаватели оценивают качества подготовленного курсовика.

Сейчас смотрят :

Курсовая работа Расчет и проект пункта послеуборочной обработки и хранения зерна на
Курсовая работа Анализ производственной деятельности предприятия
Курсовая работа Пути повышения эффективности использования трудовых ресурсов предприятия (ООО "Кумертауский электродный завод")
Курсовая работа Проектирование подсистем оперативного управления производством
Курсовая работа Производительность труда и пути ее повышения
Курсовая работа Рынок труда и политика занятости
Курсовая работа Финансовые услуги коммерческих банков
Курсовая работа Интегрированные уроки как одно из средств повышения активности учащихся на уроках в старших классах
Курсовая работа Вирусы и природа их происхождения
Курсовая работа Деятельность органа федерального казначейства и его территориальных органов
Курсовая работа ПРОКУРАТУРА РОССИЙСКОЙ ФЕДЕРАЦИИ
Курсовая работа Организация работы вагоносборочного участка ремонтного депо пассажирских вагонов
Курсовая работа Конкуренция и ее роль в рыночной экономике
Курсовая работа Роль государственного сектора в экономике
Курсовая работа Педагогический рисунок