Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
103 / 90 / 75
Регистрация: 04.11.2011
Сообщений: 1,820
1

Ограничение на ввод даты

15.04.2015, 14:03. Показов 2000. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть поле edit1, куда я ввожу год. Как сделать ограничение, чтобы ввести можно было только 1900-2015 года?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2015, 14:03
Ответы с готовыми решениями:

Ограничение на ввод в Edit
Мне надо чтоб в Edit не вводилось число больше 36 , вот так делаю procedure...

Ограничение на ввод в StringGrid
Подскажите пожалуйста, как сделать чтоб в стринггриде в первом столбце нельзя было ввести больше 25...

Ограничение на ввод в одном столбце StringGrid
У меня есть таблица, нужно чтобы в 1 столбце вводились только буквы, как реализовать это?

Ограничение на ввод числа в ячейку stringgrid
У меня есть таблица, в которой значение ячейки (редактируемая) не может быть больше, чем значение...

19
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
15.04.2015, 14:48 2
проще всего - после ввода проверять, и если что не так, выдавать сообщение и стирать ввод
1
103 / 90 / 75
Регистрация: 04.11.2011
Сообщений: 1,820
15.04.2015, 15:55  [ТС] 3
Сообщений никаких не должно быть, нужно чтобы сразу, при вводе были такие рамки
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,252
15.04.2015, 15:58 4
Цитата Сообщение от Xo6ut Посмотреть сообщение
нужно чтобы сразу, при вводе были такие рамки
Т.е. как только пользователь ввел в эдит первую цифру (допустим 1) его сразу убивать? Ведь 1 меньше чем 1900.
1
103 / 90 / 75
Регистрация: 04.11.2011
Сообщений: 1,820
15.04.2015, 16:13  [ТС] 5
Ну зачем же убивать сразу:d Можно как-то сделать границу для каждой позиции? Т.е допустим 1 цифра может быть либо 1, либо 2, вторая-либо 9, либо 0 и тд
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
15.04.2015, 16:56 6
о! оказывается у автора есть подобие алгоритма, так может, познакомить нас с ним?
1
103 / 90 / 75
Регистрация: 04.11.2011
Сообщений: 1,820
15.04.2015, 20:14  [ТС] 7
А как можно задать ограничение посимвольно? Вот так?
Delphi
1
edit1.text[1] in .....
??
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,252
15.04.2015, 20:18 8
Delphi
1
if edit1.text[1] in ['1','2'] then...
1
103 / 90 / 75
Регистрация: 04.11.2011
Сообщений: 1,820
15.04.2015, 20:32  [ТС] 9
Delphi
1
2
3
4
5
procedure TForm1.EdYearKeyPress(Sender: TObject; var Key: Char);
 
  begin
    if edyear.text[1] in ['1','2'] then showmessage('gg') ;
end;
Выдает ошибку access violation
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,252
15.04.2015, 20:39 10
Delphi
1
if (edyear.text = '') and (key in ['1','2']) then showmessage('gg') ;
1
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
15.04.2015, 22:35 11
А тебе случайно не проще ComboBox кинуть, при создании формы заполнить его в цикле и не городить ни чего с эдитами.
1
103 / 90 / 75
Регистрация: 04.11.2011
Сообщений: 1,820
15.04.2015, 22:58  [ТС] 12
Неа, нужно сделать именно через эдиты

Добавлено через 8 минут
Не понимаю как сделать=\
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
15.04.2015, 23:01 13
Цитата Сообщение от northener Посмотреть сообщение
if (edyear.text = '') and (key in ['1','2']) then
чем ответ-то не подходит???

я могу допустить, что не понимаешь как в программе написать, но на русском человечьем алгоритм-то изобразить способен?

ага, подумал, и добавил:
...и написать его тут.
1
103 / 90 / 75
Регистрация: 04.11.2011
Сообщений: 1,820
15.04.2015, 23:06  [ТС] 14
Через длину строки попробую
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
15.04.2015, 23:12 15
шеф, усё пропало, алгоритма не будет, будем без него писать
пральна, ибо нефиг...
1
103 / 90 / 75
Регистрация: 04.11.2011
Сообщений: 1,820
15.04.2015, 23:45  [ТС] 16
Так это же для первого символа только,а как сделать условие для последующих?
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
16.04.2015, 00:16 17
Тут не все так просто, когда ты печатаеш втрой символ, нужноуже учесть каким был первый, если он был 1, то второй может быть только 9, если 2, то второй только нулем. Дальше условие еще сложнее.
Если первые две цифры 20 то третья можетпринять только 0 или 1, но код снова несможет отработать правильно так как ты не введеш две цифры одновременно.. Нужно еще одно условие типа счетчика на проверку сколько символов уже напечатано, это уже какая- то гора кода будет..

