1.格式化文本,动态添加空格
function formatStr(const srcStr: string;Leng:integer): string; var i, iLen: integer; begin //先把原字符串赋值给返回字符串Result Result:= srcStr; //计算相差多少空格 iLen:= Leng - Length(srcStr); //在返回字符串后,补齐空格 for i:= 1 to iLen do begin Result:= Result + ' '; end; end;
2.给Panle添加有颜色的边框
代码:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TPanel = class(ExtCtrls.TPanel) public procedure Paint; override; end; type TForm1 = class(TForm) Panel1: TPanel; private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TPanel } procedure TPanel.Paint; begin inherited; Canvas.Pen.Color :=clBlue; Canvas.Rectangle(ClientRect); end; end.
3.将DBGRID的数据导出到EXCEL
function ExportToExcel(dbgrid:tdbgrid):boolean; const xlNormal=-4143; var i,j,k:integer; str,filename:string; excel:OleVariant; SavePlace: TBookmark; savedialog:tsavedialog; ProgressBar1:TProgressBar; begin result:=false; filename:=''; if dbgrid.DataSource.DataSet.RecordCount>65536 then begin if application.messagebox('需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?','询问',mb_yesno+mb_iconquestion)=idno then exit; end; screen.Cursor:=crHourGlass; try excel:=CreateOleObject('Excel.Application'); excel.workbooks.add; except screen.cursor:=crDefault; showmessage('无法调用Excel!'); exit; end; savedialog:=tsavedialog.Create(nil); savedialog.Filter:='Excel文件(*.xls)|*.xls'; if savedialog.Execute then begin if FileExists(savedialog.FileName) then try if application.messagebox('该文件已经存在,要覆盖吗?','询问',mb_yesno+mb_iconquestion)=idyes then DeleteFile(PChar(savedialog.FileName)) else begin Excel.Quit; savedialog.free; screen.cursor:=crDefault; Exit; end; except Excel.Quit; savedialog.free; screen.cursor:=crDefault; Exit; end; filename:=savedialog.FileName; end; savedialog.free; application.ProcessMessages; if filename='' then begin result:=false; Excel.Quit; screen.cursor:=crDefault; exit; end; k:=0; for i:=0 to dbgrid.Columns.count-1 do begin if dbgrid.Columns.Items[i].Visible then begin //Excel.Columns[k+1].ColumnWidth:=dbgrid.Columns.Items[i].Title.Column.Width; excel.cells[1,k+1]:=dbgrid.Columns.Items[i].Title.Caption; inc(k); end; end; dbgrid.DataSource.DataSet.DisableControls; saveplace:=dbgrid.DataSource.DataSet.GetBookmark; dbgrid.DataSource.dataset.First; i:=2; if dbgrid.DataSource.DataSet.recordcount>65536 then ProgressBar1:=ProgressBarform(65536) else ProgressBar1:=ProgressBarform(dbgrid.DataSource.DataSet.recordcount); while not dbgrid.DataSource.dataset.Eof do begin k:=0; for j:=0 to dbgrid.Columns.count-1 do begin if dbgrid.Columns.Items[j].Visible then begin excel.cells[i,k+1].NumberFormat:='@'; if not dbgrid.DataSource.dataset.fieldbyname(dbgrid.Columns.Items[j].FieldName).isnull then begin str := dbgrid.DataSource.dataset.fieldbyname(dbgrid.Columns.Items[j].FieldName).value; Excel.Cells[i, k + 1] := Str; end; inc(k); end else continue; end; if i=65536 then break; inc(i); ProgressBar1.StepBy(1); dbgrid.DataSource.dataset.next; end; progressbar1.Owner.Free; application.ProcessMessages; dbgrid.DataSource.dataset.GotoBookmark(SavePlace); dbgrid.DataSource.dataset.EnableControls; try if copy(FileName,length(FileName)-3,4)<>'.xls' then FileName:=FileName+'.xls'; Excel.ActiveWorkbook.SaveAs(FileName,xlNormal,'', '',False,False); except Excel.Quit; screen.cursor:=crDefault; exit; end; //Excel.Visible := true; Excel.Quit; screen.cursor:=crDefault; Result:= true; end;
4.将Adoquery的数据导出到Excel
function queryExportToExcel(queryexport:tadoquery):boolean; const xlNormal=-4143; var i,j,k:integer; str,filename:string; excel:OleVariant; savedialog:tsavedialog; ProgressBar1:TProgressBar; begin result:=false; filename:=''; if queryexport.RecordCount>65536 then begin if application.messagebox('需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?','询问',mb_yesno+mb_iconquestion)=idno then exit; end; screen.Cursor:=crHourGlass; try excel:=CreateOleObject('Excel.Application'); excel.workbooks.add; except screen.cursor:=crDefault; showmessage('无法调用Excel!'); exit; end; savedialog:=tsavedialog.Create(nil); savedialog.Filter:='Excel文件(*.xls)|*.xls'; if savedialog.Execute then begin if FileExists(savedialog.FileName) then try if application.messagebox('该文件已经存在,要覆盖吗?','询问',mb_yesno+mb_iconquestion)=idyes then DeleteFile(PChar(savedialog.FileName)) else begin Excel.Quit; savedialog.free; screen.cursor:=crDefault; Exit; end; except Excel.Quit; savedialog.free; screen.cursor:=crDefault; Exit; end; filename:=savedialog.FileName; end; savedialog.free; application.ProcessMessages; if filename='' then begin result:=false; Excel.Quit; screen.cursor:=crDefault; exit; end; k:=0; for i:=0 to queryexport.FieldCount-1 do begin excel.cells[1,k+1]:=queryexport.Fields[i].FieldName; inc(k); end; queryexport.First; i:=2; if queryexport.recordcount>65536 then ProgressBar1:=ProgressBarform(65536) else ProgressBar1:=ProgressBarform(queryexport.recordcount); while not queryexport.Eof do begin k:=0; for j:=0 to queryexport.FieldCount-1 do begin excel.cells[i,k+1].NumberFormat:='@'; if not queryexport.fieldbyname(queryexport.Fields[j].FieldName).isnull then begin str:=queryexport.fieldbyname(queryexport.Fields[j].FieldName).AsString; Excel.Cells[i, k + 1] := Str; end; inc(k); end; if i=65536 then break; inc(i); ProgressBar1.StepBy(1); queryexport.next; end; progressbar1.Owner.Free; application.ProcessMessages; try if copy(FileName,length(FileName)-3,4)<>'.xls' then FileName:=FileName+'.xls'; Excel.ActiveWorkbook.SaveAs(FileName,xlNormal,'', '',False,False); except Excel.Quit; screen.cursor:=crDefault; exit; end; //Excel.Visible := true; Excel.Quit; screen.cursor:=crDefault; Result := true; end; end.