DBGrid, Gün Hesaplaması ve Listbox
Hancet20.07.2005 - 16:29:56
S.A.
merhaba arkadaşlar
ben doğum tarihi hatırlatan program yapmak istiyorum

Sizlere iki tane sorum olacak.

aşağıdaki kodları kullanarak içinde bulunduğumuz ayda doğan kayıtlı kullanıcıların doğum günlerine kaç gün kaldığını net olarak buluyor ama bu ay içinde değil ise net olarak kaç gün kaldığını bulamıyor. Çünkü ayların 30,31 çekme sorunu var. bunu nasıl yapabileceğime dair yardım ederseniz sevinirim.

var
gun,ay,tarih:string;
begin
tarih:=datetostr(date);
gun:=copy(tarih,1,2);
ay:=copy(tarih,4,2);
table1.edit;
if strtoint(Table1ay.asstring)-strtoint(ay)<0 then table1kalan.asstring:=inttostr((strtoint(table1ay.asstring)-strtoint(ay)+12)*30);
if strtoint(table1ay.AsString)-strtoint(ay)>0 then table1kalan.asstring:=inttostr((strtoint(table1ay.asstring)-strtoint(ay))*30);
if strtoint(table1ay.asstring)-strtoint(ay)=0 then
begin
if strtoint(table1gun.asstring)-strtoint(gun)<0 then table1kalan.asstring:=inttostr(strtoint(table1gun.asstring)-strtoint(gun)+365);
if strtoint(table1gun.asstring)-strtoint(gun)>0 then table1kalan.asstring:=inttostr(strtoint(table1gun.asstring)-strtoint(gun));
if strtoint(table1gun.asstring)-strtoint(gun)=0 then table1kalan.asstring:='0';
end;
end;

2. sorum kalan gün'e göre indexleme yaptığım zaman doğum günü en yakın olan kişi en üstte oluyor(DBGrid için). ben doğum tarihine 3 gün kalanların kırmızı renkte 15 gün kalanların sarı renkte 30 gün kalanların ise yeşil renkte olmasını istiyorum bunu nasıl yaparım. Yani renkli bi dbgrid

Bide bunları grid kullanmadan direk indexli ve renkli bir şekilde listbox'a aktarabilirmiyim?
 
aslangeri21.07.2005 - 09:26:05
s.a.
vatandaşın doğum tarihinden bugünü çıkardığın zaman sana zaten kaç gün kaldığını vermesi lazım. ay 30 çekmiş 31 çekmiş önemli değil.
gridi renklendirme kodları sitede var. sadece koşulu değiştireceksin.
ondada gene tarihleri birbirinden çıkart işlem tamam.

hatta senin yerinde olsam aradaki günü bulan bi function yazarım her yerde onu kullanırım.

Not: bu işlemi ben düşündüğüme göre borlanddaki herifler hayli hayli düşünmüştür. DateUtils unitini bi incele orda bu işlemi yapan bi function olması lazım.


funcion gunfarkinibul(t1,t2:TDate):integer;
begin
result:=t1-t2;//tabi normalde burda bi takım kontroller yapılması gerekiyor
end;


kolay gelsin.
 
Hancet22.07.2005 - 20:01:28
S.A.
Abdullah abi vatandaşın doğum tarihinden bugünün tarihini nasıl çıkaracağım tam olarak anlamadım. Mesela 02.07.1988 arkadaşın doğum tarihi diyelim çıkarma işlemi nasıl olacak. Sonra çıkarma yapınca bana gün olarak nasıl verecek?
Daha açık bilgi verirsen sevinirim.
Kolay Gelsin
 
aslangeri22.07.2005 - 20:23:57
a.s.
vatandaşın doğum tarihini bi tabloda tuttuğunu varsayıyorum.
kalangun integer tipinde bir calc alan ekliyorsun tabloya
oncalcfieldsolayında aşağıdakinebenzer bir kod yazıyorsun

procedure xxxoncalcfield;
var
dt:TDATE;//dt=doğumtarihi
begin
dt:=dataset.fiedlbyname('DOGUMTARIHI').asdatetime;
dataset['KALANGUN']:=gunfarkinibul(dt,date);
end;

dbgride kalangun alanınıda ekle
indexini (yada siralamani orderby) doğumtarihine göre sıralat.

kolay gelsin.
 
Hancet23.07.2005 - 09:49:41
s.a.
Program olacak gibi teşekkür ederim


funcion gunfarkinibul(t1,t2:TDate):integer;
begin
result:=t1-t2;//tabi normalde burda bi takım kontroller yapılması gerekiyor
end;


kontroller derken benim yazdığım kullandığım kodlar gibi mi kontrol yapılacak yoksa farklı bir yöntem veya kod mu kullanacağız
 
aslangeri23.07.2005 - 16:00:00
demek istediğin gelen parametreler,
girilen değerler gerçektende tarihmi gibisinden kontroller.
kolay gelsin.
 
Hancet25.07.2005 - 14:33:53
Abdullah abi yazdıklarını denedim ama bi sonuca ulaşamadım maalesef :(
Allah razı olsun bi hocam yardım etti aşağıdaki kodları kullanarak programı bitirdim. :)

function TForm1.Hesapla(DogumTarihi:TDate):Extended;
var
tarih1,tarih2:tdate;
Year1,Month1,Day1,Year2,Month2,Day2:Word;
begin
tarih1:=Date;
tarih2:=DogumTarihi;
DecodeDate(Tarih1,Year1,Month1,Day1);
DecodeDate(Tarih2,Year2,Month2,Day2);
Tarih2:=EncodeDate(Year1,Month2,Day2);
if Tarih2<Tarih1 then Tarih2:=EncodeDate(Year1+1,Month2,Day2)
else Tarih2:=EncodeDate(Year1,Month2,Day2);
Result:=(Floor(Tarih2-Tarih1));
end;



procedure TForm1.Table1AfterOpen(DataSet: TDataSet);
var
tar:Tdate;
begin
Table1.First;
while not Table1.Eof do
begin
if not Table1Yil.IsNull and not Table1Ay.IsNull and not Table1Gun.IsNull then
begin
Table1.Edit;
tar:=EncodeDate(Table1Yil.AsInteger,Table1Ay.AsInteger,Table1Gun.asInteger);
Table1Kalan.Value:=Floor(Hesapla(tar));
end;
Table1.Next;
end;
end;



Ama ilgilendiğin için sağol yinede , Allah razı olsun.
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com