![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день, коллеги.
Имеем ситуацию: БД (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
|
|||
|
|||
|
Спасибо огромное за совет, при случае как-нибудь попробую, однако имею дурную привычку - использовать как можно меньше сторонних компонентов ))
|