Imam nesto JAKO STARO-sto sam ranije koristio za proveru broja dana koriscenja nekog programa.
Ne odnosi se direktno na promenu sati, minuta i sekundi.Moze da posluzi.Aplikacija se postavlja u StartUp. Zbog "malo vece sigurnosti" vrednosti iz tabele mozes upisati u registri (ili na neko drugo po tebi sigurno mesto)a odatle ih ponovo ucitati u tabelu pri startovanju forme-neupuceniji korisnici tesko ce ukapirati odakle stizu podaci. Broj dana se lako pretvara u broj meseci i godina (potrebni su ti dbedit1, edit1,edit2, ,label10,label11,label12,label4,tabela i source...I SIGURNO JOS PO NESTO STO VEROVATNO NISAM PRIMETIO)
Kod se moze lako korigovati
procedure TForm1.FormActivate(Sender: TObject);
var d,m,g,dd,dm,dg:tdatetime;
sd,sm,sg,sdd,sdm,sdg:string;//razdvojeni datumi po danu,mesecu,godini
id,im,ig,idd,idm,idg:integer;
razd,razm,razg,Md,Mp,i,Brd:integer;/razlika u danima,mesecima,godinama...
var Mdanas: array [1..12] of integer;
Mpre: array [1..12] of integer;
begin
edit2.text:=datetostr(date);//EDIT2 PREUZIMA DANASNJI DATUM
if not DirectoryExists('D:\Delphi') then
Begin
CreateDir('D:\Delphi')
end;
if not Session.IsAlias('VREMEDAT') then
begin//ako ne postoji alias
if not DirectoryExists('D:\Delphi\VREMEDAT') then
Begin//*******
CreateDir('D:\Delphi\VREMEDAT');
with Session do
begin
AddStandardAlias('VREMEDAT', 'D:\Delphi\VREMEDAT','paradox');//kreiranje aliasa
SaveConfigFile;
end;
End;//*******
//kreiranje tabele
TABLE1:=TTABLE.CREATE(SELF);
Table1.DatabaseName:='VREMEDAT';
TABLE1.TABLENAME:='DAT.DB';
table1.FieldDefs.Add('Dat',ftstring,11,False);//poslednji datum
table1.FieldDefs.Add('DoS',ftinteger);//koliko do sada dana
Table1.CreateTable;
end;//zavrseno-ako ne postoji alias
//aktiviranje tabele table1.databasename:='VREMEDAT';
Table1.DatabaseName:='VREMEDAT';
TABLE1.TABLENAME:='DAT.DB';
datasource1.dataset:=table1;
Table1.active:=true;
//ODAVDE--------------------------------------------------------------------
LABEL4.CAPTION:=inttostr(TABLE1.FIELDBYNAME('DoS').asinteger);//POKAZUJE KOLIKO DANA DO SADA
If table1.recordcount<1 then Table1.append Else table1.edit;
//povezivanje dbedita1 sa tabelom1
dbedit1.datasource:=datasource1;
dbedit1.datafield:='Dat';
if dbedit1.text='' then
begin
table1.edit;
table1.fieldbyname('Dat').asstring:=datetostr(date);
end;
table1.edit;
table1.Post;
//AKO JE DANASNJI DATUM <OD PRETHODNO UPISANOG (DAKLE AKO JE DATUM VRACEN ZA NEKOLIKO DANA)
IF STRTODATE(EDIT2.TEXT)<STRTODATE(DBEDIT1.TEXT) THEN
BEGIN
TABLE1.EDIT;
TABLE1.FIELDBYNAME('Dat').asstring:=EDIT2.TEXT;//preuzmi sadasnji datum
label12.caption:='1'; //POVECAJ BROJ DANA ZA 1 (UVEK)
table1.fieldbyname('DoS').asinteger:=table1.fieldbyname('DoS').asinteger+1;//DoS-Do sada dana
END
ELSE
BEGIN
//za danasnji datum
Mdanas[1]:=31;
Mdanas[2]:=28;
Mdanas[3]:=31;
Mdanas[4]:=30;
Mdanas[5]:=31;
Mdanas[6]:=30;
Mdanas[7]:=31;
Mdanas[8]:=31;
Mdanas[9]:=30;
Mdanas[10]:=31;
Mdanas[11]:=30;
Mdanas[12]:=31;
//za uneti datum
Mpre[1]:=31;
Mpre[2]:=28;
Mpre[3]:=31;
Mpre[4]:=30;
Mpre[5]:=31;
Mpre[6]:=30;
Mpre[7]:=31;
Mpre[8]:=31;
Mpre[9]:=30;
Mpre[10]:=31;
Mpre[11]:=30;
Mpre[12]:=31;
//za uneti datum
sd:=edit1.text[1]+edit1.text[2];//stringovi
sm:=edit1.text[4]+edit1.text[5];
sg:=edit1.text[7]+edit1.text[8]+edit1.text[9]+edit1.text[10];;
id:=strtoint(sd);
im:=strtoint(sm);
ig:=strtoint(sg);
//za danasnji datum
sdd:=edit2.text[1]+edit2.text[2];//stringovi
sdm:=edit2.text[4]+edit2.text[5];
sdg:=edit2.text[7]+edit2.text[8]+edit2.text[9]+edit2.text[10];;
idd:=strtoint(sdd);
idm:=strtoint(sdm);
idg:=strtoint(sdg);
Md:=0;
Mp:=0;
razg:=idg-ig;
if razg>=1 then
begin/////////
IF IDM=12 THEN Md:=31-idm+1 else
BEGIN
for i:=1 to idm-1 do //ZA DANAS-od pocetka meseca do sad
begin
if i=2 then
begin
if idg mod 4 = 0 then Md:=Md+29 else Md:=Md+Mdanas
;
end
else
begin
Md:=Md+Mdanas;
end;
end;
Md:=Md+idd;
END;
label10.caption:=inttostr(Md);
IF IM=12 THEN Mp:=31-id+1 else
BEGIN
for i:=im+1 to 12 do //ZA BROJ DANA PO MESECIMA DO KRAJA PREDHODNE GODINE
begin
if i=2 then
begin
if ig mod 4 = 0 then Mp:=Mp+29 else Mp:=Mp+Mpre;
end
else
begin
Mp:=Mp+Mpre;
end;
end;
Mp:=Mp+Mpre[im]-id+1;
END;
label11.caption:=inttostr(Mp);
Brd:=Mp+Md+(razg-1)*365;
label12.caption:=inttostr(Brd);
end/////////ako je razlika =1
else
begin///ako je razlika=0 ili <1
if razg=0 then
begin
IF IM=IDM THEN
BEGIN
Brd:=idd-id+1;
label12.caption:=inttostr(Brd);
END
ELSE
BEGIN
IF IDM=IM+1 THEN
BEGIN
Brd:=idd+Mpre[im]-id+1;
label12.caption:=inttostr(Brd);
END
ELSE
BEGIN
for i:=Im+1 to idm-1 do //od meseca do meseca (ne racunajuci dane u pocetnom i dane u krajnjem)
begin
if i=2 then
begin
if idg mod 4 = 0 then Md:=Md+29 else Md:=Md+Mdanas;
end
else
begin
Md:=Md+Mdanas;
end;
end;
label10.caption:=inttostr(Md+idd);
label11.caption:=inttostr(Mpre[im]-id);
Brd:=Md+idd+Mpre[im]-id+1;
label12.caption:=inttostr(Brd);//Brd je broj dana
END;
END;
end
else
begin//ako je razlika>1
////MOZES KORISTITI ZA NESTO
end;
end
END;
table1.Edit;
IF DATE>STRTODATE(DBEDIT1.TEXT) THEN
table1.fieldbyname('DoS').asinteger:=table1.fieldbyname('DoS').asinteger+strtoint(label12.caption)-1;
table1.fieldbyname('Dat').asstring:=datetostr(date);
table1.edit;
table1.post;
TABLE1.REFRESH;
close;
end;
Inace ako ti znaci nesto moje misljenje: Savkic-evo resenje je ubedljivo naj naj najbolje
Poz
Milan
[Ovu poruku je menjao milanescape dana 28.01.2007. u 15:52 GMT+1]
[Ovu poruku je menjao milanescape dana 28.01.2007. u 15:57 GMT+1]
MV