Calender

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Calender

Mesaj gönderen Fatih! »

Calender Bileşenini Formuna ekleyin calender bileşeninin ID Değerini MyCalender yapın. Yine C# ta görüp Delphide görmediğim hazır şablonlardan bahsederek başlayayım.
Tabii ki kendi şablonlarımızı kendimizde oluşturabiliriz. Bunun için Object Inspector ekranında Style Categorysi altındaki bulunan nesnemize ait DayHeaderStyle, DayStyle, NextPrevStyle, OtherMonthDayStyle, SelectedDayStyle, SelectorStyle, TitleStyle, TodayStyle ve WeekendDayStyle propertylerini kullanmaktaktayız. Bu propertylerin ne anlama geldiği isminden az çok anlaşılsa bile aşağıdaki resim sanırım olayı daha iyi kavramanızı sağlayacaktır.
Resim
Diğer Görünüş Özellikleri
Yine nesnemize ait Object inpector ekranında Appearance kategorisi altında bulunan bazı özellikler aracılığıyla takvimimizin görselliğini değiştirme şansımız bulunmaktadır.

DayNameFormat : Takvimin üst kısmında bulunan haftanın günlerinin görünüş biçimlerini, full=tam, Short=kısa, FirstLetter=ilk harf veya FirstTwoLetters=ilk iki harf olmak üzere ayarlayabileceğimiz özellik.

FirstDayOfWeek : Takvimde haftanın ilk gününü seçmemizi sağlayan özellik

NextMonthText : Bir sonraki aya geçmek için kullanılacak olan linkin nasıl bir işaretle belirtilmesi gerektiğini seçmemizi sağlayan özellik

NextPrevFormat : Bir sonraki veya önceki aya geçmek için kullanılacak olan linkin formatını belirlememizi sağlayan özellik

PrevMonthText : Bir önceki aya geçmek için kullanılacak olan linkin nasıl bir işaretle belirtilmesi gerektiğini seçmemizi sağlayan özellik

SelectMonthText : Takvim üzerinde bir ayı seçmemize yarayan linkin nasıl bir işaretle belirtilmesi gerektiğini seçmemizi sağlayan özellik

SelectWeekText : Takvim üzerinde bir haftayı seçmemize yarayan linkin nasıl bir işaretle belirtilmesi gerektiğini seçmemizi sağlayan özellik

SelectDayHeader : Haftanın günlerinin gösterilip gösterilmeyeceğini belirleyebildiğimiz özellik

ShowGridLines : Takvim üzerindeki gridlerin gözüküp gözükmeyeceğini belirleyebildiğimiz özellik

ShowNextPrevMonth : Takvim üzerinde bir sonraki veya önceki aya geçişler için link bulunp bulunmayacağını belirleyebildiğimiz özellik

ShowTitle : Ayın isminin vs. bulunduğu en üstteki başlığın gösterilip gösterilmeyeceğini belirleyebildiğimiz özellik

TitleFormat : Ayın isminin vs. bulunduğu en üstteki başlıkta gösterilecek olan verilerin hangi formatta gösterilmesi gerektiğini seçebildiğimiz özellik


Behavior kategorisi altında bulunan;
SelectionMode : Takvim nesnemizde seçilecek olan alanların, (sadece gün, hafta veya ay) belirlenmesini sağlayan özellik;


Diğer iki önemli özellik ise;
VisibleDate : Takvimin ekrana ilk geldiği anda gösterilmesini istediğiniz tarihi girebileceğiniz özellik. genelde bu değerin içinde bulunduğunuz gün olmasını istersiniz. Zaten bu değeri boş bırakırsanız default olarak bu ayarlanmaktadır, eğer değişitirirseniz, içersine girdiğiniz tarihe ait ilk ekran gelecektir.

SelectedDate : Takvim üzerinde bir günün seçili olmasını isterseniz, bu özellik aracılığıyla bunu yapabilirsiniz. genellikle etkin calendar kullanımda bu işlem kod aşamasında yapılacağı için, design aşamasında pek kullanmayacağınız bir özellik.


Eventların Etkin Kullanımı
Nesnemizin görsel tüm özelliklerini inceledikten sonra esas can alıcı nokta olan eventları incelemye geldi sıra. Az önce saymış olduğumuz tüm özellikler kod aşamasında da değiştirilebilmektedir. mesela takvim üzerinde haftanın günlerinin gösterilip gösterilmeyeceğini design aşamasında özellikler penceresi üzerinden seçebileceğimiz gibi aşağıdaki kod sayesinde bu özelliğe ulaşabilmekteyiz.

Kod: Tümünü seç

myCalendar.ShowDayHeader:= false;
Calendar kontrolüne ait iki önemli event bulunmaktadır, bunlardan ilki SelectionChanged diğeri ise DayRender eventıdır. Şimdi bu eventları örnek kodlamalarla inceleyelim.
SelectionChanged Event'ı
Takvim üzerinde eğer bir günün seçilmesi veya seçilen günün bir başka gün ile değiştirmesi sırasında çalışan bu event sayesinde, seçilen günün veya günlerin değerlerini alabiliriz. Buda dikkat etmeniz gereken nokta seçilecek günün birden fazla olma ihtimalidir. Yukarıda özelliklerde de bahsetmiş olduğumuz sadece gün yerine, belirli bir haftayı veya ayı da seçtirebilme şansımız var. Eğer ziyaretçimiz bir hafta seçmiş ise 7 adet değer olmamız olası olacaktır.

