Sana bir fonksiyon hazırladım. Deneyip kendine göre geliştirirsin. Maksat mantığı anlaman.
fonksiyonların başına DateUtils koydum ki hangi fonksiyonların bu unitten destek aldığını görebilesiniz. Dilerseniz DateUtils'li ön takıları kaldırabilirsiniz bunu biliyorsunuz zaten.
Kod: Tümünü seç
USES DateUtils;
Function HaftaSonuGunler( dtTarih : TDate; boolCts, boolPaz : Boolean ) : String;
Var
dtTar : TDate;
begin
Result := '';
dtTar := INT( DateUtils.StartOfTheMonth( dtTarih ) );
while dtTar <= INT ( DateUtils.EndOfTheMonth( dtTarih ) ) do
begin
case DayOfWeek( dtTar ) of
1: if boolPaz then Result := Result + IntToStr( DateUtils.DayOf(dtTar) ) + ',';
7: if boolCts then Result := Result + IntToStr( DateUtils.DayOf(dtTar) ) + ',';
end;
dtTar := DateUtils.IncDay( dtTar );
end;
if Result <> '' then System.Delete( Result, Length(Result), 1 );
end;
Kullanımı ise şöyle
boolCts ve/veya boolPaz TRUE ise o haftanın gününe ait günleri referans tarihteki ay içerisinden bulup gösterir.
Döngüyü StartOfTheMonth ile değil de seçili tarihten başlatırsan ilgili tarihten sona kadar olan tarih için çalışır. Bu örnek tüm ayı değerlendiriyor.
Kod: Tümünü seç
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ShowMessage( HaftaSonuGunler(DateTimePicker1.Date, True, False ) ); // Sadece Cumartesi Günleri
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
ShowMessage( HaftaSonuGunler(DateTimePicker1.Date, False, True ) ); // Sadece Pazar Günşleri
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
ShowMessage( HaftaSonuGunler(DateTimePicker1.Date, True, True ) ); // Tüm hafta sonu olanlar (Cumartesi ve Pazar birlikte)
end;