Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка на "размер" дня 
:(
    Опции темы
mr.Anderson
Дата 30.8.2005, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Юзверь вводит дату в три Эдита (в качестве календаря я использую DateTimePicker). В первом - день, во втором - месяц, в третьем - год. Надо проверить, что ввел юзер в качестве дня. Если день превышает 31, то надо исправить на 31 или 30, в зависимости от месяца. Я написал так:
Код

int day=Edit1->Text.ToInt();
int month=Edit2->Text.ToInt();
AnsiString string_day=Edit1->Text;
//------------------------------------------//
if(day>=32)
{
 //Проверка на месяцы с 30-ю днями
 if(month==4 || month==6 || month==9 || month==11) {string_day="30";return;}
 else string_day="31";
}
//------------------------------------------//
Form1->DateTimePicker1->Date=Edit1->Text+"."+Edit2->Text+"."+Edit3->Text;

Однако, при вводе неверного дня программа просто "вываливается" и говорит, что не существует даты с днем, большим 31. Что не так? Алгоритм вроде верный...

Это сообщение отредактировал(а) sim7 - 30.8.2005, 20:51


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
BreakPointMAN
Дата 30.8.2005, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 6
Всего: 24



Цитата(sim7 @ 30.8.2005, 20:40)
Юзверь вводит дату в три Эдита (в качестве календаря я использую DateTimePicker). В первом - день, во втором - месяц, в третьем - год.

А зачем такие извращения, если DateTimePicker и так предназначен для корректного ввода даты?!



Цитата(sim7 @ 30.8.2005, 20:40)
Form1->DateTimePicker1->Date=Edit1->Text+"."+Edit2->Text+"."+Edit3->Text;

Как используется string_day? Ты уверен, что эта переменная вообще используется? Ты изменяешь Edit1->Text в соответствии с ее значением?

Кстати, а високосный год кто учитывать будет?



--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
codelord
Дата 31.8.2005, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



sim7 держи, поправил.
Цитата(BreakPointMAN @ 30.8.2005, 21:17)
Кстати, а високосный год кто учитывать будет?

теперь будет:
Код

int day=Edit1->Text.ToInt();    
int month=Edit2->Text.ToInt();
//------------------------------------------//
if(day>=31)    
{
 if(month==4 || month==6 || month==9 || month==11) Edit1->Text="30";
 else Edit1->Text="31";
}
if(day>=29 &&  month==2)
        {
        int year=Edit3->Text.ToInt();
        if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) Edit1->Text="29";
        else  Edit1->Text="28";
        }
//------------------------------------------//    
Form1->DateTimePicker1->Date=Edit1->Text+"."+Edit2->Text+"."+Edit3->Text; 



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Vyacheslav
Дата 31.8.2005, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Я понимаю, что все хочется делать своими руками, но не проще ли smile
Код

int year = Edit1->Text.ToInt();
int month = Edit2->Text.ToInt();
int day = Edit3->Text.ToInt();
if ( day > DaysInAMonth(year, month) ) {
     day = DaysInAMonth(year, month);
}




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 31.8.2005, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



codelord, я тож пробовал ваш вариант. Ничего у меня не получалось.
Vyacheslav, где вы такие функции берете? Мне бы их списочек найти... Всех...
И еще вопрос. Почему вы изменяете ToInt() у Эдита, а не свойство Text?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
_hunter
Дата 31.8.2005, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



список функций в хелпе по модулю DateUtils
можеш пичать int year = StrToInt(Edit1->Text);


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Vyacheslav
Дата 31.8.2005, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(sim7 @ 31.8.2005, 16:00)
Vyacheslav, где вы такие функции берете? Мне бы их списочек найти... Всех...
И еще вопрос. Почему вы изменяете ToInt() у Эдита, а не свойство Text?

Я в принипе не могу изменить ToInt(). Просто меняю переменную day типа int, которая предварительно была заполнена спомощью ToInt()
Если Вы хотите значение завести обратно в Edit, то нужно добавить еще строку
Код

Edit->Text = AnsiString(day);


Если же стоит вопрос о заполнении TDataTimePicker, то лучше бы выглядело
Код

Form1->DateTimePicker1->Date = TDateTime( year,  month,  day);




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 1.9.2005, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



А вот мне и унтересно, почему же
Код

Edit1->Text="31";

Не срабатывает?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
_hunter
Дата 1.9.2005, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



почему не срабатывает? срабатывает


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
mr.Anderson
Дата 2.9.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Да? А у меня в этой проверке почему-то не срабатывает. Просто не исправляет, и все тут.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
_hunter
Дата 2.9.2005, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



в какой проверке? нет там никакой проверки...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
codelord
Дата 2.9.2005, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



Если это проверка то вместо "=" будет "=="


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
mr.Anderson
Дата 3.9.2005, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Вы меня не поняли. Я имел в виду, что в коде
Код

int day=Edit1->Text.ToInt();    
int month=Edit2->Text.ToInt();
//------------------------------------------//
if(day>=31)    
{
 if(month==4 || month==6 || month==9 || month==11) Edit1->Text="30";
 else Edit1->Text="31";
}
if(day>=29 &&  month==2)
        {
        int year=Edit3->Text.ToInt();
        if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) Edit1->Text="29";
        else  Edit1->Text="28";
        }
//------------------------------------------//    
Form1->DateTimePicker1->Date=Edit1->Text+"."+Edit2->Text+"."+Edit3->Text; 

У меня просто не меняется значение Эдитов, а выкидывается ошибка о "Несуществующей дате".


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
codelord
Дата 3.9.2005, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



пожалуйста:

Это сообщение отредактировал(а) codelord - 3.9.2005, 22:04

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  data_picker.zip 14,87 Kb


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.