Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 00:52 27.04.24 
Клубове/ Компютри и Интернет / Delphi Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема Re: ПОМОЩ СПЕШНО [re: vasko]
Автор andrew_nikoloff (bugbuster)
Публикувано23.02.06 11:50  



Шом това ти е трудно да направиш - явно програмирането не ти е силна страна (поне засега) и не трябва да се захващаш с такива спешни задачки без човек до себе си, дето да ти помага. Но ето ти едно решение:
Сложи си на една форма пет TEdit контрола и ги кръсти съответно eEGN, eYear, eMonth, eDate и eOlderThan60. Във формата си напиши по-долната процедура и напиши следващият я код в събитието OnChange на eEGN полето.


function ParseEGN(const EGN: String; var Y, M, D: Word; var OlderThan60: Boolean): Boolean;
var
BirthDay: TDate;
Y2, M2, D2: Word;
idx: Integer;
begin
Result := False;
if Length(EGN) < 6 then //Няма ги въведени още необходимите цифри
Exit;
for idx := 1 to Length(EGN) do
if not (EGN[idx] in ['0'..'9']) then //В ЕГН може да има само цифри
Exit;
try
Y := StrToInt(Copy(EGN, 1, 2));
M := StrToInt(Copy(EGN, 3, 2));
D := StrToInt(Copy(EGN, 5, 2));
if M > 40 then //Роден след 2000 г.
begin
Y := Y + 2000;
M := M - 40;
end
else if M > 20 then //Роден преди 1900 г.
begin
Y := Y + 1800;
M := M - 20;
end
else //Роден между 1900 и 2000 г.
Y := Y + 1900;
BirthDay := EncodeDate(Y, M, D);
DecodeDate(Date, Y2, M2, D2);
OlderThan60 := ((Y2 - Y) > 60) or
(((Y2 - Y) = 60) and ((M2 > M) or ((M2 = M) and (D2 > D))));
Result := True;
except
Result := False; //Грешка. Вероятно невалидна дата
end;
end;

procedure TForm1.eEGNChange(Sender: TObject);
var
Y, M, D: Word;
OlderThan60: Boolean;
begin
if ParseEGN(eEGN.Text, Y, M, D, OlderThan60) then
begin
eYear.Text := IntToStr(Y);
eMonth.Text := IntToStr(M);
eDay.Text := IntToStr(D);
if OlderThan60 then eOlderThan60.Text := 'Над 60 г.' else eOlderThan60.Text := 'Под 60 г.';
end
else
begin
eYear.Clear;
eMonth.Clear;
eDay.Clear;
eOlderThan60.Clear;
end;
end;

Писал съм кода директно тук, така че може да съм допуснал някоя синтактична грешка, но това ще трябва да можеш и сам да си го оправиш. Също така си погледни проверката за възръстта на човека да не съм я объркал нещо...



Цялата тема
ТемаАвторПубликувано
* ПОМОЩ СПЕШНО vasko   23.02.06 09:30
. * Re: ПОМОЩ СПЕШНО Ивaнчo   23.02.06 11:25
. * Re: ПОМОЩ СПЕШНО EFEX   23.02.06 11:41
. * Re: ПОМОЩ СПЕШНО andrew_nikoloff   23.02.06 11:50
. * Re: ПОМОЩ СПЕШНО NikB   23.02.06 12:03
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.