|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как очистить поле DATA, не потеряв маску ввода в DBEDIT ?
Добрый день, коллеги.
Имеем ситуацию: БД (interbase), в таблице есть поле типа дата. На форме - DBEdit для ввода. Полю присвоена маска ввода: (editmask) !99/99/9999;1;_ Я хочу сделать на форме проверку корректности данных и выводить сообщение об ошибке, при этом хочется чтобы курсор ОСТАВАЛСЯ в этом DBEDIT. Вешаю обработчик события OnSetText поля: Код:
procedure TDM.KadryDTRSetText(Sender: TField; const Text: String); var d : TDateTime; begin try d:=StrToDate(text); Sender.AsDateTime:=d; except Application.MessageBox('Неверная дата!', 'Ошибка', MB_OK + MB_ICONERROR); Sender.Clear; Edit_kadry.perform($28,1,0); // сообщение WM_NEXTDLGCTL end; Ошибки корректно отлавливаются, выводится сообщение об ошибке, поле очищается, НО !!! пропадает маска ввода! и дату ввести уже не получается. Подскажите, как быть ? |
#2
|
||||
|
||||
используйте компонент DateTimePicker с вкладки win32
Появиться на 2-е строчки кода больше(чтение/запись), но это того стоит |
#3
|
|||
|
|||
Не совсем подходит -
1. мне нужно DB - иначе вручную обрабатывать запись/чтение 2. В него вноситься текст с точкой - а в dbedit по маске пользователю не нужно вносить точки между днем, месяцем и годом - более быстрый ввод 3. Кажется он не может содержать пустую дату - а у меня не все поля дат обязательны к заполнению... |
#4
|
||||
|
||||
Никогда не пользовался TDBxxxx контролами кроме грида, но всезнающий хелп подсказывает, что, скорее всего, нужно использовать свойсво TDBEdit.Text.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. Последний раз редактировалось Aristarh Dark, 21.07.2011 в 16:37. |
#5
|
||||
|
||||
Цитата:
вообще не дает ввести???, я сейчас у себя попробовал, маска пропадает но вводить я данные могу. З.Ы. вот эту строчку я закоментил Edit_kadry.perform($28,1,0); // сообщение WM_NEXTDLGCTL |
#6
|
|||
|
|||
Цитата:
Если закоментить эту строчку - это сообщение, которое откатывает фокус на предыдущий элемент, тоесть мы выходим из DBEDIT, а проверка в случае некорректности - возвращает нас назад - юзер, введи правильно! )) Если этой строчки нет - фокус переходит на следующий элемент DBEDIT,и если мы вернемся в предыдущий вручную - то маска есть, и вводить можно - все ОК! Но мне хотелось бы чтобы фокус ОСТАВАЛСЯ в этом DBEDIT. Попробуйте эту строчку оставить в таком виде: perform(wm_nextdlgctl,1,0); а ниже положить еще пару EDit или других элементов, на которые будет становиться фокус. |
#7
|
||||
|
||||
Цитата:
Хотелось бы узнать версию Delphi. В Delphi7, если не ошибаюсь DBEDIT не имеет маски ввода, я пользуюсь TDBDateTimeEditEh. А фокус можно же, если не ошибаюсь, программно установить методом SetFocus - Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! Последний раз редактировалось Viajero, 21.07.2011 в 15:53. |
#8
|
|||
|
|||
Цитата:
Цитата:
|
#9
|
||||
|
||||
Цитата:
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! Последний раз редактировалось Viajero, 21.07.2011 в 16:06. |
#10
|
|||
|
|||
Цитата:
|
#11
|
||||
|
||||
c ZEOS не работал, поэтому не могу поэкспериментировать. Я использовал FIBPLUS в связке с EhLIB.
Цитата:
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! Последний раз редактировалось Viajero, 21.07.2011 в 17:03. |
#12
|
|||
|
|||
Цитата:
|
#13
|
|||
|
|||
Впринципе сделал - в случае ошибочного ввода, после очистки поля - я со следующего элемента возвращаю фокус назад, и все отлично.
Немного пошловато, конечно, но работает на ура. на этом и оставим. Спасибо ВСЕМ огромное за помощь! |
#14
|
||||
|
||||
Всё таки я бы посоветовал, если очень хочется использовать маску и чтобы это красиво выглядело на форме, использовать компонетны EhLib, если не ошибаюсь, они бесплатные, и в интернете их можно найти. Кроме TDBDateTimeEditEh(с маской даты),TDBNumberEditEh (с маской числа) и др там ещё есть супернавороченный TDBGridEh. Заодно поделитесь, насколько они совместимы с ZEOS.
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! Последний раз редактировалось Viajero, 22.07.2011 в 13:59. |
#15
|
|||
|
|||
Спасибо огромное за совет, при случае как-нибудь попробую, однако имею дурную привычку - использовать как можно меньше сторонних компонентов ))
|