Birbirini takip eden ay ve günler. Ama nasıl???

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
gamsizgani

Birbirini takip eden ay ve günler. Ama nasıl???

Mesaj gönderen gamsizgani »

Merhaba

12 taksitli satışın olduğu bir form düşün. Bu formda tarihler Edit nesnelerine yazılıyor. Edit2, Edit1'e girilen tarihten sonraki ayı ve günü verecek. Edit3 Edit2'yi aynı şekilde takip edecek. Ve diğer Editler de kendinden önceki Edit nesnesine girilen tarihi böyle takip edecek. Yani;

Edit1'e diyelim ki dışardan 31.01.2004 tarihi girildi.

Edit2.text:=Edit1.text'in (sonraki ay ve uygun gününü)
Edit3.text:=Edit2.text'in (sonraki ay ve uygun gününü)
Edit4.text:=Edit3.text'in (sonraki ay ve uygun gününü)
Edit5.text:=Edit4.text'in (sonraki ay ve uygun gününü)
Edit6.text:=Edit5.text'in (sonraki ay ve uygun gününü)
Edit7.text:=Edit6.text'in (sonraki ay ve uygun gününü)
Edit8.text:=Edit7.text'in (sonraki ay ve uygun gününü)
Edit9.text:=Edit8.text'in (sonraki ay ve uygun gününü)
Edit10.text:=Edit9.text'in (sonraki ay ve uygun gününü)
Edit11.text:=Edit10.text'in (sonraki ay ve uygun gününü)
Edit12.text:=Edit11.text'in (sonraki ay ve uygun gününü) verecek.

Ama ayın günleri ille de son gün olamayabilir. Diğer Editlerdeki tarihler Edit1'deki girilen tarihe göre şekillenecek. Edit1 aysonu olacaksa kendinden sonraki aylar da kendi ayına ait songünü verecek. Edit1 aysonu değilse diğer Editler de uygun gün ve kendinden önceki Edit'in sonraki ayını verecek.

Daha fazla dallandırıp budaklandırmayayım. İş karışmasın:)

NoT: Ama lütfen "bunu incmonht ile yap" diye kesitrme cevap verme. Bunun yerine 3-4 tane editi düşünerek kodlarla öreneklendirisen anlamak kolay olur. Ve lütfen sadece Edit nesneleri üzerinden yardımcı olursanız sevinirim. Yani Edit yerine Calender kullan falan demeyin n'olur:)

Şimdiden Teşekkür Ederim
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
gamsizgani

Mesaj gönderen gamsizgani »

Merhaba Tekrar
Benzeri bir soru sormuşum, bu yüzden özür dilerim, yeni farkettim ben de :oops:
Verilen kod istenilen sonucu vermiyor ama;
lazio yazdı:maskedit in onexit ine..

Kod: Tümünü seç

MaskEdit2.Text := DateToStr(IncMonth(StrToDate(MaskEdit1.Text)));
MaskEdit3.Text := DateToStr(IncMonth(StrToDate(MaskEdit2.Text)));
Bu kodlara göre sonuç şu oluyor;

tarih1 31.01.2004 (Manuel Girilen)
tarih2 29.02.2004
tarih3 29.03.2004
tarih4 29.04.2004
tarih5 29.05.2004
tarih6 29.06.2004
tarih7 29.07.2004
tarih8 29.08.2004
tarih9 29.09.2004
tarih10 29.10.2004
tarih11 29.11.2004
tarih12 29.12.2004

Edit1'e 31.01.2004 girdik diyelim. Edit2 istenilen sonucu veriyor. Yani 29.02.2004'yi. Ama sonraki Editler kendinden önceki Edite yazılan ayı takip ettiği gibi mesela Şubat'ın günü 29 ve ayın sonu olmasına rağmen, sonraki Edit yani Mart'ın da günü 29 oluyor ve diğer takip eden ayların günü de buna bağlı olarak 29'u döndürüyor.

benim istediğim ise; Eğer Edit1'e girilen tarihteki ayın günü son günse diğer Editler de seri ayı döndürüp buna bağlı olarak kendi aylarına ait son günü versin. Eğer Edit'e girilen ayın günü son gün değilse diğer Edit'ler de aynı gün ve sonraki ayı versin.

İlk Tarih Girişi Ay Sonu İse;

