Информатика программирование : Курсовая работа: Побудова клавіатурного тренажера
Курсовая работа: Побудова клавіатурного тренажера
МІНІСТЕРСТВО
ОСВІТИ І НАУКИ УКРАЇНИ
Кафедра
загальної інформатики та математичного моделювання
Реєстраційний
________
Дата___________________
КУРСОВА
РОБОТА
(З
дисципліни Об’єктно-Оріентовне Програмування)
Тема:
”Побудова клавіатурного
тренажера”
Рекомендовано
до захисту
"_____"__________2007р.
Робота
захищена
"_____"__________2007р.
з
оцінкою
_____________________
Зміст
Вступ
Теоретична частина
·
Застосування
C++ BUILDER для створення інтерфейсних програм
·
Опис VCL компонентів
·
Робота з
графікою GDI
Практична
частина
·
Опис
роботи програми
·
Лістинг
програми
·
Результат
роботи програми
Висновки
Використана
Література
Вступ
Основною задачею
даної роботи є створення відносно простої програми клавіатурний тренажер. В
якості мови розробки було вибрано BC++ BILDER 6.0, який дозволяє створювати програмні продукти із складним
програмним інтерфейсом.
Borland
C++ Builder - це засіб швидкої розробки програм, що дозволяє створювати
програми мовою C++, використовуючи при цьому середовище розробки і бібліотеку
компонентів Delphi. Надалі в теоретичній частині буде розглядатися середовище
розробки C++ Builder і основні прийоми, застосовувані при проектуванн
нтерфейсу для клавіатурного тренажера.
IDE-середовище
володіє всіма необхідними інструментами програмування і є робочою областю
створюваного розробником проекту. Тут створюються елементи управління
компоненти, вводиться код, настроюється С++ Builder, а також можуть задаватися
властивості проекту.
Теоретична
частина
Застосування
C++ BUILDER для створення інтерфейсних програм
Інтегроване
середовище розробки С++ Builder складається з наступних основних частин:
- головне
меню;
- панель
нструментів;
- палітра
компонентів;
- редактор
форм;
- редактор
коду.
- інспектор
об’єктів.

Рис. 1. Загальне
середовище С++ Builder.
У верхній частин
вікна IDE-середовища ви бачите панель головного меню.
Панель
нструментів в С++ Builder зображена на рис.2. Призначення розміщених на панел
кнопок можна дізнатися з ярличків, що з'являються, якщо ви наведете курсор миш
на відповідну кнопку і на деякий час затримаєте його.

Рис. 2. Панель
нструментів.
Палітра
компонентів – це вітрина бібліотеки візуальних компонентів (Visual Component
Library - VCL), зображена на рис. 3. Вона дозволяє згрупувати компоненти
відповідно до їх призначення. Імена компонентів, які відповідають тій або іншій
піктограмі, ви можете дізнатись з ярличка, що з'являється, якщо ви затримаєте
над цією піктограмою курсор миші. Якщо ви виберете в палітрі компонент
натиснете клавішу F1, то вам буде показано довідку по типу даного компоненту.

Рис. 3. Палітра
компонентів
Основою майже
всіх проектів С++ Builder є форма, показана на рис. 4. Її можна розуміти як
типове вікно Windows. Форма є основою, на якій розміщуються інші компоненти.

Рис. 4. Вікно
форми
Однією з
найважливіших частин середовища С++ Builder є вікно редактора коду, яке
показано на рис. 5.

