文档库 最新最全的文档下载
当前位置:文档库 › DELPHI基础_StringGrid行列的增加和删除

DELPHI基础_StringGrid行列的增加和删除

DELPHI基础_StringGrid行列的增加和删除
DELPHI基础_StringGrid行列的增加和删除

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 }

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;

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

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);

var

f: TextFile;

iTmp, i, k: Integer;

strTemp: String;

begin

AssignFile(f, FileName);

Reset(f);

with StringGrid do

begin

// Get number of columns

Readln(f, iTmp);

ColCount := iTmp;

// Get number of rows

Readln(f, iTmp);

RowCount := iTmp;

// loop through cells & fill in values

for i := 0 to ColCount - 1 do

for k := 0 to RowCount - 1 do

begin

Readln(f, strTemp);

Cells[i, k] := strTemp;

end;

end;

CloseFile(f);

end;

// Save StringGrid1 to ’c:.txt’:

procedure TForm1.Button1Click(Sender: TObject);

begin

SaveStringGrid(StringGrid1, ’c:.txt’);

end;

// Load StringGrid1 from ’c:.txt’:

procedure TForm1.Button2Click(Sender: TObject);

begin

LoadStringGrid(StringGrid1, ’c:.txt’);

end;

*******************************************

打开一个已有的文本文件,并将内容放到stringgrid中,文本行与stringgrid行一致;

在文本中遇到空格则放入下一cells.

搞定!注意,我只写了一个空格间隔的,你自己修改一下splitstring可以用多个空格分隔!

procedure TForm1.Button1Click(Sender: TObject);

var

aa,bb:tstringlist;

i:integer;

begin

aa:=tstringlist.Create;

bb:=tstringlist.Create;

aa.LoadFromFile(’c:.txt’);

for i:=0 to aa.Count-1 do

begin

bb:=SplitString(aa.Strings[i],’’);

stringgrid1.Rows[i]:=bb;

end;

aa.Free;

bb.Free;

end;

其中splitstring为:

function SplitString(const source,ch:string):tstringlist;

var

temp:string;

i:integer;

begin

result:=tstringlist.Create;

temp:=source;

i:=pos(ch,source);

while i<>0 do

begin

result.Add(copy(temp,0,i-1));

delete(temp,1,i);

i:=pos(ch,temp);

end;

result.Add(temp);

end;

StringGrid组件Cells内容对齐

在StringGrid的DrawCell事件中添加类似的代码就可以了:

V AR

vCol, vRow : LongInt;

begin

vCol := ACol; vRow := ARow;

WITH Sender AS TStringGrid, Canvas DO

IF vCol = 2 THEN BEGIN ///对于第2列设置为右对齐

SetTextAlign(Handle, TA_RIGHT);

FillRect(Rect);

TextRect(Rect, Rect.RIGHT-2, Rect.Top+2, Cells[vCol, vRow]);

END;

end;

当我将StringGird的options属性中包含goRowSelect项时每当我选中StringGrid中一行,

则选中行用深蓝色显示,我想将深蓝色改为其他颜色应怎样该?当我将StringGird的options 属性中包含goRowSelect项时每当我选中StringGrid中一行,则选中行用深蓝色显示,我想将深蓝色改为其他颜色应怎样该?

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

begin

With StringGrid1 do

begin

If(ARow= Krow) and not (acol = 0) then

begin

Canvas.Brush.Color :=clY ellow;// ClBlue;

Canvas.FillRect(Rect);

Canvas.font.color:=ClBlack;

Canvas.TextOut(rect.left , rect.top, cells[acol, arow]);

end;

end;

end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

krow := Arow;//*

kcol := Acol;

end;注意:必须把变量KROW的值初始为1或其他不为0的值,否则如果锁定第一行的话,第一行的颜色将被自设颜色取代,而锁定行不会被重画。

怎么改变StringGrid控件某一列的背景和某一列的只读属性,StringGrid控件标题栏的对齐.怎么改变StringGrid控件某一列的背景和某一列的只读属性,StringGrid控件标题栏的对齐.

请参考以下代码:

在OnDrawCell事件中处理背景色。程序如下:

//将第二列背景变为红色。

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

begin

if not((acol=1) and (arow>=stringgrid1.fixedrows)) then exit;

with stringgrid1 do

begin

canvas.Brush.color:=clRed;

canvas.FillRect(Rect);

canvas.TextOut(rect.left+2,rect.top+2,cells[acol,arow])

end;

end;

//加入如下代码,那么StringGrid的第四列就只读了.其他列非只读

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);

begin

with StringGrid1 do begin

if ACol = 4 then

Options := Options - [goEditing]

else Options := Options + [goEditing];

end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

var

dx,dy:byte;

begin

if (acol = 4) and not (arow = 0) then

with stringgrid1 do

