Delphi中DBGrid应用全书Word文件下载.docx
《Delphi中DBGrid应用全书Word文件下载.docx》由会员分享,可在线阅读,更多相关《Delphi中DBGrid应用全书Word文件下载.docx(25页珍藏版)》请在冰点文库上搜索。
;
//字体
(SenderasTDBGrid).Columns[i].Title.Font.Size:
=9;
//字体大小
(SenderasTDBGrid).Columns[i].Title.Font.Color:
=$000000ff;
//字体颜色(红色)
(SenderasTDBGrid).Columns[i].Title.Color:
=$0000ff00;
//背景色(绿色)
end;
//隔行改变网格背景色:
ifQuery1.RecNomod2=0then
(SenderasTDBGrid).Canvas.Brush.Color:
=clInfoBk//定义背景颜色
else
=RGB(191,255,223);
//定义背景颜色
//定义网格线的颜色:
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
with(SenderasTDBGrid).Canvasdo//画cell的边框
Pen.Color:
=$00ff0000;
//定义画笔颜色(蓝色)
MoveTo(Rect.Left,Rect.Bottom);
//画笔定位
LineTo(Rect.Right,Rect.Bottom);
//画蓝色的横线
=$0000ff00;
//定义画笔颜色(绿色)
MoveTo(Rect.Right,Rect.Top);
//画绿色的竖线
end;
2.Delphi5-隔行改变DBGrid网格颜色:
在Form1上放置DBGrid1、Query1、DataSource1三个数据库组件,设置相关的属性,使DBGrid1能显示表中的数据。
然后,在DBGrid1的onDrawColumnCell事件中键入以下代码,然后运行程序
procedureTForm1.DBGrid1DrawColumnCell(Sender:
DataCol:
State:
vari:
ifadoQuery1.RecNomod2=0then
=clinfobk//定义背景颜色
//定义背景颜色
=clbtnface;
//定义画笔颜色(兰色)
//画绿色
3.DBGrid指定列上显示DBboBox
设置DBGrid1的OnDrawDataCell事件如下:
procedureTForm1.DBGrid1DrawDataCell(Sender:
Field:
TField;
if(gdFocusedinState)then
if(Field.FieldName=DBboBox1.DataField)then
DBboBox1.Left:
=Rect.Left+DBGrid1.Left;
DBboBox1.Top:
=Rect.Top+DBGrid1.top;
DBboBox1.Width:
=Rect.Right-Rect.Left;
DBboBox1.Height:
=Rect.Bottom-Rect.Top;
DBboBox1.Visible:
=True;
2)、DBGrid指定单元格未获得焦点时不显示DBboBox,设置DBGrid1的OnColExit事件如下:
procedureTForm1.DBGrid1ColExit(Sender:
TObject);
IfDBGrid1.SelectedField.FieldName=DBboBox1.DataFieldthen
=false;
3)、当DBGrid指定列获得焦点时DrawDataCell事件只是绘制单元格,并显示DBboBox,但是DBboBox并没有获得焦点,数据的输入还是在单元格上进行。
在DBGrid1的KeyPress事件中调用SendMessage这个WindowsAPI函数将数据输入传输到DBboBox上,从而达到在DBboBox上进行数据输入。
因此还要设置KeyPress事件如下:
procedureTForm1.DBGrid1KeyPress(Sender:
varKey:
Char);
if(key<
>
chr(9))then
if(DBGrid1.SelectedField.FieldName=DBboBox1.DataField)then
DBboBox1.SetFocus;
SendMessage(DBboBox1.Handle,WM_Char,word(Key),0);
打印TDBGrid内容----方法1
procedurePrintDbGrid(DataSet:
TDataSet;
DbGrid:
TDbGrid;
Title:
String);
var
PointX,PointY:
ScreenX:
i,lx,ly:
px1,py1,px2,py2:
RowPerPage,RowPrinted:
ScaleX:
Real;
THeight:
TitleWidth:
SumWidth:
PageCount:
SpaceX,SpaceY:
RowCount:
PointX:
=Round(GetDeviceCaps(printer.Handle,LOGPIXELSX)/2.54);
PointY:
=Round(GetDeviceCaps(printer.Handle,LOGPIXELSY)/2.54);
=Round(Screen.PixelsPerInch/2.54);
=PointX/ScreenX;
RowPrinted:
=0;
printer.BeginDoc;
WithPrinter.Canvasdo
DataSet.DisableControls;
DataSet.First;
THeight:
=Round(TextHeight('
我'
)*1.5);
//设定每行高度为字符高的1.5倍
SpaceY:
=Round(TextHeight('
)/4);
SpaceX:
=Round(TextWidth('
RowPerpage:
=Round((printer.PageHeight-5*PointY)/THeight);
//上下边缘各2厘米
ly:
=2*PointY;
PageCount:
whilenotDataSet.Eofdo
if(RowPrinted=RowPerPage)or(RowPrinted=0)then
ifRowPrinted<
>
0then
Printer.NewPage;
RowPrinted:
=PageCount+1;
Font.Name:
Font.size:
=16;
Font.Style:
=Font.Style+[fsBold];
lx:
=Round((Printer.PageWidth-TextWidth(Title))/2);
TextOut(lx,ly,Title);
Font.Size:
=11;
=Font.Style-[fsBold];
=Printer.PageWidth-5*PointX;
=Round(2*PointY+0.2*PointY);
ifRowPerPage*PageCount>
DataSet.RecordCountthen
RowCount:
=DataSet.RecordCount
=RowPerPage*PageCount;
TextOut(lx,ly,'
第'
+IntToStr(RowPerPage*(PageCount-1)+1)+'
-'
+IntToStr(RowCount)+'
条,共'
+IntToStr(DataSet.RecordCount)+'
条'
);
=2*PointX;
=ly+THeight*2;
py1:
=ly-SpaceY;
ifRowCount=DataSet.RecordCountthen
py2:
=py1+THeight*(RowCount-RowPerPage*(PageCount-1)+1)
=py1+THeight*(RowPerPage+1);
SumWidth:
=lx;
fori:
=0toDBGrid.Columns.Count-1do
px1:
=SumWidth-SpaceX;
px2:
=SumWidth;
MoveTo(px1,py1);
LineTo(px2,py2);
TitleWidth:
=TextWidth(DBGrid.Columns[i].Title.Caption);
=Round(SumWidth+(DBGrid.Columns[i].width*scaleX-titleWidth)/2);
TextOut(lx,ly,DBGrid.Columns[i].Title.Caption);
=Round(SumWidth+DBGrid.Columns[i].width*scaleX)+SpaceX*2;
//画最后一条竖线
//画第一条横线
=py1+THeight;
=py2+THeight;
=ly+THeight;
=ly-SpaceY+THeight;
TextOut(lx,ly,DataSet.FieldByname(DBGrid.Columns[i].Fieldname).AsString);
=Round(lx+DBGrid.Columns[i].width*ScaleX+SpaceX*2);
=RowPrinted+1;
DataSet.next;
DataSet.first;
DataSet.EnableControls;
printer.EndDoc;
把DBGrid输出到Excel表格---方法一
(支持多Sheet){
功能描述:
把DBGrid输出到Excel表格(支持多Sheet)
调用格式:
CopyDbDataToExcel([DBGrid1,DBGrid2]);
}
procedureCopyDbDataToExcel(Args:
arrayofconst);
iCount,jCount:
XLApp:
Variant;
Sheet:
I:
Screen.Cursor:
=crHourGlass;
ifnotVarIsEmpty(XLApp)then
XLApp.DisplayAlerts:
=False;
XLApp.Quit;
VarClear(XLApp);
try
XLApp:
=CreateOleObject(‘Excel.Application‘);
except
=crDefault;
Exit;
XLApp.WorkBooks.Add;
XLApp.SheetsInNewWorkbook:
=High(Args)+1;
forI:
=Low(Args)toHigh(Args)do
XLApp.WorkBooks[1].WorkSheets[I+1].Name:
=TDBGrid(Args[I].VObject).Name;
Sheet:
=XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name];
ifnotTDBGrid(Args[I].VObject).DataSource.DataSet.Activethen
TDBGrid(Args[I].VObject).DataSource.DataSet.first;
foriCount:
=0toTDBGrid(Args[I].VObject).Columns.Count-1do
Sheet.Cells[1,iCount+1]:
=
TDBGrid(Args[I].VObject).Columns.Items[iCount].Title.Caption;
jCount:
=1;
whilenotTDBGrid(Args[I].VObject).DataSource.DataSet.Eofdo
Sheet.Cells[jCount+1,iCount+1]:
TDBGrid(Args[I].VObject).Columns.Items[iCount].Field.AsString;
Inc(jCount);
TDBGrid(Args[I].VObject).DataSource.DataSet.Next;
XlApp.Visible:
dbgrid的數據導入到excel中---方法二
unitUnit1;
interface
uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,
StdCtrls,Grids,DBGrids,Db,DBTables,Excel97,OleServer,Word97;
type
TForm1=class(TForm)
ExcelApplication1:
TExcelApplication;
ExcelWorkbook1:
TExcelWorkbook;
ExcelWorksheet1:
TExcelWorksheet;
Table1:
TTable;
DataSource1:
TDataSource;
DBGrid1:
TDBGrid;
Button1:
TButton;
Button4:
WordApplication1:
TWordApplication;
WordDocument1:
TWordDocument;
procedureButton1Click(Sender:
procedureButton4Click(Sender:
private
{Privatedeclarations}
public
{Publicdeclarations}
Form1:
TForm1;
implementation
{$R*.DFM}
procedureTForm1.Button1Click(Sender:
i,row,column:
integer;
Try
ExcelApplication1.Connect;
Except
MessageDlg('
Excelmaynotbeinstalled'
mtError,[mbOk],0);
Abort;
End;
ExcelApplication1.Visible[0]:
ExcelApplication1.Caption:
='
ExcelApplic