четвер, 26 січня 2017 р.

Lazarus. Урок 10. Edit1, змінна та Шифрувальник тексту

Привіт! Сьогодні у нас на черзі ще один об’єкт (компонент), який дозволить нам передавати нашій програмі дані введені з клавіатури. Мова йде про текстове поле або Edit.
Це також текстове поле
Його можна використовувати для того, щоб передавати програмі якісь дані. Які саме? Кожного дня Ви користуєтесь різноманітними сайтами і кожного дня Вам доводиться вводити логін і пароль, вказувати своє ім’я, вік, зріст,  друкувати текст повідомлення товаришу. Всі ці дії Ви виконуєте за допомогою текстового поля. Тому сьогодні ми навчимося використовувати цей компонент за для власних цілей. Ми навчимося "кодувати" текст.


Компонент Edit

Основна властивість - Text. Саме її значення відображається у текстовому полі. Використовуючи цю властивість ми можемо програмно ввести текст у поле, або взяти текст з поля.
Label1.Caption:=Edit1.Text; - Після виконання цієї команди, напис (Label1) відображатиме той же текст, що міститиметься у текстовому полі Edit1. 
Edit1.Text:=Label1.Caption; - Не важко здогадатися, що після виконання цієї команди - у текстовому полі Edit1 з’явиться текст той, що й у написі Label1.

Отже ми можемо програмно ввести текст в текстове поле так і отримати з нього якийсь текст. І до речі варто відзначити, що саме отримання тексту, введеного користувачем,  для подальшої обробки, більш корисна процедура ніж програмний запис тексту у текстове поле.
Приклад того, як отримати текст з текстового поля Ви вже побачили, але повторити не завадить: 
Label1.Caption:=Edit1.Text;
В даному прикладі Label1 присвоїв собі текст з текстового поля Edit1.  Таке присвоєння можна робити з будь-яким компонентом, властивість якого може містити текстове значення.
Пригадайте ще раз. Скільки компонентів мають властивість Caption? Отже всі вони - можуть присвоїти собі текст з текстового поля.

Основні події

OnChange - подія, яка виникає тоді, коли текст, що знаходиться всередині текстового поля змінився. Ця подія корисна коли потрібно перевірити вміст текстового поля.
OnKeyPress - подія, яка виникає тоді, коли була натиснена будь-яка алфавітно-цифрова клавіша, ENTER, ESC, BackSpace на клавіатурі. Ця подія не тільки реагує на те, що була натиснена якась клавіша, а й дозволяє визначити, що саме це була за клавіша. 
Розглянемо це детально. 
Додайте на форму текстове поле. 
Змініть властивість Text так, щоб у текстовому полі не було тексту.
Створіть обробник події OnKeyPress.
У вікні редактора тексту Ви побачите наступний код:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin

end;
Зверніть увагу, що після назви події, в дужках записано деякий текст. Частину цього тексту я виділив синім кольором: var Key: Char.
Синтаксис процедури обробника події KeyPress створив для себе, а значить і для нас ЗМІННУ, яку назвав Key. Що ж це за ЗМІННА?

Змінна величина

Змінна — математична величина, значення якої може змінюватись у межах певної задачі. Цим змінна відрізняється від константи.
В математиці дуже часто використовують це поняття. Пригадайте P=2(a+b) - формула периметру прямокутника. У цій формулі ми маємо аж три змінні величини. Кожна з них може набувати якогось значення. Причому змінна Р залежить від значень змінних a та b.

Що розуміється під поняттям змінної у програмуванні?

У програмуванні під змінною розуміється деяка частина оперативної пам’яті комп’ютера. Іншими словами можна сказати, що це деяка комірка пам’яті у яку можна покласти якесь значення або якщо воно вже там є, то використати при потребі. 
Отже якщо програміст вирішив, що для його задачі потрібна змінна (комірка пам’яті) де він буде зберігати якесь значення він повинен її "створити". 
Створити змінну, означає:
  1. Придумати для неї назву;
  2. Вказати тип даних які будуть зберігатися у цій змінній. (Зазвичай це або текст чи символ або число);

У нашому випадку таку змінну створив сам Lazarus надавши їй назву Key та вказавши, що в цій змінній (комірці пам’яті) може зберігатися якийсь один довільний символ. Про це свідчить слово Char 
Ім’я змінної і тип даних розділяться між собою двокрапкою Key: Char;
Опис змінних у програмі починається зі слова var.
Слово var може зустрічатися у програмі декілька разів.
Перший раз у проекті воно зустрічається перед словом implementation.



При створенні проекту там уже існує одна змінна Form1.
Після цього слова програміст може дописати власні змінні, надавши їм ім’я та вказавши тип даних. 
На малюнку вище я описав ще три змінні, що мають імена a, b, sum розділені комою, а через двокрапку вказано тип даних int64. В даному випадку  - це означає, що усі три змінні (комірки пам’яті) можуть зберігати в собі цілі числа.
Зазвичай у змінних (комірках пам’яті) зберігають текст або числа. 
А ще слово var вживається у процедурах обробниках подій як це було показано вище. Це означатиме, що ті змінні, які описані в самій процедурі будуть доступні лише всередині самої процедури обробника. Називають їх локальними змінними.
Ті ж змінні, що описані перед implementation можна буде використовувати у будь-якій процедурі і такі змінні називають глобальними.

А тепер давайте повернемось до нашої процедури обробника події 

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin

end;

Код всередині неї буде оброблятися коли натиснена будь-яка алфавітно-цифрова клавіша, ENTER, ESC, BackSpace на клавіатурі. Перевірити це можна додавши всередину процедури наступний код showmessage('Edit1KeyPress');

Але ж для чого тоді змінна Key? Виявляється вона містить в собі символ який відповідає натиснутій клавіші. Змініть код на showmessage(Key); і запустіть проект.

Важливо! OnKeyPress працює лише з латиницею! Якщо Ви хочете використовувати це у своїх проектах для кирилиці то використовуйте подію OnUTF8KeyPress

procedure TForm1.Edit1UTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
begin
    showmessage(UTF8Key);

end;

У ній змінна, що містить символ клавіші має назву UTF8Key і має тип даних TUTF8Char.

Завдання

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