Jumat, 21 Februari 2014

DELPHI - Multi Line / Banyak Baris dalam (in) TStringGrid Delphi

Hai pemirsa maaf sudah lama nih saya gak posting, hehe sibuk sih banyak kerjaan :D
Udah pada tau kan tentang TStringGrid ini?

Simplenya, StringGrid ini sama seperti DBGrid, tapi sayangnya DBGrid tidak bisa di edit kalo belum di koneksikan ke database.
StringGrid ini sama seperti DataGridView pada VB.Net

oke jadi ceritanya saya mau buat supaya dalam 1 cell di Grid, bisa 2 baris atau lebih
kyk gini nih


Penasaran? langsung aja step by stepnya yah :D

1. Letakkan TStringGrid ke dalam Form
2. Ubah properties

  • OPTIONS - GOEDITING - TRUE
  • COLCOUNT  = 5
  • FIXEDCOLS  = 0
  • FIXEDROW   = 1
3. Kemudian pada event onCreate [FORM] ketikkan kode berikut :
    StringGrid1.Cols[0].Text:='QTY';
    StringGrid1.Cols[1].Text:='ITEM';
    StringGrid1.Cols[2].Text:='DESCRIPTION';
    StringGrid1.Cols[3].Text:='UNIT PRICE';
    StringGrid1.Cols[4].Text:='LINE TOTAL';
    StringGrid1.ColWidths[0]:=50;
    StringGrid1.ColWidths[1]:=100;
    StringGrid1.ColWidths[2]:=300;
    StringGrid1.ColWidths[3]:=100;
    StringGrid1.ColWidths[4]:=100;

4.Pilih StringGridnya, EVENT - ONDRAWCELL ketikkan kode berikut

with TStringGrid(Sender) do
    if Pos(#13#10, Cells[ACol, ARow]) > 0 then
    begin
      Canvas.FillRect(Rect);
      Inc(Rect.Left, 2);
      Inc(Rect.Top, 2);
      DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), -1, Rect,
        DT_NOPREFIX or DT_WORDBREAK);
    end;

5. Tambahkan procedure ini dibawah {$R *.dfm}

procedure TForm1.UpdateRowHeights(AGrid: TStringGrid);
var
  Y: Integer;
  MaxHeight: Integer;
  X: Integer;
  R: TRect;
  TxtHeight: Integer;
begin
  for Y := AGrid.FixedRows to AGrid.RowCount - 1 do
  begin
    MaxHeight := AGrid.DefaultRowHeight - 4;
    for X := AGrid.FixedCols to AGrid.ColCount - 1 do
    begin
      R := Rect(0, 0, AGrid.ColWidths[X] - 4, 0);
      TxtHeight := DrawText(AGrid.Canvas.Handle, PChar(AGrid.Cells[X, Y]), -1,
        R, DT_WORDBREAK or DT_CALCRECT);
      if TxtHeight > MaxHeight then
        MaxHeight := TxtHeight;
    end;
    AGrid.RowHeights[Y] := MaxHeight + 4;
  end;
end;

TForm1 dapat diganti ya sesuai nama form kalian :)

6. Tambahin ini di bagian atas dibawah TYPE

  private
    { Private declarations }
    procedure UpdateRowHeights(AGrid: TStringGrid); // mendaftarkan procedure yg kita buat
  public
    { Public declarations }
  end;

7. Pilih StringGridnya, EVENT ONKEYPRESS tambahkan coding :

if key=#13 then
  UpdateRowHeights(StringGrid1);

selesaii deh :D

saatnya uji coba..!

Pilih salah satu cells / Fields
kemudian ketikan

ABC trus buat pindah baris barunya, teken CTRL + ENTER
ketikkan CDE
kalo sudah selesai, tekan ENTER

taraaa :D




oke sekian pemirsa
terimakasih sudah berkunjung di blog saya :)