GAMBAR 1 |
sekarang bandingkan dengan TStringGrid, asli, milik Delphi dibawah ini
GAMBAR 2 |
Semua pasti setuju, gambar 2 kurang menarik. Sekarang mari kita otak-atik gambar 2 agar persis sama dengan grid buatan TMS Software pada gambar 1. Jika kita berhasil, kita bisa menghemat ongkos pembuatan software, karena grid tersebut kita program sendiri.
Langkah-Langkah Pembuatan
- Hal yang pertama-tama kita kerjakan. Ubah property DefaultDraw menjadi false. Dengan
demikian, maka tanggung jawab penggambaran object terletak pada
programmer. Sehingga tampilan menjadi seperti dibawah ini:
GAMBAR 3
Lho? Bukankah gambar 3 lebih jelek dari gambar 2? Memang! Tunggu sebentar, kita masih belum menggambar object-nya sehingga object-nya masih merana. - Kita memulai dengan mengubah warna Fixed Column grid ke warna biru. Kita mulai menulis kode program berikut di event OnDrawCell:
with stringgrid1 dobeginif gdFixed in State thenbeginCanvas.Brush.Color := $00CD934B;Canvas.Font.Color := $00000;end;Canvas.FillRect(rect);end;
dan gambarnya menjadi seperti gambar 4GAMBAR 4
- Nah!
Kenapa juga gambarnya biru semua? Kan yang kita inginkan yang
biru cuma Fixed Column, bukan semua. Itu disebabkan kita cuma
memberitahu apa yang digambar saat menjumpai Fixed Column,
sementara yang bukan Fixed Column tidak kita definisikan.Sekarang
tambahkan programnya menjadi seperti ini:
with stringgrid1 dobeginif gdFixed in State thenbeginCanvas.Brush.Color := $00CD934B;Canvas.Font.Color := $00000;
end elsebeginCanvas.Brush.Color := $FFFFFF;Canvas.Font.Color := $00000;end;Canvas.FillRect(rect);end;
GAMBAR 5 |
- Setelah warna Fixed Column selesai, tinggal tulisan. Seperti kita lihat, tulisan seperti pada gambar 2 hilang. Pada langkah 2, kita hanya menggambar background, sekarang kita menggambar tulisannya (foreground). Kita ubah kode programnya pada bagian setelah Canvas.FillRect(rect); menjadi seperti ini:
...................................
Canvas.FillRect(rect);
DrawText(Canvas.Handle, PChar(S), Length(S), Rect, DT_LEFT or DT_VCENTER or DT_SINGLELINE)
end;
Kode program diatas akan membentuk gambar grid menjadi seperti dibawah ini:
GAMBAR 6 |
Masih ada kekurangan! Judul pada Fixed Column tidak di tengah-tengah, padahal pada contoh gambar 1, tulisan ada di tengah Cell. Sekarang kita ubah kode program pada bagian DrawText menjadi seperti ini:
if ARow = 0 then
DrawText(Canvas.Handle, PChar(S), Length(S), Rect, DT_CENTER or DT_VCENTER or DT_SINGLELINE)
else
DrawText(Canvas.Handle, PChar(S), Length(S), Rect, DT_LEFT or DT_VCENTER or DT_SINGLELINE)
end;
Saat ini tulisan sudah di tengah, tetapi font tulisan masih hitam, bukan putih seperti gambar 1, maka marilah kita ubah sedikit program pada bagian gdFixed in state menjadi seperti ini:
if gdFixed in State then
begin
Canvas.Brush.Color := $00CD934B;
Canvas.Font.Color := $FFFFFF;
end else
Pada gambar 2, ada batas-batas jelas antar tiap cell, sementara grid yang kita buat tidak seperti itu. Sekarang mari kita otak-atik garis pada batas Cell. Letakkan baris kode berikut pada permulaan kode, setelah with stringgrid1 do :
with Rect do
begin
Top := Top + 1;
Left := Left + 1;
Bottom := Bottom - 1;
Right := Right - 1;
end;
grid kita menjadi seperti dibawah ini:
GAMBAR 7 |
Sebentar! masih ada kekurangan. Bagaimana pointer sorot. Masih belum dibuat. Sekarang ubah kode program setelah gdFixed in state menjadi seperti dibawah ini:
if gdFixed in State then
begin
Canvas.Brush.Color := $00CD934B;
Canvas.Font.Color := $FFFFFF;
end else
if gdSelected in State then
begin
Canvas.Brush.Color := $00E0BB8D;
Canvas.Font.Color := $000000;
end else
begin
canvas.Brush.Color := $FFFFFF;
Canvas.Font.Color := $000000;
end;
sehingga grid kita menjadi seperti dibawah ini:
GAMBAR 8 |
Gan, kok ad yg Error....
BalasHapusUndeclared Identifier:'S';
mohon pencerahannya.
definisikan dahulu S sebagai variabel bertipe string seperti ini:
Hapusvar
S: string;
Gan Yohanes,
Hapusblh minta coding n programny dak????
klo blh tlng krmkan ke email sy,
mulyadi.email@gmail.com
td sy sdh coba pke var s:string, tapi tulisanny tetap dak mncl wlaupun dak ad error.
Sangkyu.......
Ok, Thank gan,
BalasHapusSaya lagi di luar rumah. Sekarang coba lihat property DefaultDrawing punya TStringGrid. Defaultnya adalah True karena yang menggambar Komputer, karena kita menggambar sendiri, harus di set ke False
BalasHapusGan kalo string grid dibuat model form penjualan seperti di minimarket gimana ya .. ?
BalasHapusbisa diberi gambarnya, agar saya tahu maksudnya. Saya rasa cuma sekedar layout saja
Hapuskok masih tetep mas broew klu diganti property default drawing punya Tstringgrid defaultnya adalah false?mohon pencerahannya lagi
BalasHapusSebetulnya saya membuat artikel diatas dengan asumsi pembaca sudah mengenal dasar-dasar pemakaian TStringGrid, sehingga saya cuma menulis program ke tingkat lebih lanjut. Tetapi jika masih bingung, ini saya sertakan kode program lengkapnya:
BalasHapusprocedure TForm1.FormCreate(Sender: TObject);
begin
with stringgrid1 do
begin
Options := Options + [goRowSelect];
RowCount := 6;
ColCount := 3;
ColWidths[0] := 50;
ColWidths[1] := 100;
ColWidths[2] := 100;
Cells[0,0] := 'No';
Cells[1,0] := 'Kode';
Cells[2,0] := 'Pekerjaan';
Cells[0,1] := '19';
Cells[0,2] := '20';
Cells[0,3] := '21';
Cells[0,4] := '22';
Cells[0,5] := '23';
Cells[1,1] := '12000011';
Cells[1,2] := '12000012';
Cells[1,3] := '12000013';
Cells[1,4] := '12000014';
Cells[1,5] := '12000015';
Cells[2,1] := 'Sprayer';
Cells[2,2] := 'Staff HRD & Legal';
Cells[2,3] := 'Marketing Analisis';
Cells[2,4] := 'Operator';
Cells[2,5] := 'Treatment';
end;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
S: String;
begin
with stringgrid1 do
begin
with Rect do
begin
Top := Top + 1;
Left := Left + 1;
Bottom := Bottom - 1;
Right := Right - 1;
end;
if gdFixed in State then
begin
Canvas.Brush.Color := $00CD934B;
Canvas.Font.Color := $FFFFFF;
end else
if gdSelected in State then
begin
Canvas.Brush.Color := $00E0BB8D;
Canvas.Font.Color := $000000;
end else
begin
Canvas.Brush.Color := $FFFFFF;
Canvas.Font.Color := $00000;
end;
Canvas.FillRect(rect);
S := Cells[ACol, ARow];
if ARow = 0 then
DrawText(Canvas.Handle, PChar(S), Length(S), Rect, DT_CENTER or DT_VCENTER or DT_SINGLELINE)
else
DrawText(Canvas.Handle, PChar(S), Length(S), Rect, DT_LEFT or DT_VCENTER or DT_SINGLELINE)
end;
end;
terima kasih atas ilmunya
BalasHapusgan klo menghapus beberapa baris dari stringgrid..bagaimana ya codingnya...! terima kasih..
BalasHapus