Words of Wisdom Digital Clock – Download Kode Programnya


wowclockn1 Words of Wisdom Clock, judulnya memang sedikit gaya, tapi semoga produknya pun mampu mendukung gaya Si Judul. Sebenarnya, Words of Wisdom Clock tak lain hanyalah sebuah program jam digital yang secara programming sangatlah sederhana. Program hanya menampilkan jam digital dan sebuah bitmap image berisikan pesan-pesan bijak atau motivator pada layar desktop.

Tujuan dari program ini tak lain adalah untuk memberikan motivasi bagi saya (khususnya), karena saya ini termasuk orang yang moody banget, jadi kalau tidak terus-menerus dimotivasi dan diingatkan, maka mudah sekali konsentrasi dan konsistensi diri ini tergoyahkan, bahkan oleh hal-hal yang sepele.😦

Tapi dengan adanya program sederhana ini, maka dapat sedikit membantu saya untuk tetap fokus dalam belajar dan bekerja dengan menjadi efektif dan efisien.

Program Words Of Wisdom saya buat dengan kompatibilitas yang cukup baik sehingga dapat berjalan dengan baik pada Windows 98, Windows 2000, Windows XP, dan Windows 7, namun belum dicoba pada Windows Vista dan Windows 8.

Program ini saya buat menggunakan Pelles C, sebuah kompiler bahasa C gratis untuk platform Windows. Pada versi perdana ini tersedia 10 bitmap image yang dapat ditampilkan. Berikut adalah tampilan dari kesepuluh bitmap image tersebut.

image image image image image

image image image image image

Bagaimana? Cukup bagus, bukan?😀

Untuk mengubah image dapat dilakukan dengan 2 cara. Cara yang pertama adalah dengan menggunakan tombol angka 0-10 pada keyboard, sedangkan cara kedua menggunakan popup menu yang bisa diakses dengan klik kanan mouse.

Sederhana dan sangat cocok untuk PEMULA yang sedang mempelajari pemrograman C pada sistem operasi Windows.

Dan sebagai unsur hiburan, program akan membunyikan bel (file teng.wav) setiap 10 menit sekali. Setidaknya interval itu cukup untuk lama untuk memberikan sinyal audible kepada kita agar senantiasa fokus pada pekerjaan.

Bagaimana dengan alarm? Belum. Saya belum memberikan fasilitas alarm pada program versi pertama ini. Rencananya alarm akan saya tambahkan pada program versi kedua dengan tambahan gambar bitmap yang lebih banyak yang dikelompokkan menjadi beberapa tema.

Namun demikian, Anda bisa menambahkan sendiri fitur-fitur yang Anda inginkan dengan memodifikasi kode programnya karena program Words Of Wisdom saya berikan secara gratis untuk dipelajari dan dikembangkan.

Nah, selanjutnya saya akan membahas secara singkat mengenai bagian-bagian pokok program.

TIMER
Sebagai pewaktu program menggunakan TIMER Windows yang diciptakan menggunakan fungsi SetTimer() sebagai berikut:

//Inisialisasi Timer ketika window diciptakan
case WM_CREATE:
uTimer = SetTimer(hwnd, ID_TIMER, 1000, NULL);
if (uTimer==0)
{
MessageBox(hwnd, "Timer gagal diciptakan!", "Timer Error", MB_ICONERROR);
exit(1);
}

TIMER akan mengirimkan message WM_TIMER setiap interval 1 detik kepada window program. Program yang meng-handle event WM_TIMER bertugas meng-update tampilan jam digital sesuai dengan clock CPU. Berikut adalah kode programnya.

//update tampilan jam digital setiap 1 detik
case WM_TIMER:
_strtime( timeStr );
rc.left = 0; rc.top = 101; rc.right = 102; rc.bottom = 121;
hdc = GetDC(hwnd);
SetTextColor(hdc, RGB(255, 255, 0));
SetBkColor(hdc, RGB(25,25,25));
DrawText(hdc, timeStr, 8, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
ReleaseDC(hwnd, hdc);

m1 = timeStr[3];

if (m1!=m2)
{
PlaySound("teng.wav", 0, SND_ASYNC);
m2 = m1;
}
break;

Event-Handler di atas berfungsi mengambil data clock terkini dan menampilkannya pada bagian bawah window program Words Of Wisdom Clock. Rutin tersebut juga melakukan pengecekan pada digit puluhan menit. Jika terjadi perubahan digit puluhan menit, maka program akan membunyikan file teng.wav dengan fungsi multimedia sndPlaySound(). Oleh karenanya proyek ini harus dikompilasi dengan mengikutsertakan library winmm.lib.

WM_NCLBUTTONDOWN dan HTCAPTION
Window program dapat dipindah-pindah lokasinya dengan cara biasa yakni dengan meng-click window program dan drag, kemudian drop.

Namun untuk keperluan itu, diperlukan trik khusus karena window program Words Of Wisdom Clock tidak memiliki CAPTION. Oleh karenanya, ketika tombol kiri mouse di klik di window program maka window akan menerima message WM_LBUTTONDOWN dan bukan WM_NCLBUTTONDOWN. Jadi, triknya adalah dengan mengirimkan message WM_NCLBUTTONDOWN setiap kali muncul event Left-Button-Down dengan kode program sebagai berikut:

//handler ketika Tombol Kiri Mouse ditekan
case WM_LBUTTONDOWN:
SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, lParam);
break;

Dengan demikian, kita bisa memindahkan lokasi window program dengan cara biasa yakni click-and-drag-and-drop.

MEMBACA TOMBOL YANG DITEKAN USER
Ketika window sedang get focused, maka window akan menerima message WM_CHAR ketika user menekan tombol pada keyboard. Event penekanan tombol ini digunakan untuk fitur penggantian gambar bitmap secara sederhana yakni dengan mendeteksi penekanan tombol angka 0-9.

Berikut adalah kode programnya.

//handler ketika user menekan tombol keyboard ketika window aktif (get focus)
case WM_CHAR:
if (wParam==27) //ESC= Exit
{
KillTimer(hwnd, ID_TIMER);
DestroyMenu(hPopupMenu);
PostQuitMessage(0);
}
else if (wParam>=48 && wParam<=57) //tombol angka 0-9
{
ImageIndex = wParam-48;
ChangeBitmap(imagestr[ImageIndex]);
}
break;

User dapat menekan tombol ESC untuk keluar dari program. Jika user menekan tombol angka 0-9, maka program akan memanggil fungsi ChangeBitmap() dengan nama file bitmap yang sesuai dengan index yang aktif.

static char *imagestr[10] = {"clock.bmp", "clock1.bmp", "clock2.bmp", "clock3.bmp", "clock4.bmp", "clock5.bmp", "clock6.bmp", "clock7.bmp", "clock8.bmp", "clock9.bmp"};

 

//Fungsi ganti gambar bitmap
void ChangeBitmap(char *bitmap)
{
if (image!=NULL) DeleteObject(image);
image = (HBITMAP)LoadImage(0, bitmap, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if (image)
SendMessage(imagewnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)image);
else
MessageBox(hwnd, "File bitmap tidak ditemukan!", bitmap, MB_ICONERROR);
}

Cukup mudah, bukan? Dan saya merasa yakin kalau tulisan ini akan cocok bagi Anda yang sedang belajar pemrograman C pada Windows, khususnya jika Anda pengguna Pelles C seperti saya.

POPUP MENU
wowclockn2 Popup menu akan ditampilkan jika user meng-klik kanan mouse pada window program seperti ditunjukkan oleh gambar disamping ini.

Terdapat menu About untuk menampilkan dialog About, menu Next Image untuk menampilkan gambar bitmap selanjutnya, menu Prev Image untuk menampilkan gambar bitmap selanjutnya, dan menu Exit untuk keluar dari program.

Untuk menampilkan popup menu, program menciptakan popup menu menggunakan fungsi CreatePopupMenu() dan menampilkannya pada posisi di bawah window program ketika window program menerima message WM_RBUTTONDOWN. Berikut adalah kode programnya.

//Create Popup Menu
hPopupMenu = CreatePopupMenu();
InsertMenu(hPopupMenu, 0, MF_BYPOSITION | MF_STRING, ID_ABOUT, "About");
InsertMenu(hPopupMenu, 1, MF_BYPOSITION | MF_STRING, ID_NEXTIMAGE, "Next Image");
InsertMenu(hPopupMenu, 2, MF_BYPOSITION | MF_STRING, ID_PREVIMAGE, "Prev Image");
InsertMenu(hPopupMenu, 3, MF_BYPOSITION | MF_STRING, 0, NULL);
InsertMenu(hPopupMenu, 4, MF_BYPOSITION | MF_STRING, ID_EXIT, "&Exit");

Masing-masing menu memiliki ID yang telah didefinisikan sebelumnya sebagai berikut:

#define ID_ABOUT        4001
#define ID_NEXTIMAGE    4002
#define ID_PREVIMAGE    4003
#define ID_EXIT            4004

Ketika user meng-klik kanan mouse maka program akan menerima message WM_RBUTTONDOWN dan menampilkan popup menu di bawah window program. Berikut adalah kode programnya.

//handler ketika Tombol Kanan Mouse ditekan
case WM_RBUTTONDOWN:
GetWindowRect(hwnd, &wrc);
SetForegroundWindow(hwnd);
TrackPopupMenu(hPopupMenu, TPM_TOPALIGN | TPM_LEFTALIGN, wrc.left, wrc.bottom, 0, hwnd, NULL);
break;

Apabila user memilih salah satu menu dari popup menu tersebut, maka Windows akan mengirimkan message WM_COMMAND pada window program. Berikut adalah kode program yang menyeleksi parameter COMMAND_ID yang menyatakan menu mana yang telah dipilih oleh user.

//handler popup menu
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case ID_ABOUT:
MessageBox(hwnd, about, "About", MB_ICONINFORMATION);
break;

case ID_NEXTIMAGE:
if (ImageIndex<9)
ImageIndex++;
else
ImageIndex = 0;
ChangeBitmap(imagestr[ImageIndex]);
break;

case ID_PREVIMAGE:
if (ImageIndex>0)
ImageIndex--;
else
ImageIndex = 9;
ChangeBitmap(imagestr[ImageIndex]);
break;

case ID_EXIT:
KillTimer(hwnd, ID_TIMER);
PostQuitMessage(0);
break;
}
break;

That’s it!😀

Itulah sedikit pembahasan mengenai kode program Words Of Wisdom Clock. Semoga bermanfaat dan nantikan versi selanjutnya dari program ini, tentunya dengan penambahan fitur-fitur yang lebih berguna dan menarik.

Catatan:
Teknik pemrograman yang diterapkan pada program ini bukanlah teknik yang terbaik, tapi semoga bisa memberikan manfaat bagi para pemula pemrograman Pelles C. Untuk itu mohon kritik dan saran perbaikannnya.

Untuk mengetahui kode program selengkapnya, project Pelles C Words Of Wisdom Clock dapat Anda download menggunakan link berikut ini:

WisdomClock.rar
(~118KB)

Selamat belajar dan selamat berkarya!

😀

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 )

Gambar Twitter

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

Foto Facebook

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

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s