Şimdi ufak bir örnek yapalım, örneğimizdeki senaryoda, takvimimizin altında bulunan bir label'a ziyaretçimizin seçmiş olduğu gün sayısını ve seçmiş olduğu günleri yazdıralım.

Kod: Tümünü seç

procedure TWebForm1.MyCalendar_SelectionChanged(sender: System.Object; e: System.EventArgs);
Var
i:integer;
begin
   lblMesaj.Text := 'Toplam '+myCalendar.SelectedDates.Count.ToString()+' gün seçtiniz.';
   lblMesaj.Text := lblMesaj.Text+'<br>Seçtiğiniz Günler:<br>';
   for i:=0 to myCalendar.SelectedDates.Count-1 Do
   lblMesaj.Text:= lblMesaj.Text+myCalendar.SelectedDates[i].ToShortDateString()+'<br>';
end;
buradaki <br> tagı Enteri Temsil Ediyor. Seçilen Tarihler SelectedDates özelliğine aktarılır.
Seçilen günleri bu şekilde alabiliyoruz, peki takvim açılır açılmaz, bazı günlerin direk olarak seçili çıkmasını istiyorsak ne yapmalıyız. Bunun için

Kod: Tümünü seç

Page_Load eventi içersinde aşağıdaki gibi bir kodlama yapabilirsiniz.
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
begin
myCalendar.SelectedDates.Add(Convert.ToDateTime('02.09.2005'));
myCalendar.SelectedDates.Add(Convert.ToDateTime('03.09.2005'));
end;
DayRender Event'ı
Bu event sayesende, takvimdeki tüm günler içersinde dolaşabiliyoruz, eventte bulunan System.Web.UI.WebControls.DayRenderEventArgs tipli “e” parametresiyle, takvimi bir tablo gibi düşünürseniz, takvime(tabloya) ait tüm hücreleri kontrol edebilmemizi sağlamaktadır.

Dediğimiz gibi, takvim içersindeki tüm günleri dolaştığı için event içersine, istediğimiz bir günü ufak bir if kontrolüyle kontrol edip, o güne ait hücre üzerinde istediğimiz değişikliği yapabilmekteyiz.

Kod: Tümünü seç

procedure TWebForm1.MyCalendar_DayRender(sender: System.Object; e: System.Web.UI.WebControls.DayRenderEventArgs);
Var
Tarih:DateTime;
begin
//hücresinde değişiklik yapılmak istenen günü belirliyoruz.
Tarih:= Convert.ToDateTime('01.09.2005');
//eğer DayRender event'ı değişiklik yapılmak istenen güne ait hücreye gelmişse
if e.Day.Date=Tarih then
//o hücre için yapılması gereken işlemler
end;
Kodlarda da açıkca belli olduğu üzere, event tüm takvimdeki günleri tararken, eğer değişiklik yapılması gereken güne ait hücreye gelmişse if bloğu içersinde yapılması gerek kodları çalıştıracaktır. Yapılması gereken işlemler kısmınai yani if bloğu içersine yazılacak olan kodlar sizin hayal gücünüzle sınırlı, istediğiniz her şeyi yaptırabilirsiniz. Ancak referans olması amacıyla, ben, aşağıda bir takım genel deşiklikler için (en çok bunlar kullanılıyordur herhalde) kod satırlarını veriyorum.
//arka plan rengini değiştirir.

Kod: Tümünü seç

e.Cell.BackColor := System.Drawing.Color.Red;
//o günü ait linki kaldırarak o günü seçilemez kılar.

Kod: Tümünü seç

e.Day.IsSelectable := false;
//o güne ait hücredeki tüm kontrolleri kaldırır

Kod: Tümünü seç

e.Cell.Controls.RemoveAt(0);
//o güne ait hücrenin arka planına seçilen resmi fon yapar

Kod: Tümünü seç

e.Cell.Attributes.Add('background','resim.jpg');
//o güne ait linkin üstüne gelinde çıkacak olan yazıyı belirler

Kod: Tümünü seç

e.Cell.Attributes.Add('title','Üstene Gelince Çıkacak Yazı');
//o güne ait hücreye text değeri 'yazı' olan yeni bir label kontolü ekler

Kod: Tümünü seç

MyLabel:=System.Web.UI.WebControls.Label.Create;
myLabel.Text := 'yazı';
e.Cell.Controls.Add(myLabel);
Örnek

Kod: Tümünü seç

Procedure TWebForm1.MyCalendar_DayRender(sender: System.Object; e: System.Web.UI.WebControls.DayRenderEventArgs);
Var
Tarih:DateTime;
MyLabel:System.Web.UI.WebControls.Label;
begin
//hücresinde değişiklik yapılmak istenen günü belirliyoruz.
Tarih:= Convert.ToDateTime('01.09.2005');
//eğer DayRender event'ı değişiklik yapılmak istenen güne ait hücreye gelmişse
if e.Day.Date=Tarih then
Begin
MyLabel:=System.Web.UI.WebControls.Label.Create;
myLabel.Text := '=Bir';
e.Cell.Controls.Add(myLabel);
end;
 end;
Cevapla