unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs, Graphics,
  Grids, ExtCtrls;type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
  private
    { Private declarations }
    FDraw: array of boolean;
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
  SetLength(FDraw, StringGrid1.RowCount);
end;procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  i: integer;
begin
  for i := 1 to StringGrid1.RowCount - 1 do
    if FDraw[ARow] and (ACol = 3) and (ARow <> i) then
      StringGrid1.Canvas.Draw(Rect.Left, Rect.Top, Image1.Picture.Graphic);
end;procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  ARect: TRect;
begin
  with StringGrid1 do
  begin
    ARect := CellRect(ACol, ARow);
    if (ARow <>0) and (ACol <> 0) then
      if not FDraw[ARow]  then
      begin
        Canvas.Draw(ARect.Left, ARect.Top, Image1.Picture.Graphic);
        FDraw[ARow] := true;
      end
      else begin
        Canvas.Draw(ARect.Left, ARect.Top, nil);
        FDraw[ARow] := false;
      end;
  end;
end;end.