Основи програмування в середовищі lazarus

Глава 6 Програмування додатків з графічним інтерфейсом

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

також в покроковому режимі.

 Покрокове виконання в обхід. При кожному натисканні клавіші F8 також будуть виконані всі оператори поточного рядка. Якщо в коді зустрічається ви-

поклик процедури або функції, то будуть виконані всі оператори тіла процеду-

ри (функції) без входу, тобто "Відразу" і покажчик буде встановлений на следую-

щей після виклику підпрограми рядку.

 Вікно спостережень. Мабуть, найголовніший і корисний інструмент від-

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

ще відкрити комбінацією клавіш . Вид вікна спостережень поки-

зан на малюнку 6.36. Щоб додати нову змінну клацніть правою кла-

вишів у вікні спостережень, в діалоговому вікні введіть ім'я пере-

тимчасової або вираз, рис. 6.37. Можна призначити постійне местоположе-

Основи програмування в середовищі lazarus

6.3 Візуальне програмування в середовищі Lazarus

Мал. 6.35. Покрокове виконання програми

Мал. 6.36. Вікно списку спостережень

Мал. 6.37. Вікно додавання нової змінної в список спостереження

Прийнято вважати, що налагодження передує тестування. Тобто про-

грамміст, розробляючи програму, спочатку налагоджує її (виявляє і

"Вбиває" всіх "жучків"), потім приступає до тестування. Але, взагалі гово-

Глава 6 Програмування додатків з графічним інтерфейсом

ря, тестування і налагодження взаємопов'язані процеси. Найчастіше при тестіро-

вання виявляються помилки, які виправляються ... налагодженням, і навпаки,

під час налагодження виявляються багато алгоритмічні помилки. Тому це словосполучення практично завжди вживають разом - тестування і налагодження.

В принципі, тестування починається тоді, коли ваше додаток стала цілком працездатною, тобто перестала "вилітати", "зависати", "заціклі-

тися "і так далі і стала видавати результати. Правильні це результати виявляються тестуванням. Але, крім правильності отриманих результатів,

під час тестування дуже важливо перевіряти "неприпустимі", "неможливі"

і навіть "дурні" дії користувача. Якщо він не повинен вводити число 0, ви обов'язково повинні перевірити, як поведе себе ваша програма при введенні саме цього самого нуля і т.д. У розглянутих нами прикладах ми, по суще-

ству, цим і займалися!

6.3.10 Компоненти відображення і вибору даних

Ця група компонентів дозволяє в наочному вигляді відображати інформа-

цію, а також легко здійснювати вибір потрібних даних. Інформація в цих компонентах міститься у вигляді списку (набору) рядків. Для роботи зі списками рядків розроблений спеціальний клас TStrings. Цей клас є абстрактне

вим і інкапсулює методи для роботи з наборами рядків. Від цього класу на-

Слід спеціалізовані класи в компонентах відображення і вибору даних, які забезпечують доступ і обробку набору рядків в соответст-

вії з функціональністю компонента. Оскільки методи додавання і удале-

ня рядків в класі TStrings не реалізовані і оголошені як абстрактні,

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

6.3 Візуальне програмування в середовищі Lazarus

використовувати компонент TMemo.

6.3.10.1. компонент TMemo

