| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Маски ввода |
| Автор: legwar 1.2.2005, 21:20 |
| Здравствуйте никто не подскажет способ реализации корректного ввода информации в maskedit. чтоб dd.mm.yyyy dd-1-30 mm-1-12 yyyy-1980-1999 |
| Автор: Satana 1.2.2005, 22:47 |
| чото я не уловил сути вопроса? там же есть форматы по умолчанию, вот и отредактируй под себя |
| Автор: Guest 2.2.2005, 17:00 | ||
Суть вопроса в том, чтоб избежать анамалий ввода, чтоб в поле dd не могли ввести 41 день или в mm - 13 |
| Автор: Snowy 2.2.2005, 17:07 |
| А вот это не заблокируешь. Единственный вариант контролировать самому через OnChange. Или использовать TDateTimePicker. |
| Автор: ~FoX~ 2.2.2005, 17:12 |
| Лучше не по onChange а по KeyUp, KeyDown или KeyPress, но все равно нудно получиться. Используй DateTimePicker прада он тоже не очень удобный в плане ввода с клавы, но это обойти легко. |
| Автор: legwar 2.2.2005, 21:17 |
| проблему решил функцией copy. стандартная проверка если скопированные цифры >'31' в значении дня тогда анамалия ввода ну и т.д. |
| Автор: Гость_Demon 13.3.2005, 02:30 |
| function TFEdit.pDate(st:string):boolean; var m:array[1..12] of word; d,mes,y:integer; begin pdate:=true; if length(st)<>10 then begin messageDlg('Неправильный формат. ведите в формате дд.мм.гггг',mtError, [mbOk],0); pdate:=false; end; d:=strtoint(copy(st,1,2)); mes:=strtoint(copy(st,4,2)); y:=strtoint(copy(st,7,4)); m[1]:=31; if IsLeapYear(y) then m[2]:=29 else m[2]:=28; m[3]:=31; m[4]:=30; m[5]:=31; m[6]:=30; m[7]:=31; m[8]:=31; m[9]:=30; m[10]:=31; m[11]:=30; m[12]:=31; if mes>12 then begin messageDlg('В году только 12 месяцев!',mtError, [mbOk],0); pdate:=false; end; if d>m[mes] then begin messageDlg('В этом месяце '+Inttostr(m[mes])+'дней',mtError, [mbOk],0); pdate:=false; end; end; |