⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pub.pas

📁 一个用vb mysql实现的人事管理信息系统希望对大家有用。
💻 PAS
字号:
unit pub;

interface
     uses windows,messages,sysutils,classes,graphics,controls,forms,dialogs,
     extctrls,stdctrls,comctrls,dbctrls,buttons,grids,dbgrids,
     db ,dbtables,printers,comobj,wait_cx;
 const
 xlWBATWorksheet = -4167;
PROCEDURE PUB_INSET_EXCEL(DataSet: TDataSet;dbgrid1 :Tdbgrid);
procedure PrintStringGrid(StrGrid: TStringGrid; FX: STRING);
procedure print_dbgrid(datasource1 :Tdatasource;dbgrid1 :Tdbgrid;FX :STRING) ;

implementation
var
XLApp: Variant;

PROCEDURE PUB_INSET_EXCEL(DataSet: TDataSet;dbgrid1 :Tdbgrid);
var
  i,j: Integer;
  Sheet,ColumnRange: Variant;

begin
  try
  wiat_tsForm :=Twiat_tsForm.create(application);
  wiat_tsForm.show;
  wiat_tsForm.UPDATE;

wiat_tsForm.Label7.caption :='正在处理数据,共有'+inttostr(dataset.RecordCount)+'用户数据,请稍后...';
wiat_tsForm.ProgressBar1.Visible :=true;
wiat_tsForm.Label6.Visible :=true;
wiat_tsForm.Animate1.Visible :=false;
wiat_tsForm.Animate2.Visible :=true;
wiat_tsForm.Animate2.BringToFront ;

wiat_tsForm.update;
XLApp:= CreateOleObject('Excel.Application');
  XLApp.Workbooks.Add(xlWBatWorkSheet);
  XLApp.Workbooks[1].WorkSheets[1].Name := 'jlbtj';

    Sheet := XLApp.Workbooks[1].WorkSheets['jlbtj'];
   ColumnRange := XLApp.Workbooks[1].WorkSheets['jlbtj'].Columns;


   dataset.First ;
       for i :=1 to dbgrid1.Columns.Count do
          Sheet.Cells[1, i] :=dbgrid1.Columns[i-1].Title.Caption ;

         wiat_tsForm.ProgressBar1.Min :=0;
         wiat_tsForm.ProgressBar1.Max :=dataset.RecordCount+1;
         wiat_tsForm.ProgressBar1.Step := 1;

  for i := 2 to dataset.RecordCount+1  do
    begin
        wiat_tsForm.update;
        wiat_tsForm.label6.caption :=inttostr(round(i*100/dataset.RecordCount))+'%';
        wiat_tsForm.ProgressBar1.StepIt ;
      for j:=1 to dbgrid1.Columns.Count do
         begin
           Sheet.Cells[i, j] := DBGrid1.Fields[j-1].asstring;
         end;
     dataset.Next ;
    end;
  finally
    wiat_tsForm.close;wiat_tsForm.Free;
      XLApp.Visible := True;
  end;
END;

procedure PrintStringGrid(StrGrid: TStringGrid;FX: STRING);
const
LeftBlank=1; //定义页边距,单位厘米
RightBlank=1;
TopBlank=1;
BottomBlank=1;
var
   PointX,PointY:integer;
   PointScale,PrintStep:integer;
   s:string;
   x,y,W:integer;
   i:integer;


   Device:Array[0..cchDeviceName-1] of Char;
   Driver:Array[0..(MAX_PATH-1)] of Char;
   Port:Array[0..32] of Char;
   hDMode:THandle;
   pDMode:PDevMode;

begin //获取当前打印机的分辨率
   Printer.GetPrinter(Device,Driver,Port,hDMode);
     if hDMode<>0 then
     begin
          pDMode:=GlobalLock(hDMode);
          if pDMode<>nil then
          begin
               pDMode^.dmPaperSize:=DMPAPER_A4;
               pDMode^.dmFields:=pDMode^.dmFields or DM_PAPERSIZE;
               GlobalUnLock(hDMode);
          end;
     end;

   PointX:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54);
   PointY:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54);
  //根据打印机和屏幕的分辨率计算出从屏幕转换到打印机的比例 
   PointScale:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/Screen.PixelsPerInch+0.5); //横向打印

   IF FX='HX' THEN
     printer.Orientation:=poPortrait//Portrait;//poLandscape;
   ELSE
     printer.Orientation:=poLandscape;//Portrait;//poLandscape;

  //打印的字体和大小
   printer.Canvas.Font.Name:='宋体';
   printer.canvas.Font.Size:=12;
  //根据字体的大小确定每行的高度
   s:=application.Title ;
   PrintStep:=printer.canvas.TextHeight(s)+16;
   //打印的起点位置
   x:=PointX*LeftBlank;
   y:=PointY*TopBlank;
   //DataSource1是DBGrid1所连接的数据源
//   if ((DataSource1.DataSet).Active=true) and ((DataSource1.DataSet).RecordCount>0) then
     begin
       printer.BeginDoc;
