Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л5.doc
Скачиваний:
13
Добавлен:
30.10.2018
Размер:
208.38 Кб
Скачать

3. Поля (вікна) редагування Edit, LabeledEdit і MaskEdit

Зовнішнє оформлення полів редагування визначається властивістю BorderStyle а текст, що вводиться і виводиться, міститься у властивості Text типу AnsiString. Цю властивість можна встановлювати в процесі проектування або задавати програмно. Вирівнювання тексту, як це мало місце в мітках і панелях, неможливе. Перенесення рядків теж неможливе. Текст, що не поміщається по довжині у вікно, просто зсовується і користувач може переміщатися по ньому за допомогою курсору. Властивість AutoSize у вікнах редагування має смисл, відмінний від смислу аналогічної властивості міток: автоматично підстроюється під розмір тексту тільки висота, але не ширина вікна.

Вікна редагування забезпечені багатьма функціями, властивими більшості редакторів. Наприклад, в них передбачені типові комбінації «гарячих» клавіш: Ctrl-C — копіювання виділеного тексту в буфер обміну Clipboard (команда Copy), Ctrl-X — вирізування виділеного тексту в буфер Clipboard (команда Cut), Ctrl-V — вставка тексту з буфера Clipboard в позицію курсору (команда Paste), Grl-Z — відміна останньої команди редагування.

Властивість AutoSelect визначає, чи автоматично виділятиметься весь текст при передачі фокусу у вікно редагування. Його має сенс задавати рівним true у випадках, коли при перемиканні в дане вікно користувач буде найімовірніше замінюватиме поточний текст, а не виправляти його. Є також властивості тільки часу виконання SelLength, SelStart, SelText, що визначають відповідно довжину виділеного тексту, позицію перед першим символом виділеного тексту і сам виділений текст. Наприклад, якщо у вікні є текст «виділення тексту» і в ньому користувач виділив слово «тексту», то SelLength = 6, SelStart = 10 і SelText — "тексту". Якщо виділеного тексту немає, то властивість SelStart просто визначає поточне положення курсору.

Вікна редагування можна використовувати і просто як компоненти відображення тексту. Для цього треба встановити в true їх властивість ReadОnly і доцільно встановити AutoSelect в false. В цьому випадку користувач може прокручувати текст, переміщаючи курсор у вікні. Такими особливостями не володіє жодна мітка.

Властивість Text вікон редагування має тип рядка AnsiString. При привласненні цьому типу числової інформації відбувається її автоматичне перетворення в рядок. Тому ви можете безпосередньо здійснювати подібні привласнення. Наприклад, оператор

Editll->Text = 5./2;

буде сприйнятий компілятором нормально і приведе до появи у вікні тексту «2,5». Але при введенні з вікна числової інформації треба використовувати функції StrToFloat — перетворення рядка в значення з плаваючою комою, і StrToInt — перетворення рядка в ціле значення. Якщо текст, що вводиться, не відповідає числу (наприклад, містить неприпустимі символи), то функції перетворення генерують виключення EConvertError. Тому в програмі необхідно передбачити обробку цього виключення. Наприклад:

int A;

try

{

А = StrToInt(Editl->Text);

}

catch (EConvertError^)

{

ShowMessage("Ви ввели помилкове число. Повторіть введення");

}

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

Властивість MaxLength визначає максимальну довжину тексту, що вводиться. Якщо MaxLength = 0, то довжина тексту не обмежена. Інакше значення MaxLength указує максимальне число символів, яке може ввести користувач.

Властивість Modified, доступна тільки під час виконання, показує, чи проводилося редагування тексту у вікні. Якщо ви хочете використовувати цю властивість, то у момент початку роботи користувача з текстом Modified треба встановити в false. Тоді при подальшому зверненні до цієї властивості можна по його значенню (true або false) встановити, було або не було проведене редагування.

Властивість PasswordChar дозволяє перетворювати вікно редагування на вікно введення пароля. За умовчанням значення PasswordChar дорівнює «#0» — нульовому символу. В цьому випадку це звичайне вікно редагування. Але якщо у властивості вказати інший символ (наприклад, символ зірочки «*»), то при введенні користувачем тексту у вікні з'являтимуться саме ці символи, а не ті, які вводить користувач. Тим самим забезпечується секретність введення пароля.

Все сказане вище відносилося до всіх даних вікон редагування. У компоненті Edit все обмежується приведеними специфічними властивостями. А в компоненті LabeledEdit, крім самого вікна редагування, схожого по вигляду із Edit, є мітка. Вона задається властивістю EditLabel — об'єктом класу TBoundLabel. Цей клас має всі основні властивості, властиві мітці Label: Caption, Color, Font, Layout, ShowAccelChar, Word-Wrap, Canvas. Виділення амперсандом в написі Caption символу забезпечує вікно редагування клавішами швидкого доступу.

