Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2012, 15:56   #11
tarasov_88
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Sparky Посмотреть сообщение
почитайте про MaskEdit, там все довольно прозрачно... например вот http://www.beluch.ru/progr/100comp/3_3_3.htm
уже читаю,как раз эту ж ссылку)

опять же там можно ввести дату 44.22.44, такой даты не бывает

Последний раз редактировалось tarasov_88; 13.09.2012 в 16:00.
tarasov_88 вне форума Ответить с цитированием
Старый 13.09.2012, 16:05   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Ну вот уже почти все сделано,посмотрите пост выше. Неужели переделывать..
я бы переделал. или вообще запретил в эти Edit'ы прямой ввод, рядом поместил кнопочку, по которой "вываливал" DateTimePicker, где бы и осуществлялся ввод даты. Кстати, много удобных контролов для ввода даты входит в состав JEDI.

Как ОЧЕНЬ извращённый вариант, можете попробовать такой код:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var te : TEdit;
    sLen : integer;
    setCheck : set of char;
begin
   te := Sender as TEdit;
   sLen := Length(te.Text);
   if sLen >= 10 then
      Key := #0
   else begin
     setCheck := [#8];
     case sLen of
       0..1,3..4,6..10 : setCheck := [#8, '0'..'9'];
       2,5    : setCheck := [#8, '.'];
     end;
    if not (Key in setCheck) then
     begin
       ShowMessage('Недопустимый символ: '+ Key +#13#10+'Введите дату в формате: 01.01.2012');
       Key := #0;
     end;
   end;
end;
тут же можно сразу проверять, вводится ли допустимый день месяца, допустимый месяц, достимый год и т.д. и т.п.
но непонятно, зачем огород городить, когда это давным давно уже сделано.
(см. например, TJvDateEdit )


PS. Предложенный мной извращённый вариант (по сути) тоже самое, что и MaskEdit - он не защищает от 44.22.3333

PPS. через Ctrl-Ins/Shiftl-Ins можно вставить ВООБЩЕ всё что угодно, событие KeyPress в этом случае не срабатывает!

Последний раз редактировалось Serge_Bliznykov; 13.09.2012 в 16:10.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.09.2012, 16:38   #13
tarasov_88
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я бы переделал. или вообще запретил в эти Edit'ы прямой ввод, рядом поместил кнопочку, по которой "вываливал" DateTimePicker, где бы и осуществлялся ввод даты. Кстати, много удобных контролов для ввода даты входит в состав JEDI.

Как ОЧЕНЬ извращённый вариант, можете попробовать такой код:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
тут же можно сразу проверять, вводится ли допустимый день месяца, допустимый месяц, достимый год и т.д. и т.п.
но непонятно, зачем огород городить, когда это давным давно уже сделано.
(см. например, TJvDateEdit )


PS. Предложенный мной извращённый вариант (по сути) тоже самое, что и MaskEdit - он не защищает от 44.22.3333

PPS. через Ctrl-Ins/Shiftl-Ins можно вставить ВООБЩЕ всё что угодно, событие KeyPress в этом случае не срабатывает!
спасибо огромное!ваш код сработал как надо,только не дает дату вводить еще раз, если она уже забита, только в пустой эдит ввод проходит.

Разобрался: поменял if sLen >= 10 then на if sLen >= 11 then

А можно такую процедуру в цикл вбить по эдитам,чтоб для каждого отдельного не прописывать?? Только цикл не по всем editaм, а только по нечетным

Последний раз редактировалось tarasov_88; 13.09.2012 в 16:47.
tarasov_88 вне форума Ответить с цитированием
Старый 13.09.2012, 16:54   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А можно такую процедуру в цикл вбить по эдитам,чтоб для каждого отдельного не прописывать?? Только цикл не по всем editaм, а только по нечетным
не можно а НУЖНО!

я в коде специально использовал sender - (этот тот контрол, который и вызвал событие).
Можно (нужно) назначить ВСЕМ проверяемым эдитам одно и то же событие!

Поступайте так, на форме в режиме дизайнера выделяете с помощью зажатой клавиши Shift и клика лев.кн.мышки все нужные Edit'ы (которые должны контролироваться).
потом в испекторе объектов (Object Inspector), закладка События (Events) на Onchange стрелочка и выбираете нужное событие ( в вашем случае Edit1KeyPress). нажимайте Enter. всё.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет ввода в Edit Matrix6993 Мультимедиа в Delphi 17 12.10.2013 12:04
Запрет на редактирование ячеек от даты valerij Microsoft Office Excel 6 12.12.2010 21:46
Ввод даты в DBE Delphi 7 Ramirag Помощь студентам 4 02.12.2009 16:02
Ввод символов в Edit в Delphi TaYgA Помощь студентам 3 21.11.2009 17:15
Запрет изменения даты Viteef Общие вопросы Delphi 0 20.02.2008 05:09