tarih1 31.01.2004 (Manuel Girilen)
tarih2 29.02.2004
tarih3 31.03.2004
tarih4 30.04.2004
tarih5 31.05.2004
tarih6 30.06.2004
tarih7 31.07.2004
tarih8 31.08.2004
tarih9 30.09.2004
tarih10 31.10.2004
tarih11 30.11.2004
tarih12 31.12.2004 Bu sonucu versin

İlk Tarih Girişi Ay Sonu DEĞİLSE;

tarih1 29.01.2004 (Manuel Girilen)
tarih2 29.02.2004
tarih3 29.03.2004
tarih4 29.04.2004
tarih5 29.05.2004
tarih6 29.06.2004
tarih7 29.07.2004
tarih8 29.08.2004
tarih9 29.09.2004
tarih10 29.10.2004
tarih11 29.11.2004
tarih12 29.12.2004 Bu sonucu versin

Yani Bütün Editlere girilen tarihler, Edit1'e girilen tarihe göre, Edit1'in Exit olayı gerçekleştiğinde birbirini takip eden seri halinde olması gerekiyor.

3-4 tane edite kod ile örnek verirseniz inanın çok mutlu olacağım.

İlgilenen Arkadaşlara Şimdiden Çok Teşekkür Ederim :roll:
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhaba,

sana kod yazma konusunda yardımcı olamayacağım çünki bu konuda hiç uğraşmadım yani bilmiyorum. Ama senin sayende biraz araştırma yaptım ve şimdi biraz uyumam lazım geceden çıktım kalkınca (kalkmak nasip olursa) bende inceleyip yapmaya çalışacağım. Araştırmada şunları buldum.

- IncMonth : Verilen tarihi, istenilen ay kadar artırır veya azaltır.
o Eğer parametre - verilirse önceki ayları döndürür. Örneğin -1 verilirse bir ay önceki tarihi döndürür.
o Eğer parametre 1 den büyük bir değer verilirse o kadar ay sonrasını döndürür.
o Eğer tarih arttırıldığı zaman verilen gün o ay içerinde yoksa, o ayın son günü döndürülür. Mesela 31/01/2002 tarihini bir ay artırırsanız şubat ayında 31. gün olmadığı için sonuç 28/02/2002 olacaktır.

IncMonth ( Date ) = 03/10/2002

- IncDay : Verilen tarihi istenilen gün kadar artırır veya azaltır. Parametre + verilirse artırır, - verilirse azaltır.

IncDay ( Date ) = 04/09/2002
IncDay ( Date, 3 ) = 06/09/2002
IncDay ( Date, -1) = 02/09/2002
http://www.delphiturkiye.com/index.php? ... tetime.htm

muhakkak usta arkadaşlarımız müsait oldukça yardımcı olacaklardır.

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Aç bi form 12 edit kutusu koy:

edit1 in onexit olayına yaz:

Kod: Tümünü seç

procedure TForm1.Edit1Exit(Sender: TObject);
const
    aylar: array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
var
    tarih:tdate;
    yil,ay,gun:word;
    ii:integer;
    artis:integer;
begin
    for ii:=2 to 12 do
    begin
        tarih:=strtodate(Tedit(findcomponent('edit'+inttostr(ii-1))).text);
        decodedate(tarih,yil,ay,gun);
        if yil mod 4 = 0 then aylar[2]:=29 else aylar[2]:=28;

        if gun = aylar[ay] then
        begin
            artis:=aylar[ay+1];
        end
        else
        begin
            if gun > aylar[ay+1] then
            begin
                artis:=aylar[ay+1];
                if gun<>aylar[ay] then artis:=artis+(aylar[ay]-gun);
                if artis>aylar[ay+1] then artis:=aylar[ay+1]+(aylar[ay]-gun);
            end
            else
            begin
                artis:=aylar[ay];
            end;
        end;

        tarih:=tarih+artis;
        //tarih:=incmonth(tarih,1); //incmonth kullanırsan yukarı satırı kapa bunu aç
        Tedit(findcomponent('edit'+inttostr(ii))).text:=datetostr(tarih);
    end;
end;

çalıştır gör.

Not: [ay+1] olacaktı. delphiden kopyalarken hata olmuş :)


