- •Лабораторна робота №11. Використання рядків
- •7.1. Загальні теоретичні відомості Рядки як одновимірні масиви символів
- •7.2. Створення віконного застосування
- •Компонент ListBox
- •Компонент ComboBox
- •Компонент-кнопка BitBtn
- •Обробка подій
- •7.3. Приклад виконання завдання
- •7.3.1. Створення віконного застосування
- •7.3.2. Створення консольного застосування
- •7.4. Індивідуальні завдання
Компонент-кнопка BitBtn
Компонент BitBtn розташований на сторінці Additonal і є різновидом стандартної кнопки Button. Її відмінність - наявність зображення на поверхні, визначувана властивістю Glyph. Крім того, властивість Kind задає один з 11 стандартних різновидів кнопок, натиснення будь-якої з них, окрім bkCustom і bkHelp, закриває вікно і повертає в програму результат mr*** (наприклад, bkOk - mrOk). Кнопка bkClose закриває головне вікно і завершує роботу програми.
Обробка подій
Про усі події, що відбуваються в системі, такі, як створення форми, натиснення кнопки миші або клавіатури і так далі, ядро Windows інформує вікна шляхом посилки відповідних повідомлень. Середовище Builder дозволяє приймати і обробляти більшість таких повідомлень. Кожна компонента містить обробники повідомлень на сторінці Events інспектора об'єктів.
Для створення обробника події необхідно виділити потрібну компоненту, далі на сторінці Events вибрати обробник і подвійним клацанням кнопкою миші у білому (порожньому) віконці в текст програми буде вставлена відповідна функція. Наприклад, виділивши компоненту Form1 і вибравши обробник OnActivate, буде вставлена функція .FormActivate(.){ }.
Кожна компонента має свій набір обробників подій, проте деякі з них властиві більшості компонент. Розглянемо найбільш часто вживані події:
OnActivate - форма отримує цю подію при активації;
OnCreate - виникає при створенні форми (Form), в обробнику події задаються дії, які повинні відбуватися у момент створення форми;
OnKeyPress - виникає при натисненні клавіші клавіатури, параметр Key типу WORD містить ASCII -код натиснутої клавіші (Enter має код 13, Esc - 27) і зазвичай використовується, коли потрібна реакція на натиснення однієї з клавіш;
OnKeyDown - виникає при натисненні клавіші клавіатури, обробник цієї події отримує інформацію про натиснуту клавішу і стан клавіш Shift, Alt і Ctlr, а також про натиснуту кнопку миші;
OnKeyUp - є парною подією для OnKeyDown і виникає при відпуску раніше натиснутої клавіші;
OnClick - виникає при натисненні кнопки миші в області компоненти, а OnDblClick - при подвійному клацанні кнопкою миші в області компоненти.
7.3. Приклад виконання завдання
Написати програму підрахунку числа слів в рядку, що містить пропуски.
7.3.1. Створення віконного застосування
Для введення рядків і роботи з ними використовувати компоненту ComboBox. Введення рядка закінчувати натисненням клавіші Enter, для виходу використовувати кнопку «Close». Панель діалогу з результатами програми може мати вигляд, представлений на мал. 7.1.
У тексті програми приведемо тільки функції-обробники:
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
Form1 ->ComboBox1 ->SetFocus(); // Передача фокусу ComboBox1
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
if (Key == 13) {
ComboBox1 ->Items ->Add(ComboBox1 ->Text);
// Рядок з вікна редагування заноситься в ComboBox1
ComboBox1 ->Text=""; // Очищення вікна
}
}
//------------ Обробка натиснення кнопки миші --------------------
void __fastcall TForm1::ComboBox1Click(TObject *Sender)
{
int n, i, nst;
nst = ComboBox1 ->ItemIndex; // Визначення номера рядка
String st = ComboBox1 ->Items ->Strings[nst]; // Запис вибраного рядка st
if (st[1] != ' ') n = 1; // Тут і нижче ' ' - пропуск
else n = 0;
for(i=1; i<st.Length(); i++) // Перегляд символів рядка st
if(st[i] == ' ' && st[i+1] != ' ') n++;
Edit1 ->Text = IntToStr(n); // Виведення числа слів в Edit1
}
Мал. 7.1