内容发布更新时间 : 2025/1/6 19:17:24星期一 下面是文章的全部内容请认真阅读。
type
TExCell = class(TStringGrid) public
procedure DeleteRow(ARow: Longint); procedure DeleteColumn(ACol: Longint);
procedure InsertRow(ARow: LongInt); procedure InsertColumn(ACol: LongInt); end;
procedure TExCell.InsertColumn(ACol: Integer); begin
ColCount :=ColCount +1;
MoveColumn(ColCount-1, ACol);
end;
procedure TExCell.InsertRow(ARow: Integer); begin
RowCount :=RowCount +1;
MoveRow(RowCount-1, ARow); end;
procedure TExCell.DeleteColumn(ACol: Longint); begin
MoveColumn(ACol, ColCount -1);
ColCount := ColCount - 1; end;
procedure TExCell.DeleteRow(ARow: Longint); begin
MoveRow(ARow, RowCount - 1); RowCount := RowCount - 1;
end;
如何编写使StringGrid中的一列具有Check功能,和CheckBox效果一样 unit Unit1; interface uses
Windows, Messages, SysUtils, 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
i:SmallInt; 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.
StringGrid组件Cells内容分行显示在Tstringgrid.ondrawcell事件中
DrawText(StringGrid1.Canvas.Handle,pchar(StringGrid1.Cells[Acol,Arow]),Length(StringGrid1.Cells[Acol,Arow]),Rect,DT_WORDBREAK or DT_LEFT); 可以实现文字换行!
在StringGrid怎样制作只读的列在 OnSelectCell事件处理程序中,加入: (所有的列均设成可修改的)
if Col mod 2 = 0 then
grd.Options := grd.Options + [goEditing] else
grd.Options := grd.Options - [goEditing];
stringgrid从文本读入的问题(Save/Load a TStringGrid to/from a file?)stringgrid从文本读入的问题
// Save a TStringGrid to a file
procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName); var
f: TextFile;
i, k: Integer; begin
AssignFile(f, FileName); Rewrite(f);
with StringGrid do
begin
// Write number of Columns/Rows Writeln(f, ColCount); Writeln(f, RowCount); // loop through cells for i := 0 to ColCount - 1 do for k := 0 to RowCount - 1 do Writeln(F, Cells[i, k]); end;
CloseFile(F); end;
// Load a TStringGrid from a file