Hacking TDBGrid-nya Delphi (Highlighting Mouse Pointer)

Setelah diutak-atik dan dibongkar-bongkar, ternyata TDBGrid (mungkin termasuk juga Grid yang lain seperti StringGrid, tapi belum saya coba) pada Delphi bisa kita kustomisasi sendiri. Meskipun beberapa property pada TDBGrid banyak yang dikunci (tidak bisa diedit pada design time, tapi masih bisa kita kustomisasi pada saat run-time dengan membuat inheritance dari komponen itu sendiri. Sebagai contoh, akan saya beberkan sedikit kode untuk membuat highlight baris data di TDbGrid saat mouse melewati tiap-tiap baris dari TDBGrid itu sendiri. Berikut adalah langkah-langkah yang perlu dilakukan untuk membuat highlight mouse pada row:

* Buka Delphi, buat sebuah Project baru

* Letakkan sebuah DBGrid (TDBGrid) pada form, lalu koneksikan dengan database yang diperlukan (maaf, saya tidak akan membahas bagaimana caranya mengkoneksikan database pada artikel ini, mungkin pada artikel yang lainnya nanti). Secara otomatis DBGrid yang kita letakkan akan bernama DBGrid1.

* Tekan F12 atau klik ganda pada form untuk masuk ke code editor. Arahkan kursor ke atas, buat alinea baru tepat dibawah kata kunci type. Kemudian deklarasikan sebuah class baru sebagai bentuk inheritance dari DBGrid seperti ini:

THackingGrid = class(TDBGrid);

* Arahkan kursor pada bagian deklarasi private dan public.
* Tepat dibawah deklarasi private, sebelum public tambahkan deklarasi variabel, procedure dan property baru seperti ini:

fMouseOver: Integer;
procedure SetMouseOver(const Value: Integer);
property MouseOver: integer read fMouseOver write SetMouseOver;

* Arahkan kursor ke bagian implementation (dibawah kata kunci implementation), buat procedure SetMouseOver yang sudah dideklarasikan sebelumnya, menjadi seperti ini:

procedure TForm1.SetMouseOver(const Value: Integer);
begin
if fMouseOver <> Value then
begin
fMouseOver:= Value;
DBGrid1.Repaint;
end;
end;

* Pilih (klik pada) DBGrid1, kemudian pada ObjectInspector (terdapat menu Properties dan Events yang berkaitan dengan object yang kita pilih) pilih menu events dan arahkan pada menu OnMouseMove.

* Klik ganda menu OnMouseMove sehingga code editor akan mengantar kita bada kerangka kode event tersebut. Tepat diatas kata kunci begin (buat alinea baru jika tidak terdapat space), deklarasikan variabel baru tepat seperti ini:
var
point: TGridCoord;

* Kemudian masuk ke dalam event tersebut (tepat dibawah kata kunci begin) ketikkan kode seperti berikut:

point:= DbGrid1.MouseCoord(x, y);
MouseOver:= point.Y;

* Sekarang semuanya sudah hampir selesai, yang terakhir harus dilakukan adalah membuat koding yang terkait pada event untuk membuat highlighting baris data pada saat mouse melewati baris data DBGrid1. Untuk menyelesaikan tujuan itu, kembali ke Object Inspector, arahkan pada events OnDrawColumnCell lalu klik ganda hingga kerangka events terbuka pada code editor. Ketikkan kode seperti ini, tepat dibawah kata kunci begin:


if not ((gdFocused in State) or (gdSelected in State)) and (MouseOver = 1 + THackingGrid(DBGrid1).DataLink.ActiveRecord)then
begin
with DBGrid1.Canvas do 
begin 
Brush.Color:= clSilver; 
Font.Color:= clNavy; 
end; 
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
* Tekan F9 atau pilih menu Run>Run, atau klik icon Run untuk menjalankan aplikasi yang baru kita buat.

* Jika tidak ada kesalahan pada pengetikan maupun penempatan kode, DBGrid1 yang kita buat membuat events Highlight baris pada saat Mouse melewati baris tersebut.

Komentar