"Блокнот", тобто доступні всі стандартні функції редагування (виділення,

Інформація в TMemo міститься у вигляді сукупності (масиву) рядків типу TStrings. Кожен елемент масиву містить рівно один рядок. дос

тупий до окремому рядку здійснюється за допомогою властивості Lines по її но-

міру (індексу). Індекс вказується, як і належить для масивів, в квадрат-

них дужках. Нумерація рядків починається з нуля. Загальна кількість рядків з-

тримається в властивості Lines.Count.

Якщо рядок не вміщується цілком у вікні, то можна встановити властивість

WordWrap = true і тоді не уміщається частина рядка буде автоматично перенесена на наступний рядок.

Можна також встановити смуги прокрутки властивістю ScrollBars.

Можливі значення властивості:

ssNone - встановлено за замовчуванням, смуги прокрутки відсутні.

ssVertical - встановити вертикальну смугу прокрутки.

ssHorizontal - встановити горизонтальну смугу прокрутки.

ssBoth - встановити і вертикальну і горизонтальну смуги.

ssAutoVertical - вертикальна смуга в вікні компонента видно, але не доступна, поки вікно не заповниться по вертикалі.

ssHorizontal - горизонтальна смуга в вікні компонента видно, але не доступна, поки вікно не заповниться по горизонталі.

ssAutoBoth - об'єднує два попередніх значення.

Заборонити користувачеві редагування можна, встановивши властивість

Глава 6 Програмування додатків з графічним інтерфейсом

Додавання нового рядка при введенні даних з клавіатури здійснюється натисканням клавіші Enter. при цьому властивість WantReturns має бути ус-

тановлено рівним true. Якщо WantReturns = false. то для переходу на новий рядок необхідно натиснути Ctrl + Enter.

Властивість SelStart вказує початок виділеного тексту, а SelLength

- довжину виділеного тексту (кількість символів).

У властивості Text весь набір рядків представляється у вигляді одного рядка з роздільниками повернення каретки і перенесення рядка (# 13 # 10) між рядками.

Подивимося, як програмно заповнювати поле введення компонента. щоб до-

бавить рядок в TMemo необхідно скористатися методами:

function Add (const S: string): integer; - додає рядок S

в кінець набору рядків TMemo і повертає її індекс.

procedure Append (const S: string); - просто додає рядок S

в кінець набору рядків.

Щоб додати цілий набір рядків, наприклад, з іншого компонента

TMemo. можна застосувати методи:

procedure AddStrings (TheStrings: Tstrings); - де TheStrings набір рядків типу TStrings. додає цей набір рядків до сущест-

procedure Assign (Source: TPersistent); - повністю очищає вміст TMemo і завантажує новий набір рядків з Source.

Для вставки рядка в довільне місце списку рядків існує метод

procedure Insert (Index: integer; const S: string); -

де Index номер (індекс) рядки куди вставляється рядок S. При цьому стара рядок не зникає, а зсувається вниз разом з усіма нижележащими рядками

(Їх індекси автоматично збільшуються на одиницю).

Замінити вміст якого-небудь рядка можна простим оператором присвоювання, наприклад, щоб замінити вміст рядка з індексом до дос-

Основи програмування в середовищі lazarus

6.3 Візуальне програмування в середовищі Lazarus

таточно записати оператор:

Memo1.Lines [k]: = 'Вміст замінної рядки';

Додавати рядки оператором присвоювання теж можна, але за однієї ус-

ловіі, не можна застосовувати цей спосіб під час створення форми, тобто в обработ-

Чіке OnCreate форми.

І, нарешті, щоб видалити рядок застосовується метод

Давайте застосуємо отримані знання на простому прикладі. створіть но

вий проект. Покладіть на форму два компоненти TMemo. два написи і кнопку приблизно так, як показано на малюнку 6.38.

Мал. 6.38. Форма з компонентами TMemo

В обробник OnCreate форми введіть код:

procedure TForm1.FormCreate (Sender: TObject);

Memo1.Lines.Append ( 'Це довга рядок,' + // метод Append

«Не вміщується у вікні Memo1 ');

Memo1.Lines.Add ( "А це короткий рядок '); // метод Add

Memo2.Clear; // очищення набору рядків Memo2

for i: = 0 to Memo1.Lines.Count - 1 do // додавання рядків

Memo2.Lines.Append (Memo1.Lines [i]); // в циклі

//Memo2.Lines.Add(Memo1.Lines[i]);// можна застосувати Add

Memo2.Lines.AddStrings (Memo1.Lines); // 1-й спосіб

Memo2.Lines.Assign (Memo1.Lines); // 2-й, з очищенням

Експериментуйте з введенням тексту при різних значеннях властивостей

WordWrap. WantReturns. ReadOnly і ScrollBars.

Для установки параметрів шрифту є властивість Font. У ньому є такі подсвойства, як Name - назва шрифту, Size - розмір, Color -

колір, Style - стиль накреслення шрифту та інші.

Властивість Aligment - служить для вирівнювання тексту в вікні TMemo.

Воно має значення:

taLeftJustify - вирівнювання по лівому краю. taCenter - вирівнювання по центру. taRightJustify - вирівнювання по правому краю.

Основи програмування в середовищі lazarus

6.3 Візуальне програмування в середовищі Lazarus

Властивість Font також є в програмі. Для попереднього прикладу додайте на форму ще одну кнопку, як показано на рис. 6.39.

Напишіть для цієї кнопки наступний оброблювач:

procedure TForm1.Button2Click (Sender: TObject);

Мал. 6.39. форма додатка

Після запуску програми і натискання на кнопку "Змінити шрифт" текст в

Memo2 змінить свій розмір і колір.

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

бору властивостей шрифту TFontDialog. Він розташований на сторінці Dialogs

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

Основи програмування в середовищі lazarus

Глава 6 Програмування додатків з графічним інтерфейсом

зувати при зверненні до цього компоненту. Тому його можна роз-

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

будинок компонента Execute. Це функція, яка повертає true. якщо в ре-

док діалогу користувач насправді вибрав якісь параметри шрифту. Обрані параметри запам'ятовуються у властивостях компонента TFontDialog. Якщо ж користувач нічого не вибрав і натиснув на кнопку Скасування

або клавішу Esc. то функція повертає false.

Таким чином, для виклику діалогу необхідно записати:

if FontDialog1.Execute then

Створіть новий додаток. Перенесіть на форму компонент TMemo,

TFontDialog. дві кнопки і два написи, як показано на рис. 6.40.

Мал. 6.40. Форма додатка з додатковим компонентом TFontDialog

В обробник кнопки "Змінити шрифт" введіть код:

procedure TForm1.Button1Click (Sender: TObject);

if FontDialog1.Execute then

Схожі статті