LazarusでStringGridを使ってみた

LazarusでStringGridを使ってみた

参考ページ
https://www.petitmonte.com/bbs/answers?question_id=6229
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00488.html

ポイント
行は
 ・Row
列は
 ・Col
幅を変えるのは
・StringGrid1.ColWidths[行]:=40;
行を追加するのは
 ・StringGrid1.RowCount:=・StringGrid1.RowCount+1;
セルは
 ・StringGrid1.Cells[列,行]:=’文字列’;
イベントは
 ・TForm1.StringGrid1Click(Sender: TObject);
表(StringGrid)を選択(クリックした時)行(Row)と列(Col)を利用できる
 ・TForm1.Edit1Change(Sender: TObject);
  入力欄(Edit1)の内容を変更した時

procedure TForm1.FormCreate(Sender: TObject);
begin
   StringGrid1.ColCount:=5;
   StringGrid1.RowCount:=5;

   StringGrid1.Cells[1,0]:='No';
   StringGrid1.Cells[2,0]:='data1';
   StringGrid1.Cells[3,0]:='data2';
   StringGrid1.Cells[4,0]:='data3';

   StringGrid1.Cells[1,1]:='1';
   StringGrid1.Cells[2,1]:='1-1';
   StringGrid1.Cells[3,1]:='1-2';
   StringGrid1.Cells[4,1]:='1-3';

   StringGrid1.Cells[1,2]:='2';
   StringGrid1.Cells[2,2]:='2-1';
   StringGrid1.Cells[3,2]:='2-2';
   StringGrid1.Cells[4,2]:='2-3';

   StringGrid1.Cells[1,3]:='3';
   StringGrid1.Cells[2,3]:='3-1';
   StringGrid1.Cells[3,3]:='3-2';
   StringGrid1.Cells[4,3]:='3-3';

   StringGrid1.Cells[1,4]:='4';
   StringGrid1.Cells[2,4]:='4-1';
   StringGrid1.Cells[3,4]:='4-2';
   StringGrid1.Cells[4,4]:='4-3';

   StringGrid1.ColWidths[0]:=40;
   StringGrid1.ColWidths[1]:=40;
   StringGrid1.ColWidths[2]:=80;
   StringGrid1.ColWidths[3]:=80;
   StringGrid1.ColWidths[4]:=100;
     with  StringGrid1  do
  begin
    Edit1.Text := Cells[1,Row];
    Edit2.Text := Cells[2,Row];
    Edit3.Text := Cells[3,Row];
  end;
  button1.Caption:='削除';
  button2.Caption:='挿入';
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  with  StringGrid1  do
   Cells[1,Row]:=Edit1.Text;
end;

procedure TForm1.Button1Click(Sender: TObject);
    var
      KeepTopRow, KeepRow: Integer;
      ARow: Integer;
    begin
    with  StringGrid1  do begin
      ARow:=Row;
      KeepRow := Row;
      KeepTopRow := TopRow;

      BeginUpdate;
      try
        DeleteRow(ARow);

        if RowCount > KeepRow then Row := KeepRow
        else Row := KeepRow - 1;
        TopRow := KeepTopRow;

        SetFocus;
      finally
        EndUpdate;
      end;
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
//var
//        i : Integer;
//        k : Integer;
//begin
// https://www.petitmonte.com/bbs/answers?question_id=6229
// http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00488.html
  var
     i,InsCount,InsAt:integer;
  begin
     InsCount:=1;
     InsAt:=StringGrid1.Row;
     with StringGrid1 do
     begin
        RowCount:=RowCount+InsCount;
        For i:=RowCount-1 downTo InsAt+InsCount do
        begin
           Rows[i].assign(Rows[i-InsCount]);
        end;
        For i:=InsAt to InsAt+InsCount-1 do
        begin
           Rows[i].clear;
        end;
     end;

end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
  with  StringGrid1  do
   Cells[2,Row]:=Edit2.Text;
end;

procedure TForm1.Edit3Change(Sender: TObject);
begin
  with  StringGrid1  do
   Cells[3,Row]:=Edit3.Text;
end;

procedure TForm1.StringGrid1Click(Sender: TObject);
begin
  with  StringGrid1  do
  begin
    Edit1.Text := Cells[1,Row];
    Edit2.Text := Cells[2,Row];
    Edit3.Text := Cells[3,Row];
  end;
end;