Рис. 5. Вікно
редактора коду.
Інспектор
об'єктів забезпечує простий і зручний інтерфейс для зміни властивостей об'єктів
С++ Builder і управління подіями, на які реагує об'єкт.
а) б) 
Рис. 6. Сторінка
властивостей (а) та сторінка подій (б)
інспектора
об'єктів.
Вікно інспектора
об'єктів (рис. 6) має дві сторінки. Вверху є випадний список всіх компонентів,
розміщених на формі. У ньому ви можете вибрати той компонент, властивості якого
вас цікавлять.
Сторінка властивостей
(properties) інспектора об'єктів (рис. 6. а), показує властивості того об'єкту,
який в даний момент виділений вами. Властивості є атрибутами компоненту, що
визначають його зовнішній вигляд і поведінку. При визначенні властивостей
компоненту під час проектування потрібно вибрати компонент на формі, відкрити
сторінку властивостей в інспекторі об'єктів, вибрати потрібну властивість
змінити її за допомогою редактора властивостей (це може бути порожнє поле для
введення тексту або числа, випадний список, список, що розкривається, діалогова
панель і т.д.).
Сторінка подій
(events) складає другу частину інспектора об'єктів (рис. 6. б). На ній вказан
всі події, на які може реагувати вибраний об'єкт. Для того, щоб додати обробник
подій, потрібно вибрати на формі за допомогою миші компонент, якому необхідний
обробник подій, потім відкрити сторінку подій інспектора об'єктів і двіч
натиснути лівою клавішею миші на колонці значень поряд з подією, щоб примусити
C++ Builder згенерувати прототип обробника подій і показати його в редактор
коду. При цьому автоматично генерується текст порожньої функції, і редактор
відкривається в тому місці, де слід вводити код. Далі потрібно ввести код, який
повинен виконуватися при настанні події.
Опис
VCL компонентів
Палітра
компонентів VCL – бібліотеки візуальних компонентів С++ Builder, має ряд
сторінок, на яких представлені піктограми всіх компонентів в С++ Builder.
Таблиця 1.
Компоненти закладки Standard
палітри
компонентів.
Компонент |
Призначення |
Frames |
Використовується як проектований у
вигляді окремого вікна контейнер будь-яких компонентів. Володіє можливостями
наслідування, може включатися в депозитарій. |
MainMenu |
Використовується для створення
головного меню. |
PopupMenu |
Використовується для створення
спливаючого меню, яке з’являється після натиснення правої кнопки миш
користувачем. |
Label |
Відображення тексту, який не
змінюється користувачем |
Edit |
Відображення, введення
редагування однорядкових текстів. |
Memo |
Відображення, введення
редагування багаторядкових текстів. |
Button |
Використовується для створення
кнопок, якими користувач виконує команди в проекті. |
CheckBox |
Дозволяє користувачу вмикати
вимикати опції програми |
RadioButton |
Пропонують користувачу набір
альтернатив, з якого вибирається одна. Набір реалізується необхідною
кількістю радіокнопок, розміщених в одному контейнері (формі, панелі). |
ListBox |
Відображення стандартного вікна
списку Windows, що дозволяє користувачу вибирати з нього пункти. |
ComboBox |
Об’єднує функції ListBox і Edit |
ScrollBar |
Є стандартною лінійкою прокрутки
Windows і служить для управління положенням видимої частини форм або
компонентів. |
GroupBox |
Є контейнером, об'єднуючим групу
зв'язаних органів управління, таких, як радіокнопки RadioButton, контрольн
ндикатори CheckBox і т.д. |
RadioGroup |
Є комбінацією групового вікна
GroupBox з набором радіокнопок RadioButton; служить спеціально для створення
груп радіокнопок. |
Panel |
Компонент є контейнером для
групування органів управління, але може використовуватися і для відображення
тексту з можливостями об'ємного оформлення. |
Таблиця 2.
Основні компоненти закладок Additional, Win32, і System.
Компонент |
Призначення |
BitBtn |
Використовується для створення
кнопок, з можливістю розміщення на
них бітової графіки. |
MaskEdit |
Використовується для форматування
даних або для введення символів відповідно до шаблону. |
StringGrid |
Відображення текстової інформації в
таблиці з рядків і стовпців з можливістю переміщатися по рядках і стовпцях
здійснювати вибір. |
DrawGrid |
Використовується для відображення в
рядках і стовпцях нетекстових даних. |
Image |
Використовується для відображення
графіки |
ScrollBox |
Використовується для створення зон
відображення з прокруткою. |
Chart |
Компонент використовується для
створення діаграм і графіків. |
RichEdit |
Компонент є вікном редагування в
стилі Windows у форматі RTF, який дозволяє вибирати атрибути шрифту, пошук
тексту і багато іншого. |
UpDown |
Кнопка-лічильник, яка в поєднанні з
компонентами Edit і іншими дозволяє вводити цифрову інформацію. |
Timer |
Використовується для запуску
процедур, функцій і подій у вказані інтервали часу. |
PaintBox |
Використовується для створення на
формі деякої області, в якій можна малювати. |
MediaPlayer |
Використовується для створення
панелі управління відтворенням звукових файлів, а також пристроїв мультимедіа. |
Для відображення
різних написів на формі використовуються в основному компоненти Label,
StaticText, Panel. Перші два з цих компонентів – мітки, спеціально призначен
для відображення текстів. Основне призначення панелі Panel: компоновка компонентів
у вікні форми. Проте панель можна використовувати і для виводу текстів.
Тексти, як
відображаються в перерахованих компонентах, визначаються значенням їх
властивості Caption. Її можна встановлювати в процесі проектування або задавати
змінювати програмно під час виконання проекту. Наприклад:
Label1->Caption
= “Hello”;
Для мітки Label
колір і шрифт – єдині доступні елементи оформлення напису. Компоненти
StaticText і Panel мають окрім того властивість BorderStyle, що визначає рамку
тексту – бордюр. На рис. 7 ви можете побачити впливи бордюру на елементи
StaticText і Panel.

Рис. 7. Приклад застосування компонентів Label, StaticText і Panel.
На рис. 8 можна побачити приклади вікон
редагування Edit і MaskEdit. У даних елементах, текст, що вводиться
виводиться, міститься у властивості Text. Вікна редагування можна використовувати і як компоненти
відображення тексту. Для цього треба встановити в true їх властивість ReadOnly.

Рис. 8. Приклад застосування елементів Edit і MaskEdit.
На рис. 9 показані приклади кнопок Button
BitBtn. Простою і найчастіше використовуваною кнопкою є кнопка Button. Рідше
використовується кнопка BitBtn, яка відрізняється можливістю зобразити на
поверхні зображення. Більшість властивостей, методів і подій у цих кнопок
однакові. Основна властивість кнопки – Caption, за допомогою якої можна вивести
любий напис на кнопці.
Основна подія
будь-якої кнопки – OnClick, виникає при натисненні на ній. Саме в обробнику
цієї події записуються оператори, які повинні виконуватися при натисканн
користувача на кнопці.
Зображення на
кнопці BitBtn задається властивістю Glyph. Положення зображення по відношенню
до напису визначається властивістю Layout, яка може приймати значення:
blGlyphLeft – зліва, це значення прийняте за замовчуванням, BlGlyphRight
справа, blGlyphTop – вгорі, blGlyphBottom – внизу.

Рис. 9. Приклад застосування компонентів Button і BitBtn.
Радіокнопки утворюють групи
взаємозв'язаних індикаторів, з яких може бути вибраний тільки один. Приклади
розміщення радіокнопок ви можете побачити на рис. 10.
RadioGroup – це
панель, яка може містити регулярно розташовані стовпцями і рядками радіокнопки.
Напис у верху панелі визначається властивістю Caption. А написи кнопок і їх
кількість визначаються властивістю Items.
Визначити, яку з
кнопок вибрав користувач, можна по властивості ItemIndex, яка показує індекс
вибраної кнопки. За замовчуванням ItemIndex = -1, що означає відсутність
вибраної кнопки.

Рис. 10. Приклад
застосування компонентів RadioGroup, RadioButton,GroupBox и CheckBox
Панель GroupBox
виглядає на формі так само, як RadioGroup, і напис в її верхньому лівому кутку
так само визначається властивістю Caption. Ця панель сама по собі порожня. Ї
призначення – служити контейнером для інших управляючих елементів, зокрема, для
радіокнопок RadioButton.
Розглянемо
властивості радіокнопки RadioButton. Властивість Caption містить напис, що
з'являється біля кнопки. Властивість Checked визначає, вибрана дана кнопка
користувачем, чи ні. Якщо Checked рівне true, то кнопка вибрана, якщо false, то
ні.
Розміщення кнопок
RadioButton в панелі GroupBox, як можна бачити з рис. 10 дає велику свободу в
порівнянні з компонентом RadioGroup і дозволяє розмістити кнопки не регулярно.
Індикатори з
прапорцем CheckBox (рис. 10) використовуються в проектах в основному для того,
щоб користувач міг вмикати чи вимикати якісь опції. Основна властивість State
має два значення: cbChecked – компонент виділений, cbUnchecked – компонент не
виділений. Перевіряти стан індикатора можна не тільки із значення властивост
State, але і по значенню властивості Checked. Якщо Checked рівне true, то
ндикатор вибраний, якщо false, то ні.
В С++ Builder
два компоненти, за допомогою яких можна розробити меню: MainMenu – головне
меню, і PopupMenu – спливаюче меню.
Компонент
MainMenu – це невізуальний компонент. Основна властивість компоненту – Items.
Його заповнення відбувається за допомогою конструктора меню, що викликається
подвійним натисканням на компоненті MainMenu. В результаті відкриється вікно,
вид якого показаний на рис. 11. При роботі в конструкторі меню нові розділи
можна вводити, поміщаючи курсор в рамку, яка вказує місце розташування нового
розділу.

