Основні тонкощі роботи інтерфейсом користувача.

 

Основні тонкощі роботи інтерфейсом користувача.

 

 

         Доволі суттєвим є інтерфейс користувача в кінцевому продукті. Так як зазвичай користувач не володіє навиками професійної роботи на персональному комп’ютері, та не може самостійно встановити яку і де він помилку допустив, тому є два методи протистояння цьому, перший – це визначення помилки після того як вона скоїлась, та приймання негайних мір по її усуненню, другий ж метод полягає в тому, щоб не дати користувачу завідома ввести не коректні данні, тобто не виконувати додавання/видалення не правильних даних.

 

         Один з методів запобігання вводу некоректних даних – компонента TMaskEdit. Суть її роботи така розробник задає певну маску вводу, яку користувач не може порушити (наприклад при введенні дати, коли користувач забуває поставити крапку, серійного номера те є роздільники і поля одне з яких може бути лише числом, а друге включати в себе лише літери).

 

Деякі властивості компоненти TMaskEdit

TMaskEdit.Mask – маска вводу тексту. Якщо відкрити це поле в візуальному редакторі то вийде форма редагування маски, де можна вказати що користувач має вводити.

Маска вводу задається в такому вигляді:

·        Символ «0» інтерпретує, що може бути введено тільки число;

·        Символ «А» інтерпретує, що може бути введено як і літери так і цифри;

·        Символ «L» інтерпретує, що може бути введено тільки літера;

·        Інші символи ідуть як константи маски і безпосередньо відображаються в полі вводу;

·        Строка маски має закінчуватись ;1;? – де ? це символ який відображається замість не введеного символу (наприклад маска «00.00.0000;1;_» пустою буде виглядати «__.__.____», а після вводу наприклад так – «12.01.2009»).

TMaskEdit.Text – текст який користувач ввів, якщо текст введений не повністю не введене передається символом який стоїть в кінці маски, тобто якщо ви бажаєте перевірити чи повністю користувач ввів поле то вам потрібно просто знайти чи є в веденому символ «_» якщо ж так, то можна нагадати користувачу по важливість вводу іменно коректних даних. Так як користувач може ввести при такій масці наприклад «99.99.2003», а місяця і дня немає 99, то можна скористуватися вбудованою системою перевірки дати, це матиме вигляд:

 

try

 StrToDate(MaskEdit1.Text);

except

 ShowMessage(‘Дата введена не корректно!!’);

end;

 

Якщо ж далі розглядати тонкощі введення дати то можна побачити, що SQL потребує дату в форматі РРРР-ММ-ДД, тобто не в такому порядку і не з таким розділювачем як прийнято в наших стандартах (у нас «ДД.ММ.РРРР») для того щоб усунути незручності при введенні дати можна скористуватися вбудованою функцією форматування дат в Delphi це матиме вигляд:

 

try

 Label1.Caption:='';

 Edit1.Text:=FormatDateTime('YYYY-MM-DD',StrToDate(MaskEdit1.Text));

  except

 label1.Caption:='Не коректна дата!';

  End;

 

Після цього, якщо користувач введе не коректну дату Label1 виведе помилку.

 

Функція FormatDateTime має синтаксис:

FormatDateTime(Time:TDateTime;Format:String):String;

         де Format може мати такий зміст

 

d                 – відображає число місяця без нуля

dd               – відображає число місяця з нулем

ddd             – відображає скорочену назву дня тижня

dddd           – відображає повну назву дня тижня

m                – відображає місяць без нуля

mm             – відображає місяць з нулем

mmm                   – відображає скорочену назву місяця

mmmm       – відображає повну назву місяця

yy               – відображає рік двома цифрами

yyyy           – відображає рік чотирма цифрами

h                 – відображає години без нуля

hh               – відображає години з нулем

n                 – відображає хвилини без нуля

nn               – відображає хвилини з нулем

 

Якщо ж все-таки помилка потрапила до SQL запиту та призвела до  його помилкового виконання тоді щоб «перехватити» помилку потрібно скористатися синтаксисом розгалуження виконання коду try … except його вигляд такий:

 

Try

<виконання «помилконебезпечних» операцій>

Except

         …

         <обробник помилки>

         …

End;

 

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

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

 

 

Функції які можуть знадобитися для перевірки вірності рядкових даних

 

         В середовищі програмування досить багато рядкових функцій які можуть знадобитися при перевірці конкретності введених користувачем даних.

         Також вони можуть знадобитися якщо потрібно наприклад значення одного поля в подальшому потрібно розділити (наприклад з
«Шевченко Т. Г.» – отримати тільки фамілію, або зі значення поля «Тарас Григорович Шевченко» отримати «Шевченко Т. Г.», досить суттєво при формуванні документів).

 

         Pos(subStr, Str:String):String

         Повертає перше входження підстроки SubStr в Str, якщо такої підстроки не міститься то повертає 0.

         Copy(S; Index, Count:Integer):String

         Повертає підрядок із S який починається із символа Index і складається Count символів.


         Format(S:String;[n1,….nm]):String;

         Форматує рядок S вставлянням в нього n1…nm змінних. Рядок S має складатися з символів які він не змінює і масок вставки в рядок заданих змінних.

         Наприклад Format(‘I say :%s!’,[‘Hello’]) = ‘I say Hello!’

         Формати включення можуть бути такими:

                   %s – виведе рядковий аргумент

                   %d – виведе числовий аргумент

                   %f – виведе аргумент з плаваючою крапкою

                   %u – вивід без знакового цілого (таке ж як і %d, але біля числа не відображається «-»)

                   %e – вивід числа з плаваючою крапкою в експоненціальному вигляді.

                   %n – вивід числа «номером» тобто відділяє пробілом групи по три символи.

                   %m – вивід числа в грошових одиницях спираючись на локальні налаштування операційної системи.

                   %x – вивід числа в шіснадцятиричній формі запису.

 

         В Делфі є ще додатковий модуль для обробки рядків StrUtils в якому і описані додаткові функції які можуть нам допомогти, наприклад:

 

         AnsiLowerCase(const Str:String):String

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

 

         AnsiReplaceText(const AText, AFromText, AToText: string): string;

         Замінює в рядку AText підрядок AFromText на рядок AToText.

 

         AnsiUpperCase(const Str:String):String

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