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.