Рис. 11. Вид
вікна при створенні меню

Рис. 12. Приклад
застосування компоненту MainMenu
Компонент Timer
дозволяє задавати в проекті інтервали часу. Таймер – невізуальний компонент.
Він має дві властивості, які ним керують: Interval – інтервал часу в
мілісекундах і Enabled – доступність.
Якщо задати
Interval = 0 або Enabled = false, то таймер перестає працювати. Щоб запустити
відлік часу треба або задати Enabled = true, якщо встановлене позитивне
значення Interval, або задати позитивне значення Interval, якщо Enabled =
false.
Наприклад, якщо
потрібно, щоб через 5 секунд після запуску проекту закрилася форма – заставка,
що відображає логотип проекту, на ній треба розмістити таймер, задати в ньому інтервал
Interval = 5000, а в обробник події OnTimer вставити оператор Close, що
закриває вікно форми.
Робота
з графікою GDI
Часто виника
потреба прикрасити свій проект картинками. Це може бути графічна заставка, що
логотипом вашого проекту, можуть бути чиїсь фотографії, картинки, графіка.
Почнемо
знайомство з компоненту Image. Його властивість, яка може містити картинку
Picture. Вона дозволяє відкрити який-небудь графічний файл (кнопка Load), а
також зберегти відкритий файл під новим ім'ям або в новому каталозі. На рис. 13 зображене завантаження файлу.

Рис. 13. Вікно завантаження картинки компоненту Image.
Після
завантаження файлу натисніть на ОК, і у вашому компоненті Image відобразиться вибрана вами картинка.
Коли ви в процес
проектування завантажили картинку з файлу в компонент Image, він не просто
відображає її, але і зберігає в проекті. Це дає вам можливість поставляти ваш
проект без окремого графічного файлу.
Якщо встановити
властивість AutoSize в true, то розмір компоненту Image автоматично
підганятиметься під розмір компоненту. Якщо ж властивість AutoSize встановлена в false, то
зображення може не поміститися в компонент або, навпаки, площа компоненту може
виявитися набагато більша площі зображення.
Властивість
Stretch дозволяє підганяти не компонент під розмір малюнка, а малюнок під
розмір компоненту. Встановіть AutoSize в false, розтягніть або стисніть розмір
компоненту Image і встановіть Stretch в true. Ви побачите, що малюнок займе всю
площу компоненту, але оскільки навряд чи реально встановити розміри Image точно
пропорційними розміру малюнка, то зображення спотвориться. Встановлювати
Stretch в true може мати сенс тільки для якихось узорів, але не для картинок.
Властивість
Center, встановлене в true, центрує зображення на площі Image, якщо розмір
компоненту більше розміру малюнка. Ще одна властивість – Transparent
(прозорість). Якщо Transparent рівне true, то зображення Image стає прозорим.
Це можна використовувати для накладення зображень одне на одне.
Багато
компонентів в С++ Builder мають властивість Canvas, що є областю компоненту, на
якій можна малювати або відображати готові зображення. Цю властивість мають
форми, графічні компоненти Image, PaintBox, Bitmap і багато інших.
Практична
частина
Опис
програми
Середовищем
розробки був вибраний інструментарій C++ Builder 6. Програма складається з 3
основних модулів лістинг яких буде приведений нижче.
Програма
клавіатурний тренажер зроблена для того щоб поліпшити свої навики по набору
тексту на клавіатурі.
В опціях
користувач може вибрати собі режим тренування, а саме:
·
встановити
мову (англійську, українську чи російську);
·
рівень
складності (початківець чи професіонал);
·
час
тренування (встановлюється у секундах).
За замовчуванням
режим встановлено так: мова – англійська, рівень складності – початківець, час
тренування – 30 секунд.
Лістинг
програми
Лістинг 1. (Unit1.cpp)
#include
<vcl.h>
#pragma
hdrstop
#include
"Unit1.h"
#include
"Unit2.h"
#include
"Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma
resource "*.dfm"
int
rezhim=1,rivenj=1,chas=30,chas1=0,min=0,sec=0,NoCorect=0,Corect=0;
String
slitera,skey;
TTrainForm
*TrainForm;
//---------------------------------------------------------------------------
__fastcall
TTrainForm::TTrainForm(TComponent* Owner)
:
TForm(Owner)
{
}
//Нижче
представлена функція випадковим чином вибирає англійську літеру, яка буде
падати
String
EngWord(){
int rr; String
ll;
randomize;
rr=random(26);
switch(rr){
case 0: return
ll='q';
case 1: return
ll='w';
case 2: return
ll='e';
case 3: return
ll='r';
case 4: return
ll='t';
case 5: return
ll='y';
case 6: return
ll='u';
case 7: return
ll='i';
case 8: return
ll='o';
case 9: return
ll='p';
case 10:
return ll='a';
case 11:
return ll='s';
case 12:
return ll='d';
case 13:
return ll='f';
case 14:
return ll='g';
case 15:
return ll='h';
case 16:
return ll='j';
case 17:
return ll='k';
case 18:
return ll='l';
case 19:
return ll='z';
case 20:
return ll='x';
case 21:
return ll='c';
case 22:
return ll='v';
case 23:
return ll='b';
case 24:
return ll='n';
case 25:
return ll='m';
}
};
//Нижче представлена
функція випадковим чином вибирає українську літеру, яка буде падати
String
UkrWord(){
int rr; String
ll;
randomize;
rr=random(32);
switch(rr){
case 0: return
ll='й';
case 1: return
ll='ц';
case 2: return
ll='у';
case 3: return
ll='к';
case 4: return
ll='е';
case 5: return
ll='н';
case 6: return
ll='г';
case 7: return
ll='ш';
case 8: return
ll='щ';
case 9: return
ll='з';
case 10:
return ll='х';
case 11:
return ll='ї';
case 12:
return ll='ф';
case 13:
return ll='і';
case 14:
return ll='в';
case 15:
return ll='а';
case 16:
return ll='п';
case 17:
return ll='р';
case 18:
return ll='о';
case 19:
return ll='л';
case 20:
return ll='д';
case 21:
return ll='ж';
case 22:
return ll='є';
case 23:
return ll='я';
case 24:
return ll='ч';
case 25:
return ll='с';
case 26:
return ll='м';
case 27:
return ll='и';
case 28:
return ll='т';
case 29:
return ll='ь';
case 30: return
ll='б';
case 31:
return ll='ю';
}
};
//Нижче представлена
функція випадковим чином вибирає російську літеру, яка буде падати
String
RusWord(){
int rr; String
ll;
randomize;
rr=random(33);
switch(rr){
case 0: return
ll='й';
case 1: return
ll='ц';
case 2: return
ll='у';
case 3: return
ll='к';
case 4: return
ll='е';
case 5: return
ll='н';
case 6: return
ll='г';
case 7: return
ll='ш';
case 8: return
ll='щ';
case 9: return
ll='з';
case 10:
return ll='х';
case 11:
return ll='ъ';
case 12:
return ll='ф';
case 13:
return ll='ы';
case 14:
return ll='в';
case 15:
return ll='а';
case 16:
return ll='п';
case 17:
return ll='р';
case 18:
return ll='о';
case 19:
return ll='л';
case 20:
return ll='д';
case 21:
return ll='ж';
case 22:
return ll='э';
case 23:
return ll='я';
case 24:
return ll='ч';
case 25:
return ll='с';
case 26:
return ll='м';
case 27:
return ll='и';
case 28:
return ll='т';
case 29:
return ll='ь';
case 30:
return ll='б';
case 31:
return ll='ю';
case 32:
return ll='ё';
}
};
void __fastcall
TTrainForm::N5Click(TObject *Sender)
{
TrainForm->Close();
}
//---------------------------------------------------------------------------
void
__fastcall TTrainForm::N6Click(TObject *Sender)
{
Application->MessageBoxA("Програма
Клавіатурний Тренажер","Про Програму...",MB_OK);
}
//Під час запуску
програми будуть сховані всі компоненти--------------------
void
__fastcall TTrainForm::FormCreate(TObject *Sender)
{
Timer1->Enabled=false;
Timer2->Enabled=false;
Options->Hide();
TrainUkr->Hide();
TrainRus->Hide();
TrainEng->Hide();
PTimer->Hide();
}
//Зчитуємо
дані, які задав користувач на вкладці Опції----------------------
void
__fastcall TTrainForm::Button1Click(TObject *Sender)
{
if
(ukrainian->Checked==true)
rezhim=2; else
if
(russian->Checked==true)
rezhim=3; else
rezhim=1;
if
(prof->Checked==true)
rivenj=2; else
rivenj=1;
chas=StrToInt(time->Text);
Options->Hide();
}
//---------------------------------------------------------------------------
void
__fastcall TTrainForm::N7Click(TObject *Sender)
{
Application->MessageBoxA("Програму
розробив студент ІІ курсу Факультета інформатики Шанта А. П.","Про
Автора...",MB_OK);
}
//Після вибору
Файл->Тренажер виконується наступне----------------------------
void
__fastcall TTrainForm::N4Click(TObject *Sender)
{
TrainUkr->Hide();
TrainRus->Hide();
TrainEng->Hide();
Options->Hide();
Application->MessageBoxA("Натисніть
Enter, щоб розпочати тренування"," Увага!",MB_OK);
PTimer->Show();
sec=0; min=0; Timer1->Enabled=true;
Timer2->Enabled=true;
Pravilno->Caption=0;
Corect=0;
NePravilno->Caption=0;
NoCorect=0;
if (rezhim==1)
{
TrainUkr->Hide();
TrainRus->Hide();
Options->Hide();
LiteraEng->Top=8;
}
if
(rezhim==2){
LiteraUkr->Top=8;
TrainRus->Hide();
TrainEng->Hide();
Options->Hide();
}
if
(rezhim==3){ LiteraRus->Top=8;
TrainUkr->Hide();
TrainEng->Hide();
Options->Hide();
}
if (rivenj==1)
Timer2->Interval=11; else Timer2->Interval=4;
sec=0; min=0;
chas1=0;
//-----Нижче
оформлений процес падання української літери
//-----та підсвітка
падаючої літери на віртуальній клавіатурі
if (rezhim==2){
TrainUkr->Show();
LiteraUkr->Show();
int LeftRan;
Randomize;
LeftRan=random(623)+8;
LiteraUkr->Left=LeftRan;
slitera=UkrWord();
LiteraUkr->Caption=slitera;
if
(slitera=='й') q1->Font->Color=clRed; else q1->Font->Color=clBlack;
if
(slitera=='ц') w1->Font->Color=clRed; else w1->Font->Color=clBlack;
if
(slitera=='у') e1->Font->Color=clRed; else e1->Font->Color=clBlack;
if
(slitera=='к') r1->Font->Color=clRed; else r1->Font->Color=clBlack;
if
(slitera=='е') t1->Font->Color=clRed; else t1->Font->Color=clBlack;
if
(slitera=='н') y1->Font->Color=clRed; else y1->Font->Color=clBlack;
if
(slitera=='г') u1->Font->Color=clRed; else u1->Font->Color=clBlack;
if
(slitera=='ш') i1->Font->Color=clRed; else i1->Font->Color=clBlack;
if
(slitera=='щ') o1->Font->Color=clRed; else o1->Font->Color=clBlack;
if
(slitera=='з') p1->Font->Color=clRed; else p1->Font->Color=clBlack;
if
(slitera=='х') p11->Font->Color=clRed; else
p11->Font->Color=clBlack;
if (slitera=='ї')
p111->Font->Color=clRed; else p111->Font->Color=clBlack;
if
(slitera=='ф') a1->Font->Color=clRed; else a1->Font->Color=clBlack;
if
(slitera=='і') s1->Font->Color=clRed; else s1->Font->Color=clBlack;
if
(slitera=='в') d1->Font->Color=clRed; else d1->Font->Color=clBlack;
if
(slitera=='а') f1->Font->Color=clRed; else f1->Font->Color=clBlack;
if
(slitera=='п') g1->Font->Color=clRed; else g1->Font->Color=clBlack;
if
(slitera=='р') h1->Font->Color=clRed; else h1->Font->Color=clBlack;
if
(slitera=='о') j1->Font->Color=clRed; else j1->Font->Color=clBlack;
if
(slitera=='л') k1->Font->Color=clRed; else k1->Font->Color=clBlack;
if
(slitera=='д') l1->Font->Color=clRed; else l1->Font->Color=clBlack;
if
(slitera=='ж') l11->Font->Color=clRed; else
l11->Font->Color=clBlack;
if
(slitera=='є') l111->Font->Color=clRed; else
l111->Font->Color=clBlack;
if
(slitera=='я') z1->Font->Color=clRed; else z1->Font->Color=clBlack;
if
(slitera=='ч') x1->Font->Color=clRed; else x1->Font->Color=clBlack;
if
(slitera=='с') c1->Font->Color=clRed; else c1->Font->Color=clBlack;
if
(slitera=='м') v1->Font->Color=clRed; else v1->Font->Color=clBlack;
if
(slitera=='и') b1->Font->Color=clRed; else b1->Font->Color=clBlack;
if
(slitera=='т') n11->Font->Color=clRed; else
n11->Font->Color=clBlack;
if
(slitera=='ь') m1->Font->Color=clRed; else m1->Font->Color=clBlack;
if
(slitera=='б') m11->Font->Color=clRed; else
m11->Font->Color=clBlack;
if
(slitera=='ю') m111->Font->Color=clRed; else
m111->Font->Color=clBlack;
};
//-----Нижче оформлений
процес падання російської літери
//-----та підсвітка
падаючої літери на віртуальній клавіатурі
if
(rezhim==3){
TrainRus->Show();
LiteraRus->Show();
int LeftRan;
Randomize;
LeftRan=random(623)+8;
LiteraRus->Left=LeftRan;
slitera=RusWord();
LiteraRus->Caption=slitera;
if
(slitera=='й') q2->Font->Color=clRed; else q2->Font->Color=clBlack;
if
(slitera=='ц') w2->Font->Color=clRed; else w2->Font->Color=clBlack;
if
(slitera=='у') e2->Font->Color=clRed; else e2->Font->Color=clBlack;
if
(slitera=='к') r2->Font->Color=clRed; else r2->Font->Color=clBlack;
if
(slitera=='е') t2->Font->Color=clRed; else t2->Font->Color=clBlack;
if
(slitera=='н') y2->Font->Color=clRed; else y2->Font->Color=clBlack;
if
(slitera=='г') u2->Font->Color=clRed; else u2->Font->Color=clBlack;
if
(slitera=='ш') i2->Font->Color=clRed; else i2->Font->Color=clBlack;
if
(slitera=='щ') o2->Font->Color=clRed; else o2->Font->Color=clBlack;
if
(slitera=='з') p2->Font->Color=clRed; else p2->Font->Color=clBlack;
if (slitera=='х')
p22->Font->Color=clRed; else p22->Font->Color=clBlack;
if
(slitera=='ъ') p222->Font->Color=clRed; else
p222->Font->Color=clBlack;
if
(slitera=='ф') a2->Font->Color=clRed; else a2->Font->Color=clBlack;
if
(slitera=='ы') s2->Font->Color=clRed; else s2->Font->Color=clBlack;
if
(slitera=='в') d2->Font->Color=clRed; else d2->Font->Color=clBlack;
if
(slitera=='а') f2->Font->Color=clRed; else f2->Font->Color=clBlack;
if
(slitera=='п') g2->Font->Color=clRed; else g2->Font->Color=clBlack;
if
(slitera=='р') h2->Font->Color=clRed; else h2->Font->Color=clBlack;
if
(slitera=='о') j2->Font->Color=clRed; else j2->Font->Color=clBlack;
if
(slitera=='л') k2->Font->Color=clRed; else k2->Font->Color=clBlack;
if
(slitera=='д') l2->Font->Color=clRed; else l2->Font->Color=clBlack;
if
(slitera=='ж') l22->Font->Color=clRed; else
l22->Font->Color=clBlack;
if
(slitera=='э') l222->Font->Color=clRed; else
l222->Font->Color=clBlack;
if
(slitera=='я') z2->Font->Color=clRed; else z2->Font->Color=clBlack;
if
(slitera=='ч') x2->Font->Color=clRed; else x2->Font->Color=clBlack;
if
(slitera=='с') c2->Font->Color=clRed; else c2->Font->Color=clBlack;
if
(slitera=='м') v2->Font->Color=clRed; else v2->Font->Color=clBlack;
if
(slitera=='и') b2->Font->Color=clRed; else b2->Font->Color=clBlack;
if
(slitera=='т') n22->Font->Color=clRed; else
n22->Font->Color=clBlack;
if
(slitera=='ь') m2->Font->Color=clRed; else m2->Font->Color=clBlack;
if
(slitera=='б') m22->Font->Color=clRed; else
m22->Font->Color=clBlack;
if
(slitera=='ю') m222->Font->Color=clRed; else
m222->Font->Color=clBlack;
if
(slitera=='ё') ee->Font->Color=clRed; else ee->Font->Color=clBlack;
}
//-----Нижче оформлений
процес падання англійської літери
//-----та підсвітка
падаючої літери на віртуальній клавіатурі
if (rezhim==1) {
TrainEng->Show();
LiteraEng->Show();
int LeftRan;
Randomize;
LeftRan=random(623)+8;
LiteraEng->Left=LeftRan;
slitera=EngWord();
LiteraEng->Caption=slitera;
if
(slitera=='q') q->Font->Color=clRed; else q->Font->Color=clBlack;
if
(slitera=='w') w->Font->Color=clRed; else w->Font->Color=clBlack;
if
(slitera=='e') e->Font->Color=clRed; else e->Font->Color=clBlack;
if
(slitera=='r') r->Font->Color=clRed; else r->Font->Color=clBlack;
if
(slitera=='t') t->Font->Color=clRed; else t->Font->Color=clBlack;
if
(slitera=='y') y->Font->Color=clRed; else y->Font->Color=clBlack;
if
(slitera=='u') u->Font->Color=clRed; else u->Font->Color=clBlack;
if
(slitera=='i') i->Font->Color=clRed; else i->Font->Color=clBlack;
if
(slitera=='o') o->Font->Color=clRed; else o->Font->Color=clBlack;
if
(slitera=='p') p->Font->Color=clRed; else p->Font->Color=clBlack;
if
(slitera=='a') a->Font->Color=clRed; else a->Font->Color=clBlack;
if
(slitera=='s') s->Font->Color=clRed; else s->Font->Color=clBlack;
if
(slitera=='d') d->Font->Color=clRed; else d->Font->Color=clBlack;
if
(slitera=='f') f->Font->Color=clRed; else f->Font->Color=clBlack;
if
(slitera=='g') g->Font->Color=clRed; else g->Font->Color=clBlack;
if
(slitera=='h') h->Font->Color=clRed; else h->Font->Color=clBlack;
if (slitera=='j')
j->Font->Color=clRed; else j->Font->Color=clBlack;
if
(slitera=='k') k->Font->Color=clRed; else k->Font->Color=clBlack;
if
(slitera=='l') l->Font->Color=clRed; else l->Font->Color=clBlack;
if
(slitera=='z') z->Font->Color=clRed; else z->Font->Color=clBlack;
if
(slitera=='x') x->Font->Color=clRed; else x->Font->Color=clBlack;
if
(slitera=='c') c->Font->Color=clRed; else c->Font->Color=clBlack;
if
(slitera=='v') v->Font->Color=clRed; else v->Font->Color=clBlack;
if
(slitera=='b') b->Font->Color=clRed; else b->Font->Color=clBlack;
if
(slitera=='n') n->Font->Color=clRed; else n->Font->Color=clBlack;
if
(slitera=='m') m->Font->Color=clRed; else m->Font->Color=clBlack;
}
}
//Відкриваються
Опції клавіатурного тренажера------------------------------------------
void
__fastcall TTrainForm::N3Click(TObject *Sender)
{
Timer1->Enabled=false;
Timer2->Enabled=false;
PTimer->Hide();
TrainUkr->Hide();
TrainRus->Hide();
TrainEng->Hide();
Options->Show();
}
//Організація
виводу часу під час тренування--------------------------------
void
__fastcall TTrainForm::Timer1Timer(TObject *Sender)
{
if (sec==59){
min++; sec=-1;
}
sec++;
chas1++;
int nul=0;
if (sec<10)
timersec->Caption=IntToStr(nul)+IntToStr(sec); else
timersec->Caption=IntToStr(sec);
if (min<10)
timermin->Caption=IntToStr(nul)+IntToStr(min); else
timermin->Caption=IntToStr(min);
}
//Наступний код
обробляється під час падання літери-------------------------
void
__fastcall TTrainForm::Timer2Timer(TObject *Sender)
{
//-----Присвоюються
випадкові по горизонталі координати падаючой літери
//-----та перевірка того,
чи вчасно була натиснута відповідна літера
if
(rezhim==1){
LiteraEng->Top=(LiteraEng->Top)+1;
if
(LiteraEng->Top>225) {
if
(LiteraEng->Top!=255+1)
NoCorect++;
NePravilno->Caption=IntToStr(NoCorect);
if (rezhim==1)
slitera=EngWord();
LiteraEng->Top=8;
Randomize;
int lran;
lran=random(623)+8;
LiteraEng->Left=lran;
LiteraEng->Caption=slitera;
LiteraEng->Show(); }
}
if
(rezhim==2){
LiteraUkr->Top=(LiteraUkr->Top)+1;
if
(LiteraUkr->Top>225) {
if
(LiteraUkr->Top!=255+1)
NoCorect++;
NePravilno->Caption=IntToStr(NoCorect);
slitera=UkrWord();
LiteraUkr->Top=8;
Randomize;
int lran;
lran=random(623)+8;
LiteraUkr->Left=lran;
LiteraUkr->Caption=slitera;
LiteraUkr->Show(); }
}
if
(rezhim==3){
LiteraRus->Top=(LiteraRus->Top)+1;
if
(LiteraRus->Top>225) {
if
(LiteraRus->Top!=255+1)
NoCorect++;
NePravilno->Caption=IntToStr(NoCorect);
slitera=RusWord();
LiteraRus->Top=8;
Randomize;
int lran;
lran=random(623)+8;
LiteraRus->Left=lran;
LiteraRus->Caption=slitera;
LiteraRus->Show(); }
}
//-----Нижче оформлений
процес підсвітки падаючої літери на віртуальній клавіатурі
if (rezhim==1)
{
if
(slitera=='q') q->Font->Color=clRed; else q->Font->Color=clBlack;
if (slitera=='w')
w->Font->Color=clRed; else w->Font->Color=clBlack;
if
(slitera=='e') e->Font->Color=clRed; else e->Font->Color=clBlack;
if
(slitera=='r') r->Font->Color=clRed; else r->Font->Color=clBlack;
if
(slitera=='t') t->Font->Color=clRed; else t->Font->Color=clBlack;
if
(slitera=='y') y->Font->Color=clRed; else y->Font->Color=clBlack;
if
(slitera=='u') u->Font->Color=clRed; else u->Font->Color=clBlack;
if
(slitera=='i') i->Font->Color=clRed; else i->Font->Color=clBlack;
if
(slitera=='o') o->Font->Color=clRed; else o->Font->Color=clBlack;
if
(slitera=='p') p->Font->Color=clRed; else p->Font->Color=clBlack;
if
(slitera=='a') a->Font->Color=clRed; else a->Font->Color=clBlack;
if
(slitera=='s') s->Font->Color=clRed; else s->Font->Color=clBlack;
if
(slitera=='d') d->Font->Color=clRed; else d->Font->Color=clBlack;
if
(slitera=='f') f->Font->Color=clRed; else f->Font->Color=clBlack;
if
(slitera=='g') g->Font->Color=clRed; else g->Font->Color=clBlack;
if
(slitera=='h') h->Font->Color=clRed; else h->Font->Color=clBlack;
if
(slitera=='j') j->Font->Color=clRed; else j->Font->Color=clBlack;
if
(slitera=='k') k->Font->Color=clRed; else k->Font->Color=clBlack;
if
(slitera=='l') l->Font->Color=clRed; else l->Font->Color=clBlack;
if
(slitera=='z') z->Font->Color=clRed; else z->Font->Color=clBlack;
if
(slitera=='x') x->Font->Color=clRed; else x->Font->Color=clBlack;
if
(slitera=='c') c->Font->Color=clRed; else c->Font->Color=clBlack;
if
(slitera=='v') v->Font->Color=clRed; else v->Font->Color=clBlack;
if
(slitera=='b') b->Font->Color=clRed; else b->Font->Color=clBlack;
if
(slitera=='n') n->Font->Color=clRed; else n->Font->Color=clBlack;
if
(slitera=='m') m->Font->Color=clRed; else m->Font->Color=clBlack;
}
if (rezhim==2)
{
if
(slitera=='й') q1->Font->Color=clRed; else q1->Font->Color=clBlack;
if
(slitera=='ц') w1->Font->Color=clRed; else w1->Font->Color=clBlack;
if
(slitera=='у') e1->Font->Color=clRed; else e1->Font->Color=clBlack;
if
(slitera=='к') r1->Font->Color=clRed; else r1->Font->Color=clBlack;
if
(slitera=='е') t1->Font->Color=clRed; else t1->Font->Color=clBlack;
if
(slitera=='н') y1->Font->Color=clRed; else y1->Font->Color=clBlack;
if
(slitera=='г') u1->Font->Color=clRed; else u1->Font->Color=clBlack;
if
(slitera=='ш') i1->Font->Color=clRed; else i1->Font->Color=clBlack;
if (slitera=='щ')
o1->Font->Color=clRed; else o1->Font->Color=clBlack;
if
(slitera=='з') p1->Font->Color=clRed; else p1->Font->Color=clBlack;
if
(slitera=='х') p11->Font->Color=clRed; else
p11->Font->Color=clBlack;
if
(slitera=='ї') p111->Font->Color=clRed; else
p111->Font->Color=clBlack;
if
(slitera=='ф') a1->Font->Color=clRed; else a1->Font->Color=clBlack;
if
(slitera=='і') s1->Font->Color=clRed; else s1->Font->Color=clBlack;
if
(slitera=='в') d1->Font->Color=clRed; else d1->Font->Color=clBlack;
if
(slitera=='а') f1->Font->Color=clRed; else f1->Font->Color=clBlack;
if
(slitera=='п') g1->Font->Color=clRed; else g1->Font->Color=clBlack;
if
(slitera=='р') h1->Font->Color=clRed; else h1->Font->Color=clBlack;
if
(slitera=='о') j1->Font->Color=clRed; else j1->Font->Color=clBlack;
if
(slitera=='л') k1->Font->Color=clRed; else k1->Font->Color=clBlack;
if
(slitera=='д') l1->Font->Color=clRed; else l1->Font->Color=clBlack;
if
(slitera=='ж') l11->Font->Color=clRed; else
l11->Font->Color=clBlack;
if (slitera=='є')
l111->Font->Color=clRed; else l111->Font->Color=clBlack;
if
(slitera=='я') z1->Font->Color=clRed; else z1->Font->Color=clBlack;
if
(slitera=='ч') x1->Font->Color=clRed; else x1->Font->Color=clBlack;
if
(slitera=='с') c1->Font->Color=clRed; else c1->Font->Color=clBlack;
if
(slitera=='м') v1->Font->Color=clRed; else v1->Font->Color=clBlack;
if
(slitera=='и') b1->Font->Color=clRed; else b1->Font->Color=clBlack;
if
(slitera=='т') n11->Font->Color=clRed; else
n11->Font->Color=clBlack;
if
(slitera=='ь') m1->Font->Color=clRed; else m1->Font->Color=clBlack;
if
(slitera=='б') m11->Font->Color=clRed; else
m11->Font->Color=clBlack;
if
(slitera=='ю') m111->Font->Color=clRed; else
m111->Font->Color=clBlack;
}
if (rezhim==3)
{
if
(slitera=='й') q2->Font->Color=clRed; else q2->Font->Color=clBlack;
if
(slitera=='ц') w2->Font->Color=clRed; else w2->Font->Color=clBlack;
if
(slitera=='у') e2->Font->Color=clRed; else e2->Font->Color=clBlack;
if
(slitera=='к') r2->Font->Color=clRed; else r2->Font->Color=clBlack;
if (slitera=='е')
t2->Font->Color=clRed; else t2->Font->Color=clBlack;
if
(slitera=='н') y2->Font->Color=clRed; else y2->Font->Color=clBlack;
if
(slitera=='г') u2->Font->Color=clRed; else u2->Font->Color=clBlack;
if
(slitera=='ш') i2->Font->Color=clRed; else i2->Font->Color=clBlack;
if
(slitera=='щ') o2->Font->Color=clRed; else o2->Font->Color=clBlack;
if
(slitera=='з') p2->Font->Color=clRed; else p2->Font->Color=clBlack;
if
(slitera=='х') p22->Font->Color=clRed; else
p22->Font->Color=clBlack;
if
(slitera=='ъ') p222->Font->Color=clRed; else
p222->Font->Color=clBlack;
if
(slitera=='ф') a2->Font->Color=clRed; else a2->Font->Color=clBlack;
if
(slitera=='ы') s2->Font->Color=clRed; else s2->Font->Color=clBlack;
if
(slitera=='в') d2->Font->Color=clRed; else d2->Font->Color=clBlack;
if
(slitera=='а') f2->Font->Color=clRed; else f2->Font->Color=clBlack;
if
(slitera=='п') g2->Font->Color=clRed; else g2->Font->Color=clBlack;
if
(slitera=='р') h2->Font->Color=clRed; else h2->Font->Color=clBlack;
if
(slitera=='о') j2->Font->Color=clRed; else j2->Font->Color=clBlack;
if
(slitera=='л') k2->Font->Color=clRed; else k2->Font->Color=clBlack;
if
(slitera=='д') l2->Font->Color=clRed; else l2->Font->Color=clBlack;
if
(slitera=='ж') l22->Font->Color=clRed; else l22->Font->Color=clBlack;
if
(slitera=='э') l222->Font->Color=clRed; else
l222->Font->Color=clBlack;
if
(slitera=='я') z2->Font->Color=clRed; else z2->Font->Color=clBlack;
if
(slitera=='ч') x2->Font->Color=clRed; else x2->Font->Color=clBlack;
if
(slitera=='с') c2->Font->Color=clRed; else c2->Font->Color=clBlack;
if
(slitera=='м') v2->Font->Color=clRed; else v2->Font->Color=clBlack;
if
(slitera=='и') b2->Font->Color=clRed; else b2->Font->Color=clBlack;
if
(slitera=='т') n22->Font->Color=clRed; else
n22->Font->Color=clBlack;
if (slitera=='ь')
m2->Font->Color=clRed; else m2->Font->Color=clBlack;
if
(slitera=='б') m22->Font->Color=clRed; else
m22->Font->Color=clBlack;
if
(slitera=='ю') m222->Font->Color=clRed; else
m222->Font->Color=clBlack;
if
(slitera=='ё') ee->Font->Color=clRed; else ee->Font->Color=clBlack;
}
//-----Перевірка часу, та
припинення тренування у випадку якщо час закінчився
if
((chas1==chas)&&(chas!=0)){
Timer2->Enabled=false;
Timer1->Enabled=false;
if (rezhim==1)
LiteraEng->Hide();
if (rezhim==2)
LiteraUkr->Hide();
if (rezhim==3)
LiteraRus->Hide();
Form2->Show();
Form2->NePravilno->Caption=IntToStr(NoCorect);
Form2->Pravilno->Caption=IntToStr(Corect);
Form2->All->Caption=IntToStr(Corect+NoCorect);
if
(NoCorect!=0){
float kk;
kk=(float)Corect/(float)NoCorect;
Form2->Koef->Caption=FloatToStr(kk);
}
else
Form2->Koef->Caption=IntToStr(Corect);
}
}
//Нижче представлений код
виконується тоді коли під час тренування
//натискається будь-яка
клавіша. Виконується перевірка правильності натиснутої кнопки
void
__fastcall TTrainForm::FormKeyPress(TObject *Sender, char &Key)
{
skey=Key;
if
(skey==slitera){
if
(rezhim==1) slitera=EngWord();
if
(rezhim==2) slitera=UkrWord();
if
(rezhim==3) slitera=RusWord();
Corect++;
if
(rezhim==1){
LiteraEng->Hide();
LiteraEng->Top=255;
}
if
(rezhim==2){
LiteraUkr->Hide();
LiteraUkr->Top=255;
}
if
(rezhim==3){
LiteraRus->Hide();
LiteraRus->Top=255;
}
Pravilno->Caption=IntToStr(Corect);
} else {
NoCorect++; NePravilno->Caption=IntToStr(NoCorect);
}
}
//Відкривається нове
вікно з підсказками по роботі з клавіатурою-------------
void
__fastcall TTrainForm::N8Click(TObject *Sender)
{
TrainForm->Hide();
Form3->Show();
}
Лістинг 2. (Unit2.cpp)
#include
<vcl.h>
#pragma
hdrstop
#include
"Unit1.h"
#include
"Unit2.h"
//---------------------------------------------------------------------------
#pragma
package(smart_init)
#pragma
resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall
TForm2::TForm2(TComponent* Owner)
:
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void
__fastcall TForm2::OKClick(TObject *Sender)
{
TrainForm->Pravilno->Caption=0;
TrainForm->NePravilno->Caption=0;
Form2->Close();
}
Лістинг 3. (Unit3.cpp)
#include
<vcl.h>
#pragma
hdrstop
#include
"Unit1.h"
#include
"Unit3.h"
#pragma
package(smart_init)
#pragma
resource "*.dfm"
TForm3 *Form3;
fastcall
TForm3::TForm3(TComponent* Owner)
:
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void
__fastcall TForm3::Button1Click(TObject *Sender)
{
Form3->Hide();
TrainForm->Show();
}
//---------------------------------------------------------------------------
void __fastcall
TForm3::FormClose(TObject *Sender, TCloseAction &Action)
{
TrainForm->Show();
}
Результат роботи
програми.

1. Початковий стан
2. Після вибору Файл->Опції

3. Після вибору
Файл->Тренажер


4. Після вибору Інформація->Підказки по роботі з клавіатурою


5. Після
закінчення вибраного часу
Висновки
В нашій робот
були проаналізовані питання відносно теоретичної основи побудови програм з
простим інтерфейсом користувача в середовищі Borland C++ Builder а також
проблеми, які виникають при цьому. Результатом цього є програма яка реалізу
процес тренування на клавіатурі.
Дана програма має досить простий інтерфейс та алгоритмічну структуру, завдяки
чому вона зрозуміла кожному користувачу.
Використана
література
1.
А.Я.Архангельский.
Программирование в С++ Builder 6. – M.: ЗАО “Издательство Бином”, 2003. – 1152
с.
2.
А.Я.Архангельский.
Решение типовых задач в С++ Builder 6. – M.: ЗАО “Издательство Бином”, 2003.
520 с.
3.
А.Я.Архангельский.
Язык SQL в С++ Builder 5. – M.: ЗАО “Издательство Бином”, 2000. – 224 с.
4.
Ф.А.Фридман.
Основы объектно-ориентированного программирования на языке С++. – М.: “Горячая линия”, 2001. – 232с.
5.
В.Шамис. Borland C++ Builder
6. – Санкт-Петербург: “Питер”, 2003. – 800с.
6.
Холингвэрт,
Сворт, Кэшмэн, Густавсон. Borland C++ Builder 6. Руководство разработчика. – М.: “Вильямс”, 2003, 976 с.
7.
А.Хоменко.
Работа с базами данных в
С++ Builder 6. – M.: “BHV-СПб”,
2005. – 400 с.
|