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.

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;
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;
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;
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;
//arka plan rengini değiştirir.
Kod: Tümünü seç
e.Cell.BackColor := System.Drawing.Color.Red;
Kod: Tümünü seç
e.Day.IsSelectable := false;
Kod: Tümünü seç
e.Cell.Controls.RemoveAt(0);
Kod: Tümünü seç
e.Cell.Attributes.Add('background','resim.jpg');
Kod: Tümünü seç
e.Cell.Attributes.Add('title','Üstene Gelince Çıkacak Yazı');
Kod: Tümünü seç
MyLabel:=System.Web.UI.WebControls.Label.Create;
myLabel.Text := 'yazı';
e.Cell.Controls.Add(myLabel);
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;