Ну или еще как вариант попробовать составить список TStringList от 1900 до 2015 и прогонять цикл таким образом-
печатаеш первый символ- прогоняеш по списку первого символа из TStringList-а на поиск совпадений символа, второй печатаеш снова цикл, в результате гоняем цикл четыре раза, но это тоже какой-то велосипед..

Добавлено через 5 минут
Есть еще вариант поработать в третью сторону, DateUtils с датами, а там уже сравнивать вышла ли дата за пределы или нет, но и в этом случае дата должна уже быть написана полностью перед сравнением.
1
103 / 90 / 75
Регистрация: 04.11.2011
Сообщений: 1,820
16.04.2015, 00:23  [ТС] 18
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.EdYearChange(Sender: TObject);
var b:integer; D:char;
begin
if Key1 in [#08] then
else
if (Length(EdYear.Text)=1) and (((EdYear.Text)='1') or ((EdYear.Text)='2')) then
b:=Strtoint(EdYear.Text)
else
IF(Length(EdYear.Text)=1) and (((EdYear.Text)<>'1') and ((EdYear.Text)<>'2')) THEN keybd_event(VK_BACK,0,0,0)
else
if (Length(EdYear.Text)=2) and (((EdYear.Text)='19') or ((EdYear.Text)='20')) then
b:=Strtoint(EdYear.Text)
else
IF (Length(EdYear.Text)=2) and (((EdYear.Text)<>'19') and ((EdYear.Text)<>'20')) THEN keybd_event(VK_BACK,0,0,0)
else
if (Length(EdYear.Text)=3) and (((EdYear.Text)>='190') and ((EdYear.Text)<='201')) then
b:=Strtoint(EdYear.Text)
else
IF (Length(EdYear.Text)=3) and (((EdYear.Text)<'190') or ((EdYear.Text)>'201')) THEN keybd_event(VK_BACK,0,0,0)
else
if (Length(EdYear.Text)=4) and (((EdYear.Text)>='1900') and ((EdYear.Text)<='2015')) then
b:=Strtoint(EdYear.Text)
else
IF (Length(EdYear.Text)=4) and (((EdYear.Text)<'1900') or ((EdYear.Text)>'2015')) THEN keybd_event(VK_BACK,0,0,0)
else if (Length(EdYear.Text)=5) then keybd_event(VK_BACK,0,0,0);
Вот до чего додумался мой воспаленный мозг. Знаю что говнокод, но на первое время сойдет
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,252
16.04.2015, 01:56 19
Цитата Сообщение от Xo6ut Посмотреть сообщение
Вот до чего додумался мой воспаленный мозг.
Вот она первая за сегодняшний день твоя дурацкая затея. Ничто не помешает пользователю скопировать откуда-то 1234 и вставить эту строку в эдит. Твоя проверка никак этому помешать не сможет.
P.S. Но уж если так хочется потренироваться в программировании, то твой код это не говнокод, это гораздо хуже. Это тот самый ужасный монстр, о котором говорил АА (ака Gunsmoker) в своей бессмертной саге об X,Y и Z. Отменять ввод символа в эдит можно гораздо проще и правильнее присвоив параметру Key в OnKeyPress значение #0, а удалить уже введенный последний в строке символ можно просто уменьшив на 1 длину строки.
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
16.04.2015, 09:22 20
я голосую за
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
TStringList от 1900 до 2015
0
16.04.2015, 09:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2015, 09:22
Помогаю со студенческими работами здесь

Edit ограничение на ввод чисел от 0 до 255
Как создать процедуру для edit (именно для edit!) чтобы вводились числа в диапазоне только от 0 до...

Ограничение на ввод количество знаков в Edit (не более Х и не менее Х)
На событие OnChange компонента TEdit стоит условие: Button1.Enabled:=(Length(Edit1.Text)&gt;2);(Если...

Ограничение на ввод какой либо информации в поле Edit
А вот у меня вообще не получается реализовать ограничение на ввод какой либо информации в поле Edit...

Нужно настроить ввод даты в delphi в dbGrid, в ручную через edit. Добавление новой даты.
Добрый день. Прошу о помощи. У меня на форме есть dbGrid. Мне нужно, чтобы третья колонка была...

Ограничение на ввод символов (разрешить ввод только цифр)
Всем доброго времени суток! Я начал изучать С++ и у меня возник такой вопрос: Как ограничить...

Запретить ввод даты в MaskedTextBox1 больше текущей даты
На форме MaskedTextBox1 с маской под короткую дату, то есть __.__.____ Как запретить ввод в это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru