來源:在StringGrid控件的单元格中动态插入CheckBox?
{//*********************************** 使StringGrid中的一列具有Check功能,和CheckBox效果一樣 //***********************************} unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids; type TForm1 = class(TForm) grid: TStringGrid; procedure FormCreate(Sender: TObject); procedure gridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure gridClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; fcheck, fnocheck: tbitmap; implementation {$R *.dfm} procedure TForm1.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 TForm1.gridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if not (gdFixed in State) then 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; procedure TForm1.gridClick(Sender: TObject); begin if grid.Cells[grid.col, grid.row] = 'yes ' then grid.Cells[grid.col, grid.row] := 'no ' else grid.Cells[grid.col, grid.row] := 'yes '; end; end.
沒有留言:
張貼留言