给TstringGrid加入CheckBox

var
  Form2: TForm2;
  fcheck,fnocheck:tbitmap;

implementation

{$R *.DFM}

procedure TForm2.FormCreate(Sender: TObject);
var
  bmp:TBitmap;
begin
  FCheck:= TBitmap.Create;
  FNoCheck:= TBitmap.Create;
  bmp:= TBitmap.create;
  try
    bmp.handle := LoadBitmap( 0, PChar(OBM_CHECKBOXES ));
    With FNoCheck Do
    Begin
      width := bmp.width div 4;
      height := bmp.height div 3;
      canvas.copyrect( Canvas.cliprect, bmp.canvas, canvas.cliprect );
    end;
    With FCheck Do
    Begin
      width := bmp.width div 4;
      height := bmp.height div 3;
      Canvas.CopyRect(Canvas.ClipRect,bmp.Canvas, rect(width, 0, 2*width, height ));
    end;
  finally
    bmp.free;
  end;
end;


procedure TForm2.gridClick(Sender: TObject);
begin
  if grid.Cells[grid.col,grid.row] <> 'yes' then
    grid.Cells[grid.col,grid.row]:='yes'
  else grid.cells[grid.col,grid.row] := 'no';
end;

procedure TForm2.gridDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 if not (gdFixed in State) then       //  如果是fix 的  则不画.
  with TStringGrid(Sender).Canvas do
  begin
    brush.Color:=clWindow;
    FillRect(Rect);
    if Grid.Cells[ACol,ARow]='yes' then
      Draw((rect.right + rect.left - FCheck.width) div 2,(rect.bottom + rect.top - FCheck.height) div 2,FCheck)
    else
      Draw((rect.right + rect.left - FCheck.width) div 2, (rect.bottom + rect.top - FCheck.height) div 2,FNoCheck);
  end;
end;

posted @ 2005-04-08 16:54  JustLive  阅读(905)  评论(0编辑  收藏  举报