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

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

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 14:52 07.05.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема ПОМОЩ СПЕШНОнови  
Авторvasko (Нерегистриран)
Публикувано23.02.06 09:30



Здравейте, моля за помощ по следният проблем: в компонента от тип тtedit въвеждам ЕГН искам след неговото въвеждане автоматично да се изпише датата месеца и годината на раждане на човека и да се определи дали е преди 60-та или след 60-та година!!!
Имам идеи но ми трябва спешно затова ще съм Ви благодарен ако помогнете!



Тема Re: ПОМОЩ СПЕШНОнови [re: vasko]  
АвторИвaнчo (Нерегистриран)
Публикувано23.02.06 11:25



А стига беееееееее

Ами направи копи на първите 6 символа от егенето, и си готов... къде е проблема... това са най-тъпи копи и пасте операции
първите 2 самвола превърнати в число ако са >=60...

използвай onChange на контролата, ако искаш в "движение" да правиш нещата



Тема Re: ПОМОЩ СПЕШНОнови [re: vasko]  
АвторEFEX (Нерегистриран)
Публикувано23.02.06 11:41



Щом е толкова спешно направо ти го пиша тука.. а ти си го тествай и доизкусурявай...
//----------------------------------------------------
Function GetAges:Integer;
var
DtTm : TDateTime ;
EditEGN : TEdit ;
ages : Integer ;

begin
ShortDateFormat := 'ddmmyyyy';
// тук трябва сам да се погрижиш EGN-да е форматирано
// TestEGNIsCorrect(Trim(EditEGN.Text));
DtTm := StrToDateTime(Copy(Trim(EditEGN->Text),1,8));
ages = Integer(Now - DtTm);
// От тук нататък с DtTm имаш много възможности за сметки и прочее...
// в.ж. DateTimeToStr, DateToStr и т.н.
Result := ages;
end;
//----------------------------------------------------

И все пак виж хелпа за ShortDateFormat защото пиша по памет...
Може да е LongDateFormat....

извинявай за закачката ..не че и аз съм много велик ама с тези неща като "жонглиране" с дати и часове трябва да си поиграеш още преди да знаеш за какво служи F9 :))))



Тема 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;

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



Тема Re: ПОМОЩ СПЕШНОнови [re: vasko]  
Автор NikB (любопитен)
Публикувано23.02.06 12:03



Васко, като гледам какъв си нерегистриран, най вероятно само се хабя да ти пиша, но за пълнота ще допълня Андрю с проверка на валидността на ЕГН-то.
TestStrDigits си я напиши сам (проверява броя и дали са цифри символите в стринга)


{}function EGN_Check(const EGN: string): boolean;
var
w: word;
begin
Result:=false;
if TestStrDigits(EGN,10,10) then begin
w := 2*StrToInt(EGN[1]) + 4*StrToInt(EGN[2]) + 8*StrToInt(EGN[3]) +
5*StrToInt(EGN[4]) + 10*StrToInt(EGN[5]) + 9*StrToInt(EGN[6]) +
7*StrToInt(EGN[7]) + 3*StrToInt(EGN[8]) + 6*StrToInt(EGN[9]);
Result:=((w mod 11) mod 10)=StrToInt(EGN[10]);
end;
end;





Всички темиСледваща тема*Кратък преглед
Клуб :  


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

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