Статьи

Приклад фільтрація даних вводяться в поля введення Delphi - Shinobi

  1. Трішки історії… При написанні свого проекту був момент, коли потрібно було розробити основну форму...
  2. Фільтрація введення TEdit в DelphiXE4 ... Ложка дьогтю в бочці меду ...

Трішки історії…

При написанні свого проекту був момент, коли потрібно було розробити основну форму для занесення даних особи, від якого буде подано заяву: ПІБ, адреса, паспортні дані і так далі.

Я накидав на форму поля введення, все підписав, і думав це все 😉 Потім дав протестувати одному агенту, щоб дізнатися його думку. І тут почалося ... З'ясувалося, що на все поля потрібно накласти перевірку на дані, що вводяться. Наприклад, в поле «Прізвище», «Ім'я» і «батькові» можна вводити латиницю і всякі символи і так далі (допустима тільки кирилиця, одинарні прогалини і дефіс). Як пізніше показала практика, люди не дивляться, що вводять ... З цього я став застосовувати обмеження для вводяться користувачем символів.

Фільтрація букв і цифр, що заносяться поля введення (TEdit)

Отже, перейдемо від ліричного відступу до справи. У компонента edit, є чудова подія OnKeyPress. Подія виникає при введенні в поле будь-якого символу, символ зберігається в змінну Key (тип Char). Ось те саме місце, де можна обмежити введення символів, робиться це в такий спосіб:

Ось те саме місце, де можна обмежити введення символів, робиться це в такий спосіб:

OnKeyPress для TEdit

procedure TForm1.Edit1KeyPress (Sender: TObject; var Key: Char); begin if not (Key in [ 'А' .. 'Я', # 08])) then Key: = # 0; end;

Розберемо код. Порівнюємо змінну Key з масивом символів, в даному случає від А до Я в верхньому регістрі, і, якщо умова виконується, то символ відобразиться в поле введення. Якщо умова не виконується, просто Обнуляємо змінну Key. Тобто ми вводимо програмне обмеження на символи, що вводяться, яких немає в масиві 'А' .. 'Я'. У нашому випадку ми робимо фільтрацію букв при введенні в поле edit. Але що вам заважає, наприклад, робити те ж саме в ComboBox і інших компонентах для введення текстових даних? Зверніть увагу, що в умова варто «not», це означає, що за істину буде прийнято як раз те, що символ не входить в діапазон від А до Я.

Помітили в умова код символу # 08? Це код з таблиці ASCII - означає він клавішу Backspace. При написання цього коду я зіткнувся з тим, що якщо не вказати це символ, вийде наступні: можна внести будь-які літери від А до Я, але не можна редагувати запис ... Тому ми додатково дозволяємо вводити символ # 08, тим самим дозволяючи користувачеві редагувати текст.

Така подія є у більшості текстових полів введення, просто вставляєте код і все. Правда є одне «АЛЕ» - даний код я тестував при написанні DLL на Delphi XE 4 ... У мене виникли проблеми, про них я теж напишу. Щоб вас попередити ...

Фільтрація введення TEdit в DelphiXE4 ... Ложка дьогтю в бочці меду ...

Середа Delphi XE 4, і студії працюють з рядками в кодуванні utf8 замість cp1251. Тут ховається корінь зла і код, наведений вище, вже не відпрацює. Тому слід його модернізувати, нижче приведу код для Delphi XE ...

procedure TForm1.Edit1KeyPress (Sender: TObject; var Key: Char); var simvol: AnsiString; begin simvol: = String (Key); if not (Char (simvol [1]) in [ 'А' .. 'Я', # 08]) then Key: = # 0; end;

Епілог

Ще хотілося б дати одну пораду. Я робив наступну схему для введення даних:

Заповнюємо поле edit і натискаємо Enter (в якості підтвердження введення) -> Перевіряємо в цілому введені дані-> підсвічується поле або пропускаємо далі.

Нижче я приведу реалізацію даної схеми.

procedure TForm1.Edit1KeyPress (Sender: TObject; var Key: Char); begin if not (Key in [ 'А' .. 'Я', # 08, # 13])) then Key: = # 0; if Key: = # 13 then // Перевіряємо чи дійсно натиснута клавіша Enter begin if (Тут умова перевірки того, що ввели. Наприклад, перевірка введеного Імені за довідником) then begin Edit1.Color: = clWindow; // Офарблюємо в білий колір, можете замінити на інший Edit2.Enabel: = True; // Активуємо наступні поле введення Edit2.SetFocus; // Передаємо в нього фокус, такий порядок важливий ... Не можна передавати фокус в НЕ активування поле - це викличе помилку. Else Edit1.Color: = clRed; // Офарблюємо в червоний. Якщо умова не виконана ... End;

Ось все, що я хотів написати по цій темі. Наостанок, скажу, що цифри вказуйте ось так « '0' .. '9'». Сподіваюся, дана стаття буде вам корисна, дорогі читачі!

Але що вам заважає, наприклад, робити те ж саме в ComboBox і інших компонентах для введення текстових даних?
Помітили в умова код символу # 08?

Новости