亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? unmakereportdetail.pas

?? 本產品是開發LISTVIEW相關功能的可定制產品
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
{**********************************************************************
                           通用報表打印定制類
名稱:       報表打印列定制程序
目的:      按照用戶要求定制報表詳細打印列
功能:      按照用戶要求定制報表詳細打印列
作者:      鄧普德
版權:      成都四方信息技術有限公司
使用限制:  最多打印10列,且列名來自于指定數據庫
定義時間:  2006-08-02
修改時間:  2006-08-06
**********************************************************************}

unit UnMakeReportDetail;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,QuickRpt,DBClient,Grids,
  ComCtrls, StdCtrls, ExtCtrls, ToolWin, Qrctrls,DB,DBTables,Printers,QRPrntr,unDetailReport;
  {Self}

type

//為了定制報表,需要用戶在窗體初始化時創建一個TListViewColumn型樹組并填充如下內容
 {統計查詢幾選擇打印字段屬性定義}
//該記錄的值可以作為歷史保存到數據庫中,用戶可以選擇歷史或默認打印
  TMListData = array[0..10] of string[30];//最多可以打印10列,每列最多30個字符
  PMListData = ^TMListData;

  TListViewColumn = record
    PrintCaption: string[14];              //報表實際打印列的標題
    Caption: string[14];                   //SOURCELISTVIES列顯示的標題
    ColumnName: string[20];                //數據列名稱
    Width: Integer;                        //數據列最大寬度
    bSelect: Boolean;                      //True: 表示該列被選中打印;False: 表示該列沒有被選中;每次選擇修改后需要維護
    PrintTab:Integer;                      //數據列在報表中的打印次序;每次選擇修改后需要維護
  end;

//報表打印定制類定義
  TMakeReportDetail = class(TObject)
  private
    PrintColumnNum,PrintModal:Integer;//打印列的列數及紙張如何打印(橫打還是豎打);選項有:(poPortrait, poLandscape)
    ReportForm:TForm;                 //SourceListView所在的窗體名稱;
    ReportFormName,ReportName:string;//SourceListView所在的窗體名稱;報表名稱
    SourceListView:TListView;        //待打報表中的LISTVIEW
    ReportDataSet:TClientDataSet;    //用于從LISTVIEW取出打印數據
    DatabaseName:string;             //外部系統訪問數據庫使用的數據庫名
    SessionName:string;              //外部系統訪問數據庫使用的會話名
    FrmUniversalReport: TFrmReport;  //本類所引用的報表窗體
    PrintColum:array of integer;          //保存打印列在可顯示數組中的位置
    TotalPrintColumNumber:integer;    //總共需要打印列數
    ColumnDefine:Array[0..9] of TListViewColumn; //打印列信息定義數組
    constructor Create;
    destructor Destroy;
    function  GetDataSetFromListview: TClientDataSet;
    function  GetDataSetFromList(Rlist:TList): TClientDataSet;
    procedure GetColumnDefineFromTable;
    procedure MakeDetailBand;                     //打印報表中的明細
    procedure MakeTotalBand(sgNormal:TstringGrid);
  public
  //僅打印報表中的明細
  //DoOnlyDetailPreview針對于未進行顯示定制的窗體LISTVIEW的定制打印
    function DoOnlyDetailPreview(fReportFormName:TForm;lSourceListView:TListView;
       sReportName,sDataBaseName,sSessionName,ReportFormTitle,UnitCaption,ReportCaption,
       sStaffName:string;PrintDate:TDate;PaperSize:TQRPaperSize;MemoData:TMemo):Integer;
  //DoOnlyDetailPreviewNew針對于已經進行過顯示定制的窗體LISTVIEW的定制打印——該方式下的速度更快
    function DoOnlyDetailPreviewNew(fReportFormName:TForm;Rlist:TList;sReportName,
       sDataBaseName,sSessionName,ReportFormTitle,UnitCaption,ReportCaption,sStaffName:string;
       PrintDate:TDate;PaperSize:TQRPaperSize;MemoData:TMemo):Integer;
  //僅打印報表中的匯總數據
    function DoOnlyTotalPreview(fReportFormName:TForm;sReportName,ReportFormTitle,UnitCaption,ReportCaption,sStaffName:string;PrintDate:TDate;PaperSize:TQRPaperSize;sStringGrid:TstringGrid):Integer;
  //打印報表中的明細及匯總數據
    function DoAllPreview(fReportFormName:TForm;lSourceListView:TListView;sReportName,sDataBaseName,sSessionName,ReportFormTitle,UnitCaption,ReportCaption,sStaffName:string;PrintDate:TDate;PaperSize:TQRPaperSize;MemoData:TMemo;sStringGrid:TStringGrid):Integer;
    function DoAllPreviewNew(fReportFormName:TForm;Rlist:TList;sReportName,sDataBaseName,sSessionName,ReportFormTitle,UnitCaption,ReportCaption,sStaffName:string;PrintDate:TDate;PaperSize:TQRPaperSize;MemoData:TMemo;sStringGrid:TStringGrid):Integer;

  end;

var
  MakeReportDetail: TMakeReportDetail;
implementation
uses unCDM;
//{$R *.DFM}

constructor TMakeReportDetail.Create;
begin
  inherited;
  TotalPrintColumNumber:=0;//Ini
End;

destructor TMakeReportDetail.Destroy;
begin
  inherited;
End;

//取得數據表中定義的報表打印列信息
procedure TMakeReportDetail.GetColumnDefineFromTable;
var qQryDB:TQuery;
    i:integer;
    str:string;
    rListViewColumn:TListViewColumn;
begin
  str:='SELECT CAPTION,INARYSERIALID,COLUMNNAME,'+
       ' WIDTH,PRINTTYPE,PRINTCAPTION '+
       ' FROM SFRJPRINTDETAIL A,SFRJTABLEDETAIL B,SFRJREPORTNAME C '+
       ' WHERE A.REPORTID=C.REPORTID '+
       ' AND A.TABLEDETAILID=B.TABLEDETAILID '+
       ' AND C.FORMNAME ='''+ReportFormName+''' AND REPORTNAME='''+ReportName+
       ''' ORDER BY PRINTTAB ASC';
  try
      //創建數據表,并為其指定數據庫名稱及會話名稱
      qQryDB:=TQuery.Create(nil);
      if DataBaseName<>'' then
         qQryDB.DatabaseName:=DataBaseName
      else
         qQryDB.DatabaseName:=CDM.dbData.DatabaseName;
      if SessionName<>'' then
         qQryDB.SessionName:=SessionName
      else
         qQryDB.SessionName:=CDM.dbData.SessionName;
      qQryDB.close;
      qQryDB.sql.Clear;
      qQryDB.sql.Add(Str);
      qQryDB.Open;
      qQryDB.First;
      PrintModal:=qQryDB.FieldByName('PRINTTYPE').AsInteger;

      TotalPrintColumNumber:=qQryDB.RecordCount;//取得查詢到的記錄數
      setlength(PrintColum,TotalPrintColumNumber);
      i:=0;
      while ((not qQryDB.eof) and (i<10)) do//最多打印10列
      begin
           PrintColum[i]:=qQryDB.FieldByName('INARYSERIALID').AsInteger;
           rListViewColumn.PrintCaption:=qQryDB.FieldByName('PRINTCAPTION').AsString;
           rListViewColumn.Caption:=qQryDB.FieldByName('CAPTION').AsString;
           rListViewColumn.ColumnName:=qQryDB.FieldByName('COLUMNNAME').AsString;
           rListViewColumn.Width:=qQryDB.FieldByName('WIDTH').AsInteger;
           rListViewColumn.bSelect:=True;
           rListViewColumn.PrintTab:=i;
           ColumnDefine[i]:=rListViewColumn;
           i:=i+1;
           qQryDB.Next;
      end;
      PrintColumnNum:=i;
      qQryDB.Close;
      qQryDB.Free;
      qQryDB:=nil;
  except//異常后的處理
    ShowMessage('  取打印列信息出錯!');
    qQryDB.Close;
    qQryDB.Free;
    qQryDB:=nil;
    PrintColumnNum:=0;
    Exit;
  end;
end;

//對外調用接口
//輸入參數:
//lSourceListView:為查詢到需要定制打印輸出的數據源;
//fReportFormName:lSourceListView所在的窗體名稱;
//ReportFormTitle:需要顯示的報表窗體名稱;
//UnitCaption:    報表副標題,通常為擁有報表單位的名稱;
//ReportCaption:  報表主標題;
//sDataBaseName:   外部系統訪問數據庫使用的數據庫名
//sSessionName:    外部系統訪問數據庫使用的會話名
//sStaffName:       制表人
//sMemoData:       備注內容;TMemo
//PrintDate:      打印報表的日期;如:2003-11-21
//PaperSize:      打印報表的紙張類型;選項有:(Default, Letter, LetterSmall, Tabloid, Ledger, Legal,
//                Statement, Executive, A3, A4, A4Small, A5, B4, B5, Folio,
//                Quarto, qr10X14, qr11X17, Note, Env9, Env10, Env11, Env12,
//                Env14, CSheet, DSheet, ESheet, Custom)
//PrintModal:     紙張如何打印(橫打還是豎打);選項有:(poPortrait, poLandscape)
function TMakeReportDetail.DoOnlyDetailPreview(fReportFormName:TForm;lSourceListView:TListView;
   sReportName,sDataBaseName,sSessionName,ReportFormTitle,UnitCaption,ReportCaption,sStaffName:string;
   PrintDate:TDate;PaperSize:TQRPaperSize;MemoData:TMemo):Integer;
begin
//將傳遞過來的參數初始化
  result:=0;
  PrintColumnNum:=0;
  ReportForm:=fReportFormName;
  ReportFormName:=ReportForm.Name;
  ReportName:=sReportName;
  DataBaseName:=sDataBaseName;
  SessionName:=sSessionName;
  SourceListView:=lSourceListView;
  GetColumnDefineFromTable;        //按照打印列定義從LISTVIEW中取出打印數據
  if(PrintColumnNum=0)then exit;   //打印列數=0,表示不用打印
  if SourceListView.Items.Count <= 0 then exit;  //LISTVIEW中無數據,表示不用打印
  ReportDataSet :=GetDataSetFromListview; //從SOURCELISTVIEW中取各行數據到ReportDataSet中
  try
     FrmUniversalReport := TFrmReport.Create(nil);
  except//創建打印窗體異常后的處理
      ReportDataSet.Close;
      ReportDataSet.Free;
      ReportDataSet:=nil;
      Showmessage('請檢查打印機是否有效且可用!');
      Exit;
  end;
  with FrmUniversalReport do
  begin
      Caption:=ReportFormTitle;
      FrmUnitName1.Caption:=UnitCaption;
      FrmUnitName2.Caption:=UnitCaption;
      FrmReportCaption.Caption:=ReportCaption;
      FrmPrintDate1.Caption:=Datetostr(PrintDate);
      FrmPrintDate2.Caption:=FrmPrintDate1.Caption;
      QRLabel11.Caption:='制表人:'+sStaffName;
      PrintReport.Page.PaperSize:=PaperSize;/////////////確定打印方式
      If PrintModal=0 then
         PrintReport.Page.Orientation:=poPortrait///////////
      else
         PrintReport.Page.Orientation:=poLandscape;///////////
      FrmReportCaption.Left:=((ChildBand1.Width-FrmReportCaption.Width) div 2);//確定標題顯示位置
      FrmPrintDate1.Left:=ChildBand1.Width+ChildBand1.Left-160;       //確定日期顯示位置
      FrmPrintDate2.Left:=ChildBand1.Width+ChildBand1.Left-150;       //確定日期顯示位置
      FrmMemo.Left:=ChildBand1.Width+ChildBand1.Left-500;             //確定備注信息顯示位置
      QRSysData2.Left:=(ChildBand1.Width div 2)+ChildBand1.Left-70;
      QRLabel11.Left:=ChildBand1.Width+ChildBand1.Left-250;
      if MemoData<>nil then
         FrmMemo.lines:=MemoData.lines;                               //顯示備注信息
      PrintReport.Bands.HasSummary := False;
      MakeDetailBand;           //調用創建明細信息
      if printer.Printers.Count <> 0 then
      begin
          FrmUniversalReport.PrintReport.PreviewModal;
      end    
      else
          Application.MessageBox('沒有缺省打印機!,請添加打印機后重試。','系統提示',MB_ok);
      ReportDataSet.Close;
      ReportDataSet.Free;
      ReportDataSet:=nil;
  end;
  FrmUniversalReport.Close;
  FrmUniversalReport.Free;
  FrmUniversalReport:=nil;
  result:=999;
end;

//對外調用接口
//輸入參數:
//fReportFormName:lSourceListView所在的窗體名稱;
//ReportFormTitle:需要顯示的報表窗體名稱;
//UnitCaption:    報表副標題,通常為擁有報表單位的名稱;
//ReportCaption:  報表主標題;
//sStaffName:       制表人
//PrintDate:      打印報表的日期;如:2003-11-21
//PaperSize:      打印報表的紙張類型;選項有:(Default, Letter, LetterSmall, Tabloid, Ledger, Legal,
//                Statement, Executive, A3, A4, A4Small, A5, B4, B5, Folio,
//                Quarto, qr10X14, qr11X17, Note, Env9, Env10, Env11, Env12,
//                Env14, CSheet, DSheet, ESheet, Custom)
//PrintModal:     紙張如何打印(橫打還是豎打);選項有:(poPortrait, poLandscape)
//sStringGrid:   為查詢到需要打印輸出的數據源;
function TMakeReportDetail.DoOnlyTotalPreview(fReportFormName:TForm;sReportName,ReportFormTitle,UnitCaption,ReportCaption,sStaffName:string;PrintDate:TDate;PaperSize:TQRPaperSize;sStringGrid:TStringGrid):Integer;
begin
  result:=0;
  PrintColumnNum:=0;
  PrintModal:=3;
  ReportForm:=fReportFormName;
  ReportFormName:=ReportForm.Name;
  ReportName:=sReportName;
  if sStringGrid.RowCount<2 then exit;//無打印內容不顯示
  FrmUniversalReport := TFrmReport.Create(nil);
  try
     FrmUniversalReport := TFrmReport.Create(nil);
  except
      Showmessage('請檢查打印機是否有效且可用!');
      Exit;
  end;
  with FrmUniversalReport do
  begin
      Caption:=ReportFormTitle;
      FrmUnitName1.Caption:=UnitCaption;
      FrmReportCaption.Caption:='';
      FrmReportCaption2.Caption:=ReportCaption;
      FrmPrintDate1.Caption:=Datetostr(PrintDate);
      QRLabel11.Caption:='制表人:'+sStaffName;
      PrintReport.Page.PaperSize:=PaperSize;/////////////打印紙張及模式的設置
      FrmReportCaption2.Left:=((ChildBand1.Width-FrmReportCaption.Width) div 2);
      FrmPrintDate1.Left:=ChildBand1.Width+ChildBand1.Left-160;
      QRShape1.Width:=arbStatics.Width-24;
      QRShape1.Left:=12;
      PrintReport.Bands.HasColumnHeader := False;
      PrintReport.Bands.HasDetail := False;
      MakeTotalBand(sStringGrid);
      If PrintModal=0 then
         PrintReport.Page.Orientation:=poPortrait
      else
         PrintReport.Page.Orientation:=poLandscape;///////////
      if printer.Printers.Count <> 0 then
          PrintReport.PreviewModal
      else
          Application.MessageBox('沒有缺省打印機!,請添加打印機后重試。','系統提示',MB_ok);
  end;
  FrmUniversalReport.Close;
  FrmUniversalReport.Free;
  FrmUniversalReport:=nil;
  result:=999;
end;

//對外調用接口
//輸入參數:
//lSourceListView:為查詢到需要定制打印輸出的數據源;
//fReportFormName:lSourceListView所在的窗體名稱;
//ReportFormTitle:需要顯示的報表窗體名稱;
//UnitCaption:    報表副標題,通常為擁有報表單位的名稱;
//ReportCaption:  報表主標題;
//sDataBaseName:   外部系統訪問數據庫使用的數據庫名
//sSessionName:    外部系統訪問數據庫使用的會話名
//sStaffName:       制表人
//sMemoData:       備注內容;TMemo
//PrintDate:      打印報表的日期;如:2003-11-21
//PaperSize:      打印報表的紙張類型;選項有:(Default, Letter, LetterSmall, Tabloid, Ledger, Legal,
//                Statement, Executive, A3, A4, A4Small, A5, B4, B5, Folio,
//                Quarto, qr10X14, qr11X17, Note, Env9, Env10, Env11, Env12,
//                Env14, CSheet, DSheet, ESheet, Custom)
//PrintModal:     紙張如何打印(橫打還是豎打);選項有:(poPortrait, poLandscape)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
caoporm超碰国产精品| 亚洲欧美偷拍另类a∨色屁股| 91丝袜国产在线播放| 丰满白嫩尤物一区二区| 国产电影一区二区三区| 国产成人综合网站| 成人午夜av电影| 成人av电影在线| 99精品国产一区二区三区不卡| 成人免费不卡视频| 97超碰欧美中文字幕| 色哟哟国产精品免费观看| 色综合激情久久| 欧美性色欧美a在线播放| 欧美日韩精品三区| 日韩欧美国产精品一区| 久久久不卡网国产精品二区| 国产精品久久午夜| 亚洲综合激情网| 蜜臀av一级做a爰片久久| 国产jizzjizz一区二区| 91蝌蚪porny九色| 日韩一区二区在线免费观看| 久久久国产精品午夜一区ai换脸| |精品福利一区二区三区| 午夜视频在线观看一区二区三区| 久久超碰97人人做人人爱| 不卡的av电影| 日韩一区二区三区在线| 亚洲国产精品t66y| 亚洲动漫第一页| 国产成人午夜片在线观看高清观看| av不卡在线观看| 日韩情涩欧美日韩视频| 亚洲三级在线观看| 久久国产日韩欧美精品| 色悠悠久久综合| 久久众筹精品私拍模特| 一区二区成人在线| 国产成人在线视频播放| 3d动漫精品啪啪一区二区竹菊 | 久久久久国产精品人| 亚洲欧美日韩成人高清在线一区| 日本成人在线网站| 色欧美片视频在线观看在线视频| 欧美videossexotv100| 亚洲最大成人综合| 成a人片亚洲日本久久| 日韩精品一区二区三区swag | 精品999久久久| 亚洲午夜在线电影| aa级大片欧美| 中文字幕欧美三区| 国内精品久久久久影院色| 欧美日韩亚洲另类| 亚洲欧美成人一区二区三区| 国产成a人亚洲| 久久众筹精品私拍模特| 久久精品国产一区二区三| 欧美伦理影视网| 亚洲一区二区三区四区五区中文| 成人动漫一区二区| 国产亚洲成aⅴ人片在线观看| 美女网站在线免费欧美精品| 欧美日韩中文精品| 亚洲成人av免费| 精品视频免费看| 亚洲电影中文字幕在线观看| 91国偷自产一区二区三区观看| 国产欧美精品一区二区色综合朱莉 | 成人天堂资源www在线| 久久一区二区三区国产精品| 青青草精品视频| 欧美精品一卡二卡| 五月综合激情日本mⅴ| 欧美日韩夫妻久久| 日韩电影在线看| 91精品国产麻豆国产自产在线| 丝袜美腿亚洲一区二区图片| 91麻豆精品国产91久久久久久久久 | 成人欧美一区二区三区黑人麻豆 | 欧美一级欧美三级| 视频一区欧美精品| 欧美一区二区三区免费视频| 麻豆久久久久久| 久久欧美中文字幕| 国产成人免费9x9x人网站视频| 国产午夜亚洲精品不卡 | 亚洲女女做受ⅹxx高潮| 在线影视一区二区三区| 性做久久久久久久免费看| 欧美一区二区三区在线视频| 久久国产综合精品| 国产精品免费观看视频| 色哟哟日韩精品| 午夜精品久久久久久久久久久| 欧美精品免费视频| 国产一区二区在线观看视频| 国产亚洲精品久| 日本韩国一区二区三区| 日本色综合中文字幕| 久久精品一区四区| 色综合久久中文字幕综合网 | 国产精品色婷婷久久58| 色丁香久综合在线久综合在线观看| 亚洲一二三四区| 精品播放一区二区| 欧洲精品一区二区三区在线观看| 免费欧美日韩国产三级电影| 国产精品理论片在线观看| 欧美中文一区二区三区| 国产一区二区三区免费观看 | 欧美成人在线直播| 91浏览器打开| 国产一区二区中文字幕| 亚洲免费电影在线| 精品三级av在线| 色综合中文综合网| 天天亚洲美女在线视频| 国产日韩视频一区二区三区| 在线一区二区三区| 国产成a人亚洲精品| 免费成人你懂的| 一区二区三区高清在线| 国产欧美日韩在线视频| 4438成人网| 欧美视频中文字幕| jlzzjlzz欧美大全| 久久99精品久久久| 午夜精品一区在线观看| 亚洲天堂av老司机| 国产亚洲欧美中文| 精品国产一区二区精华| 欧美日韩国产综合一区二区| 色婷婷一区二区三区四区| 成人中文字幕合集| 国产一区二区在线视频| 99久久伊人精品| 国产99精品在线观看| 激情欧美一区二区| 日本免费在线视频不卡一不卡二| 亚洲成av人片一区二区梦乃| 亚洲一区视频在线| 一区二区三区美女视频| 亚洲日本电影在线| 亚洲视频一区二区在线| 国产精品美女久久久久aⅴ| 久久久蜜臀国产一区二区| 2024国产精品| 久久女同互慰一区二区三区| 日韩一级欧美一级| 久久这里只精品最新地址| 亚洲精品一区二区三区香蕉| 日韩欧美黄色影院| 久久综合九色综合欧美就去吻| 精品国产一区久久| 久久久久久久av麻豆果冻| 久久久国产精华| 国产精品美女视频| 一级中文字幕一区二区| 同产精品九九九| 久久aⅴ国产欧美74aaa| 国产一区在线观看视频| 国产精品一区免费视频| aa级大片欧美| 欧美日韩一区高清| 欧美日韩国产另类不卡| 成人手机在线视频| k8久久久一区二区三区| 在线观看不卡视频| 日韩欧美一级特黄在线播放| 精品国产精品网麻豆系列| 久久精品人人做人人爽人人| 国产精品福利在线播放| 亚洲一区二区三区四区五区中文| 日韩精品乱码av一区二区| 狠狠网亚洲精品| 69堂精品视频| 欧美精品一区二区在线播放| 亚洲欧美在线aaa| 视频一区在线视频| 国产剧情一区在线| 欧美亚洲另类激情小说| 欧美不卡在线视频| 亚洲免费观看在线视频| 美腿丝袜亚洲一区| 成人午夜激情影院| 欧美一区二区三区婷婷月色| 中文一区二区在线观看| 亚洲国产精品麻豆| 懂色av噜噜一区二区三区av| 欧洲一区二区三区在线| 欧美国产成人精品| 日日夜夜精品免费视频| 成人永久看片免费视频天堂| 欧美高清性hdvideosex| 国产精品全国免费观看高清 | 国产精品一线二线三线| 欧美影院午夜播放| 久久精品欧美一区二区三区不卡|