Смекни!
smekni.com

Побудова клавіатурного тренажера (стр. 2 из 4)

Рис. 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='ц';