Властивість LabelPosition компоненту LabeledEdit указує, з якого боку від вікна розміщується мітка: IpAbove — зверху, вирівняна по лівому краю, lpBelow — знизу, вирівняна по лівому краю, lpLeft — зліва, lpRight — справа.

В цілому, компонент LabeledEdit, що з'явився в C++Builder 6, дуже зручний і, ймовірно, може замінити вікна Edit в більшості програм, оскільки рідко потрібне вікно редагування без пояснюючої його мітки.

Властивості Hint і ShowHint забезпечують появу спливаючої підказки при поєднанні курсору з відповідним полем введення.

Компонент MaskEdit відрізняється від Edit і LabeledEdit тим, що в ньому можна задати рядок маски у властивості EditMask. Це дозволяє забезпечити синтаксично безпомилкове введення користувачем таких даних, як номери телефонів, паспортні дані, адреси, дати, час і т.п. Маска складається з трьох розділів, між якими ставиться крапка з комою «;». У першому розділі — шаблоні записуються спеціальним чином символи, які можна вводити в кожній позиції, і символи, що додаються самою маскою; у другому розділі записується 1 або 0 залежно від того, треба чи ні, щоб символи, що додаються маскою, включалися у властивість Text компоненту; у третьому розділі указується символ, використовуваний для позначення позицій, в яких ще не здійснене введення. Прочитати результат введення можна або у властивості Text, яка залежно від виду другого розділу маски включає або не включає символи маски, або у властивості EditText, що містить введений текст разом з символами маски.

Символи шаблону маски

«!» - означає, що в EditText бракуючи символи передують пропусками, а відсутність символу «!» означає, що пропуски розміщуються в кінці.

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

«<» - означає, що все подальші за ним символи повинні вводитися в нижньому регістрі, поки не кінчиться маска або поки не зустрінеться символ «

«< >» означають, що аналіз регістра не проводиться.

«\ » означає, що наступний за ним символ є буквеним, а не спеціальним, характерним для маски. Наприклад, символ «після символу «\ » сприйметься як знак > (більше), а не як символ, вказуючий на верхній регістр.

«означає, що в даній позиції повинна бути буква.

«l» означає, що в даній позиції може бути тільки буква або нічого.

«А» означає, що в даній позиції повинні бути буква або цифра.

«а» означає, що в даній позиції може бути буква, або цифра, або нічого.

«С» означає, що в даній позиції повинен бути будь-який символ.

«с» означає, що в даній позиції може бути будь-який символ або нічого.

«0» означає, що в даній позиції повинна бути цифра.

«9» означає, що в даній позиції може бути цифра або нічого.

«#» означає, що в даній позиції може бути цифра, знак «+», знак «-» або нічого.

«:» використовується для розділення годинника, хвилин і секунд.

«використовується для розділення місяців, днів і років в датах.

«_» означає автоматичну вставку в текст пропуску.

Вводити маску можна безпосередньо у властивість EditMask. Але зручніше користуватися спеціальним редактором масок, що викликається при натисненні кнопки з багатокрапкою в рядку властивості EditMask в Інспекторі Об'єктів.

У редакторі масок вікно Sample Masks містить найменування стандартних масок і приклади введення з їх допомогою. У вікно Input Mask треба ввести маску. Якщо ви вибираєте одну із стандартних масок, то вікно InputMask автоматично заповнюється і ви можете, якщо хочете, відредагувати цю маску.

Вікно Character for Blanks визначає символ, використовуваний для позначення позицій, в яких ще не здійснене введення (третій розділ маски). Індикатор Save Literal Characters визначає другий розділ маски: встановлений, якщо другий розділ рівний 1, і не встановлений, якщо другий розділ рівний 0.

Кнопка Masks дозволяє вибрати і завантажити який-небудь інший файл стандартних масок.

Розглянемо приклади масок. У приведеному вище файлі маска для введення номера телефону має вигляд:

!\(999\) 000-00-00;0;_

У цій масці символ "9" означає, що у відповідній позиції може бути тільки цифра. Символ "0" означає, що в даній позиції повинна бути цифра. Символ підкреслення в кінці маски заповнюватиме порожні позиції. Таким чином, користувачу для введення у вікні буде відображений шаблон:

(__)__-„_-„

Оскільки другий розділ маски дорівнює 0, то при читанні введених користувачем значень властивості EditText і Text розрізнятимуться. Властивість EditText для прикладу буде рівна "(095) 123-45-67", а властивість Text буде містити "0951234567". Якщо другий розділ маски зробити рівним 1, то значення обох властивостей будуть рівні "(095) 123-45-67".

Розглянемо ще приклад. Якщо за допомогою EditMask треба ввести, наприклад, ціле число без знаку, що включає не більше, ніж дві цифри, можна задати маску "99;0;". Якщо число обов'язково повинне бути двозначним, то маска повинна мати вигляд "00;0".

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]