begin

canvas.Brush.color := clY ellow;

canvas.FillRect(Rect);

canvas.font.color := clblue;

dx:=2;//调整此值,控制字在网格中显示的水平位置

dy:=2;//调整此值,控制字在网格中显示的垂直位置

canvas.TextOut(rect.left+dx , rect.top+dy , cells[acol, arow]);

end;

//控制标题栏的对齐

if (arow = 0) then

with stringgrid1 do

begin

canvas.Brush.color := clbtnface;

canvas.FillRect(Rect);

dx := 12; //调整此值,控制字在网格中显示的水平位置

dy := 5; //调整此值,控制字在网格中显示的垂直位置

canvas.TextOut(rect.left + dx, rect.top + dy, cells[acol, arow]);

end;

end;

在stringGrid中使用回车键模拟TAB键切换单元格的功能实现......procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);

label

nexttab;

begin

if key=#13 then

begin

key:=#0;

nexttab:

if (stringgrid1.Col begin

stringgrid1.Col:=stringgrid1.Col+1;

end

else

begin

if stringgrid1.Row>=stringgrid1.RowCount-1 then

stringgrid1.RowCount:=stringgrid1.rowCount+1;

stringgrid1.Row:=stringgrid1.Row+1;

stringgrid1.Col:=0;

goto nexttab;

end;

end;

end;

.........

stringgrid如何清空

with StringGrid1 do for I := 0 to ColCount - 1 do Cols[I].Clear;

选中某单元格,然后在该单元格中修改-> 选中某单元格,然后在该单元格中修改设置属性:

StringGrid1.Options:=StringGrid1.Options+[goEditing];

让记录在StringGrid中分页显示在Uses中加入:ADOInt

//首先设定PageSize,取出PageCount

procedure TForm1.Button1Click(Sender: TObject);

begin

ADoquery1.Recordset.PageSize :=spinedit1.V alue;

Edit1.Text := IntToStr(ADoquery1.Recordset.PageCount);

ShowData(spinedit2.V alue);

end;

//然后将AbsolutePage的数据乾坤大挪移到StringGrid1中

procedure TForm1.ShowData(page:integer);

var

iRow, iCol, iCount : Integer;

rs : ADOInt.Recordset;

begin

ADoquery1.Recordset.AbsolutePage:=Page;

Currpage:=page;iRow := 0;

iCol := 1;

stringgrid1.Cells[iCol, iRow] := ’FixedCol1’;

Inc(iCol);

stringgrid1.Cells[iCol, iRow] := ’FixedCol2’;

Inc(iRow);

Dec(iCol);

rs := adoquery1.Recordset;

for iCount := 1 to SpinEdit1.V alue do

begin

stringgrid1.Cells[iCol, iRow] := rs.Fields.Get_Item(’FieldName1’).V alue;

Inc(iCol);

stringgrid1.Cells[iCol, iRow] := rs.Fields.Get_Item(’FieldName1’).V alue;

Inc(iRow);

Dec(iCol);

rs.MoveNext;

end;

//上一页

procedure TForm1.Button2Click(Sender: TObject);

begin

If (CurrPage)<>1 then

ShowData(CurrPage-1);

end;

//下一页

procedure TForm1.Button3Click(Sender: TObject);

begin

If CurrPage<>ADoquery1.Recordset.PageCount then

ShowData(CurrPage+1);

end;

打印StringGrid的程序源码这段代码没有看懂,但是可能有的朋友需要,所以共享一下子:)

procedure TForm1.SpeedButton11Click(Sender: TObject);

V ar

Index_R ,ALeft: Integer;

Index : Integer;

begin

StringGrid_File(’D:\AAA.TXT’);

if Not LinkTextFile then

begin

ShowMessage(’失败’);

Exit;

end;

//

QuickRep1.DataSet := ADOTable1;

Index_R := ReSize(StringGrid1.Width);

ALeft := 13;

Create_Title(TitleBand1,ALeft,24,HeaderControl1.Sections.Items[0].Width,20,

HeaderControl1.Sections[0].Text,taLeftJustify);

with Create_QRDBText(DetailBand1,ALeft,8,StringGrid1.ColWidths[0],20,

StringGrid1.Font,taLeftJustify) do

begin

DataSet := ADOTable1;

DataField := ADOTable1.Fields[0].DisplayName;

end;

ALeft := ALeft + StringGrid1.ColWidths[0] * Index_R + Index_R;

For Index := 1 to ADOTable1.FieldCount - 1 do

begin

Create_VLine(TitleBand1,ALeft - 13,16,1,40);

Create_Title(TitleBand1,ALeft,24,HeaderControl1.Sections.Items[Index].Width,20,

HeaderControl1.Sections[Index].Text,taLeftJustify);

Create_VLine(DetailBand1,ALeft - 13,-1,1,31);

with Create_QRDBText(DetailBand1,ALeft ,8,StringGrid1.ColWidths[Index] * Index_R,20,

StringGrid1.Font,taLeftJustify) do

begin

DataSet := ADOTable1;

DataField := ADOTable1.Fields[Index].DisplayName;

end;

ALeft := ALeft + StringGrid1.ColWidths[Index] *Index_R + Index_R;

end;

QuickRep1.Preview;

end;

function TForm1.ReSize(AGridWidth: Integer): Integer;

begin

Result := Trunc(718 / AGridWidth);

end;

function TForm1.StringGrid_File(AFileName: String): Boolean;

var

StrV alue : String;

Index : Integer;

ACol , ARow : Integer;

AFileV alue : System.TextFile;

begin

StrV alue := ’’;

Try

AssignFile(AFileV alue , AFileName);

ReWrite(AFileV alue);

StrV alue := HeaderControl1.Sections[0].Text;

For Index := 1 to HeaderControl1.Sections.Count - 1 do

StrV alue := StrV alue + ’,’+ HeaderControl1.Sections[Index].Text;

Writeln(AFileV alue,StrV alue);

StrV alue := ’’;

For ARow := 0 To StringGrid1.RowCount - 1 do

begin

StrV alue := ’’;

StrV alue := StringGrid1.Cells[0,ARow];

For ACol := 1 To StringGrid1.ColCount - 1 do

begin

StrV alue := StrV alue + ’, ’+ StringGrid1.Cells[ACol,ARow];

end;

Writeln(AFileV alue,StrV alue);

Finally

CloseFile(AFileV alue);

end;

end;

function TForm1.LinkTextfile: Boolean;

begin

Result := False;

with ADOTable1 do

begin

{ConnectionString := ’Provider=Microsoft.Jet.OLEDB.4.0;’+

’Data Source= D:\;Extended Properties=Text;’+

’Persist Security Info=False’;

TableName := ’AAA#TXT’;

Open;}

if Active then

Result := True;

end;

end;

function TForm1.Create_QRDBText(Sender: TWinControl; ALeft, A Top, A Width, AHight: Integer; AFont: TFont; AAlignMent: TAlignment): TQRDBText;

var

AQRDBText : TQRDBText;

begin

AQRDBText := TQRDBText.Create(Nil);

with AQRDBText do

begin

Parent := Sender;

Left := ALeft;

Top := A Top;

Width := AWidth;

Height := AHight;

AlignMent := AAlignMent;

Font.Assign(AFont);

end;

Result := AQRDBText;

end;

function TForm1.Create_VLine(Sender: TWinControl; ALeft, A Top, AWidth, AHight: Integer): TQRShape;

var

AQRShapeV : TQRShape;

begin

AQRShapeV := TQRShape.Create(Nil);

with AQRShapeV do

Parent := Sender;

Left := ALeft;

Top := A Top;

Width := AWidth;

Height := AHight;

end;

Result := AQRShapeV;

end;

procedure TForm1.Create_Title(Sender: TWinControl; ALeft, A Top, A Width, AHight: Integer; ACaption: String; AAlignMent: TAlignment);

var

AQRLabel : TQRLabel;

begin

AQRLabel := TQRLabel.Create(Nil);

with AQRLabel do

begin

Parent := Sender;

Left := ALeft;

Top := A Top;

Width := AWidth;

AlignMent := AAlignMent;

Caption := ACaption;

end;

end;

delphi 如何将stringgrid中数据导出到excel中delphi(stringgrid导出excel)

function ExportStrGridToExcel(Args: array of const): Boolean;

var

iCount, jCount: Integer;

XLApp: V ariant;

Sheet: V ariant;

I: Integer;

begin

Result := False;

if not V arIsEmpty(XLApp) then

begin

XLApp.DisplayAlerts := False;

XLApp.Quit;

V arClear(XLApp);

end;

try

XLApp := CreateOleObject('Excel.Application');

except

Exit;

end;

XLApp.WorkBooks.Add;

XLApp.SheetsInNewWorkbook := High(Args) + 1;

for I := Low(Args) to High(Args) do

begin

with TStringGrid(Args[I].VObject) do

begin

XLApp.WorkBooks[1].WorkSheets[I+1].Name := Name;

Sheet := XLApp.Workbooks[1].WorkSheets[Name];

for jCount := 0 to RowCount - 1 do

begin

for iCount := 0 to ColCount - 1 do

begin

Sheet.Cells[jCount + 1, iCount + 1] := Cells[iCount, jCount];

end;

end;

end;

end;

XlApp.Visible := True;

end;

调用方法:

ExportStrGridToExcel([StringGrid1]); ExportStrGridToExcel([StringGrid1, StringGrid2]);

相关文档