- Трішки історії… При написанні свого проекту був момент, коли потрібно було розробити основну форму...
- Фільтрація введення 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?