Komponen TWishCalendar




Beberapa program yang biasa kubuat biasanya membutuhkan sebuah komponen yang menampilkan sebuah kalender. Dari kalender itu bisa dimunculkan kegiatan, jadwal piket, jadwal pelajaran, dan banyak keperluan lainnya.

Akhirnya karena cukup sering diperlukan, aku terpikir untuk membuat komponennya yang sederhana, namun bisa direuse di beberapa aplikasi. Komponen ini menampilkan tanggal suatu bulan, dalam bentuk panel-panel yang bisa menampilkan teks, bisa didouble klik, dan memicu suatu event tersendiri.

Beginilah lebih kurang tampilannya:


Object ini memiliki beberapa published property, yang bisa diatur melalui object inspector yaitu:

published
property OnDayInfoDoubleClick: TOnDayDoubleClick read FOnDayInfoDoubleClick write SetOnDayInfoDoubleClick;    
property BeforeChangeMonth: TOnChangeMonth read FBeforeChangeMonth write SetBeforeChangeMonth;    
property AfterChangeMonth: TOnChangeMonth read FAfterChangeMonth write SetAfterChangeMonth;    
property PopupMenu: TPopupMenu read FPopupMenu write SetPopupMenu;    
property SortedText: boolean read FSortedText write SetSortedText;    
property CurrentDay: TDateTime read FCurrentDay write SetCurrentDay;

Property OnDayDoubleClick akan terpicu apabila user mendouble klik text yang muncul
di dalam sebuah tanggal.


procedure TformKegiatan.WishCalendarDayInfoDoubleClick(Sender: TObject; Date: TDateTime; ItemIndex: Integer; DayInformation: TStrings);

Date menunjukkan tanggal yang sedang aktif (terpicu), ItemIndex menunjukkan indeks ke berapa teks yang didoubleklik dalam listbox.
DayInformation merupakan total teks dalam listbox tersebut.

Object yang didouble klik adalah sebuah TListBox. Hal ini untuk mempermudah pemunculan teks pada tiap tanggalnya. Event double klik hanya terpicu apabila ada sebuah teks yang disimpan. Jika TStringList kosong, event ini tidak akan terpicu.


Event BeforeChangeMonth dan AfterChangeMonth akan terpicu masing-masing ketika sebelum dan sesudah berpindah ke bulan lain. Jika kita ingin menolak perpindahan, kita bisa memanggil procedure Abort untuk mencegah perpindahan bulan.

PopupMenu bisa diassign dengan sebuah menu PopUp yang akan otomatis muncul apabila sebuah panel hari diklik kanan.

Property SortedText mengatur apakah teks yang muncul di TStringList akan disort atau tidak.

Property CurrentDay menentukan tanggal yang aktif pada suatu bulan tertentu.

public
constructorCreate(AOwner: TComponent); override; //constructor object
destructorDestroy; override; //destructor


procedureRefreshCalendarSize; //merefresh ukuran kalender
procedureRefreshCalendarContent; //merefresh isi kalender
procedureRefreshCalendar; //merefresh ukuran dan isi

    procedureSetDayColor(day: TDateTime; newColor: TColor); //mengatur warna panel hari
functionGetLastDateClicked: TDateTime; //mengembalikan tanggal terakhir yang diklik
procedureAddText(text: String; date: TDateTime); //menambah teks pada sebuah tanggal
procedureDeleteText(text: String; date: TDateTime); menghapus teks pada sebuah tanggal
functionTextExists(text: String; date: TDateTime): boolean; //memeriksa sebuah teks ada pada sebuah tanggal atau tidak
functionGetListBox(date: TDateTime): TListBox; //mengembalikan ListBox dalam sebuah tanggal
procedureClearText(date: TDateTime); //menghapus semua teks pada sebuah tanggal
procedureClearAllText; //menghapus semua teks yang muncul pada semua hari di panel yang terlihat
functionGetMinimumDate: TDateTime; //mengembalikan tanggal terkecil yang sedang tampil saat itu
functionGetMaximumDate: TDateTime; //mengembalikan tanggal terbesar yang sedang tampil saat itu 
procedureSetMonthFont(const Value: TFont); //mengganti font nama bulan di atas
procedureSetDayFont(const Value: TFont); //mengganti font setiap tanggalnya
procedureSetBorderMonthColor(const Value: TColor); //mengubah warna pembatas tiap tanggal

Objek ini masih jauh dari sempurna. Masalah yang aku hadapi adalah:

  1. Flicker. Setiap komponen ini diresize, dia akan flicker. Salah satu hal yang paling nyebelin. Please help me to get rid off this matter.
  2. Kalau komponen ini aku buat tidak menerima objek di atasnya, behaviournya rada aneh.

Biasanya yang aku lakukan di constructor:

ControlStyle := ControlStyle – [csAcceptsControls, csSetCaption] + [csOpaque];

Di komponen ini, pas design time rada jelek tampilannya. Makanya aku buang line di atas.

Anyway, komponen itu dibuat dengan banyak keterbatasan waktu dan ide. So kalau ada waktu, lagi iseng kali, bantu-bantu improve dong komponen ini. Thanx in advance. Aku sebenernya pengen beli bukunya Ray Knopka tentang making component in Delphi. Sayang di Amazon stoknya lagi habis. Nggak tahu kapan lagi ada. Kalau ada yang punya, pinjem dunk… hehehe..

Diterbitkan oleh wisnuwidiarta

Hi, my name is Wisnu Widiarta. I am a movie lover and love traveling especially camping and doing outdoor activities. Coding and problem solving in general are things I love as well.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogger menyukai ini: