| FAOsoft | 02.09.2005 - 12:19:56 |
| 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. [img:9fc959a257]http://www.delphidunyasi.com/resim/Calendar1.jpg[/img:9fc959a257] 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. 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. 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 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. 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. e.Cell.BackColor := System.Drawing.Color.Red;
//o günü ait linki kaldırarak o günü seçilemez kılar. e.Day.IsSelectable := false;
//o güne ait hücredeki tüm kontrolleri kaldırır e.Cell.Controls.RemoveAt(0);
//o güne ait hücrenin arka planına seçilen resmi fon yapar e.Cell.Attributes.Add('background','resim.jpg');
//o güne ait linkin üstüne gelinde çıkacak olan yazıyı belirler 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 MyLabel:=System.Web.UI.WebControls.Label.Create;
myLabel.Text := 'yazı'; e.Cell.Controls.Add(myLabel); Örnek 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; | |