Saygılar...
En son MicroChip tarafından 22 Eyl 2005 02:32 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
gamsizgani

Mesaj gönderen gamsizgani »

Onları dün gece ben de inceledim:)
gamsizgani

Mesaj gönderen gamsizgani »

Kardeş merhaba

Öncelikle ilgine teşekkür ederim. Fakat Run ederken bir türlü çalışmıyor.

Burdan itibaren hata veriyor.
aylar[2]:=29 'da takılıyor.

bir de
artis:=aylar[ bunda eksiklik yok mu?
<-------------------------------------------->

if yil mod 4 = 0 then aylar[2]:=29 else aylar[2]:=28;

if gun = aylar[ay] then
begin
artis:=aylar[
end
else
begin
if gun > aylar[ay+1] then
begin
artis:=aylar[ay+1];
if gun<>aylar[ay] then artis:=artis+(aylar[ay]-gun);
if artis>aylar[ay+1] then artis:=aylar[ay+1]+(aylar[ay]-gun);
end
else
begin
artis:=aylar[ay];
end;
end;
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

aylar[2]:=29 'da takılıyor. demişsin...

ben bunu artık yılı bulmak için kullandım sen const taki bilgileri değişemiyosun sanırım o zaman kod içinde ekleyebilirsin veya compiler ını düzenleyebilirsin (direktifleri)

e o kadarını sen yap dimi 8)

Saygılar....
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
edit2.text:=DateTimeToStr(IncMonth(StrToDateTime(edit1.Text),1));
edit3.text:=DateTimeToStr(IncMonth(StrToDateTime(edit1.Text),2));
edit4.text:=DateTimeToStr(IncMonth(StrToDateTime(edit1.Text),3));
edit5.text:=DateTimeToStr(IncMonth(StrToDateTime(edit1.Text),4));
edit6.text:=DateTimeToStr(IncMonth(StrToDateTime(edit1.Text),5));
edit7.text:=DateTimeToStr(IncMonth(StrToDateTime(edit1.Text),6));
edit8.text:=DateTimeToStr(IncMonth(StrToDateTime(edit1.Text),7));
edit9.text:=DateTimeToStr(IncMonth(StrToDateTime(edit1.Text),8));
edit10.text:=DateTimeToStr(IncMonth(StrToDateTime(edit1.Text),9));
edit11.text:=DateTimeToStr(IncMonth(StrToDateTime(edit1.Text),10));
edit12.text:=DateTimeToStr(IncMonth(StrToDateTime(edit1.Text),11));
end;
Bu işinizi görecektir.
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
gamsizgani

Mesaj gönderen gamsizgani »

Kardeş merhaba

Gerçekten çok teşekkür ederim. istediğim tam anlamıyla bu idi işte. Bu da demek oluyor ki sana çok şey borçluyum:)

ilginenen arkadaşlar teşekkürler... içim rahatladı valla. :lol:
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Artık borcu bir ara hallederiz :D. Şaka bir yana forumların amacı bu zaten. Bir şey değil, işinizi gördüyse ne mutlu.
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Re: Birbirini takip eden ay ve günler. Ama nasıl???

Mesaj gönderen MicroChip »

gamsizgani yazdı:NoT: Ama lütfen "bunu incmonht ile yap" diye kesitrme cevap verme.

dediğin için uğraştım da uğraştım sırf sen incmonth kullanma diye. Ama gel gör ki bayılmışsın :D


Saygılar...
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
gamsizgani

Mesaj gönderen gamsizgani »

yaramaz mı? belki inanmayacaksın ama Delphi6 kitabının yazarını buldum. yanına gidip ona sordum bunu o bile yapamadı. tekrar tşk ederim. faturayı adresime gönderebilirsin :lol:
gamsizgani

Mesaj gönderen gamsizgani »

MicroChip Merhaba

Neye bayılmışım anlamadım doğrusu. Yani bu konuda benden daha iyi olduğunuz ortada. EEE bu durumda iyi olanlar eksik olanlara yardım etmeli ki istekli olanlar da bir şeyler öğrensin değil mi :roll: Çabaların için gerçekten çok teşekkür ederim.

Dostlukla...
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Değişil tarz kodların olması güzel. :D

Bir programı farklı bir sürü yoldan yazabilirsin 8)


Saygılar...
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Cevapla