//         (DataSource1.DataSet).First;

//        while not (DataSource1.DataSet).Eof do
         FOR W :=0 TO   StrGrid.rowcount -1 DO
          begin //打印DBGrid中的所有列
           for i:=0 to StrGrid.colcount-1 do
            begin
               //假如所要打印的列超出了打印范围,则忽略该列
             if (x+StrGrid.ColWidths[I]*PointScale)<=(Printer.PageWidth-PointX*RightBlank) then
              begin //画表格线
                //每页的第一行打印表头
               Printer.Canvas.Rectangle(x,y,x+StrGrid.ColWidths[I]*PointScale,y+PrintStep);
               {
               if y=PointY*TopBlank then
                 Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Columns[i].Title.Caption)
               else
               }
                 Printer.Canvas.TextOut(x+8,y+8,StrGrid.Cells[I,W]);
              end; //计算下一列的横坐标
             x:=x+StrGrid.ColWidths[I]*PointScale;
          end;
{
      if not (y=PointY*TopBlank) then
         (DataSource1.DataSet).next;
}
         x:=PointX*LeftBlank;
         y:=y+PrintStep; //换页
        if (y+PrintStep)>(Printer.PageHeight-PointY*BottomBlank) then
         begin
         Printer.NewPage;
         y:=PointY*TopBlank;
       end;
      end;

      printer.EndDoc;
//   (DataSource1.DataSet).First;
   Application.MessageBox('打印完成','打印',32);
end;

end;

procedure print_dbgrid(datasource1 :Tdatasource;dbgrid1 :Tdbgrid;FX :STRING) ;
const
LeftBlank=1; //定义页边距,单位厘米
RightBlank=1;
TopBlank=1;
BottomBlank=1;
var
   PointX,PointY:integer;
   PointScale,PrintStep:integer;
   s:string;
   x,y:integer;
   i:integer;

   Device:Array[0..cchDeviceName-1] of Char;
   Driver:Array[0..(MAX_PATH-1)] of Char;
   Port:Array[0..32] of Char;
   hDMode:THandle;
   pDMode:PDevMode;

begin //获取当前打印机的分辨率
   Printer.GetPrinter(Device,Driver,Port,hDMode);
     if hDMode<>0 then
     begin
          pDMode:=GlobalLock(hDMode);
          if pDMode<>nil then
          begin
               pDMode^.dmPaperSize:=DMPAPER_A4;
               pDMode^.dmFields:=pDMode^.dmFields or DM_PAPERSIZE;
               GlobalUnLock(hDMode);
          end;
     end;

   PointX:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54);
   PointY:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54);
  //根据打印机和屏幕的分辨率计算出从屏幕转换到打印机的比例 
   PointScale:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/Screen.PixelsPerInch+0.5); //横向打印
   
   IF FX='HX' THEN
     printer.Orientation:=poPortrait//Portrait;//poLandscape;
   ELSE
     printer.Orientation:=poLandscape;//Portrait;//poLandscape;

  //打印的字体和大小
   printer.Canvas.Font.Name:='宋体';
   printer.canvas.Font.Size:=12;
  //根据字体的大小确定每行的高度
   s:=application.Title ;
   PrintStep:=printer.canvas.TextHeight(s)+16;
   //打印的起点位置
   x:=PointX*LeftBlank;
   y:=PointY*TopBlank;
   //DataSource1是DBGrid1所连接的数据源
   if ((DataSource1.DataSet).Active=true) and ((DataSource1.DataSet).RecordCount>0) then
     begin
       printer.BeginDoc;
         (DataSource1.DataSet).First;
        while not (DataSource1.DataSet).Eof do
          begin //打印DBGrid中的所有列
           for i:=0 to DBGrid1.FieldCount-1 do
            begin
               //假如所要打印的列超出了打印范围,则忽略该列
             if (x+DBGrid1.Columns.Items[i].Width*PointScale)<=(Printer.PageWidth-PointX*RightBlank) then
              begin //画表格线
                //每页的第一行打印表头
               Printer.Canvas.Rectangle(x,y,x+DBGrid1.Columns.Items[i].Width*PointScale,y+PrintStep);
               if y=PointY*TopBlank then
                 Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Columns[i].Title.Caption)
               else
                 Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Fields[i].asString);
              end; //计算下一列的横坐标
             x:=x+DBGrid1.Columns.Items[i].Width*PointScale;
          end;
      if not (y=PointY*TopBlank) then
         (DataSource1.DataSet).next;
         x:=PointX*LeftBlank;
         y:=y+PrintStep; //换页
        if (y+PrintStep)>(Printer.PageHeight-PointY*BottomBlank) then
         begin
         Printer.NewPage;
         y:=PointY*TopBlank;
       end;
      end;

      printer.EndDoc;
   (DataSource1.DataSet).First;
   Application.MessageBox('打印完成','打印',32);
end;
end;




end.
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -