亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日韩三级免费观看| 欧美一二三在线| 夫妻av一区二区| 久久99精品一区二区三区三区| 丝袜美腿亚洲一区| 青青草一区二区三区| 蜜桃视频在线观看一区二区| 看电影不卡的网站| 国产一区二区三区视频在线播放| 国产高清在线精品| 99精品视频在线播放观看| 色综合一区二区| 欧美日韩精品欧美日韩精品一综合| 欧美精品精品一区| 337p粉嫩大胆色噜噜噜噜亚洲| 国产三级精品三级| 亚洲区小说区图片区qvod| 污片在线观看一区二区| 蜜臀av在线播放一区二区三区| 国产精品一级片| av一区二区久久| 在线电影国产精品| 久久久精品黄色| 亚洲一区二区欧美日韩| 久久激五月天综合精品| 成人av中文字幕| 337p亚洲精品色噜噜| 久久久久久久久久久久久女国产乱| 1024精品合集| 伦理电影国产精品| 一本久久a久久免费精品不卡| 777午夜精品免费视频| 国产欧美日韩中文久久| 亚洲成人免费在线| 不卡av在线网| 精品精品欲导航| 夜夜嗨av一区二区三区中文字幕| 久热成人在线视频| 色欧美88888久久久久久影院| 日韩免费看网站| 亚洲综合一区二区三区| 成人免费观看视频| 欧美一卡二卡三卡四卡| 樱桃国产成人精品视频| 高清shemale亚洲人妖| 欧美精品aⅴ在线视频| 中文字幕日韩av资源站| 久久精品国产99国产精品| 欧美综合在线视频| 中文字幕制服丝袜一区二区三区| 免费在线看成人av| 欧美性xxxxxxxx| 亚洲丝袜精品丝袜在线| 国产成人在线色| 久久亚洲影视婷婷| 激情欧美日韩一区二区| 91精品国产综合久久婷婷香蕉| 中文字幕日韩一区| 成人性生交大片免费看视频在线| 欧美一区二区三区四区久久| 亚洲综合激情小说| 日本精品裸体写真集在线观看| 欧美激情一区二区三区蜜桃视频 | 一区二区三区欧美激情| 国产成人精品亚洲日本在线桃色| www激情久久| 蜜臀av一区二区三区| 6080国产精品一区二区| 亚洲第一成年网| 欧美军同video69gay| 亚洲国产一区在线观看| 欧美亚洲国产一卡| 五月天激情综合网| 欧美电影在线免费观看| 免费观看在线色综合| 日韩欧美中文字幕精品| 精品一区二区在线观看| 久久综合九色综合97婷婷女人 | 欧美一区午夜视频在线观看| 香蕉乱码成人久久天堂爱免费| 欧美在线综合视频| 午夜精品一区二区三区三上悠亚| 欧美在线免费观看视频| 日本aⅴ精品一区二区三区| 欧美一区二区三区四区五区| 久久成人羞羞网站| 国产拍欧美日韩视频二区| 成人的网站免费观看| 一区二区三区91| 日韩欧美在线网站| 成人黄色电影在线| 亚洲成a人片在线观看中文| 欧美一级片在线| 成人免费观看视频| 亚洲五码中文字幕| 欧美精品一区二区久久久| 大胆欧美人体老妇| 亚洲国产日产av| 久久免费视频一区| 欧美在线免费观看亚洲| 黄色资源网久久资源365| 国产精品久久久久久亚洲毛片 | 亚洲福利电影网| 日韩免费视频一区二区| 99久久免费国产| 日韩av一区二区在线影视| 欧美国产日韩一二三区| 欧美人与z0zoxxxx视频| 大陆成人av片| 麻豆91免费看| 一区二区三区在线观看视频| 日韩欧美一级二级三级| 色综合中文字幕国产 | 日韩 欧美一区二区三区| 制服丝袜av成人在线看| 成人爱爱电影网址| 视频一区在线视频| 亚洲国产精品国自产拍av| 欧美日本视频在线| 91网站最新地址| 国产一区二区三区在线观看免费| 亚洲午夜影视影院在线观看| 日本一区二区成人在线| 精品国产99国产精品| 欧美三级日韩三级国产三级| 成人精品视频一区| 国产中文字幕一区| 五月婷婷久久综合| 亚洲精品国产视频| 亚洲婷婷综合色高清在线| 久久五月婷婷丁香社区| 在线播放亚洲一区| 91电影在线观看| 99久久er热在这里只有精品15 | 国产精品亲子伦对白| 4438x成人网最大色成网站| 欧美优质美女网站| 一本色道a无线码一区v| 91一区在线观看| 成人高清免费在线播放| 国产精品一色哟哟哟| 精品一区二区免费| 精品一区二区三区免费观看 | 91精品福利在线| 97精品国产露脸对白| av一区二区三区在线| 成人激情综合网站| 91在线观看污| 91小视频免费观看| 91丨porny丨国产| aaa亚洲精品一二三区| jlzzjlzz欧美大全| 91在线观看地址| 欧美亚洲尤物久久| 欧美巨大另类极品videosbest | 国产精品一区二区三区乱码 | 欧洲精品一区二区三区在线观看| 国产精品一区免费视频| 国产a区久久久| 91亚洲精品一区二区乱码| 97精品国产露脸对白| 91成人免费网站| 制服丝袜av成人在线看| 欧美va在线播放| 国产日韩在线不卡| 日韩毛片一二三区| 亚洲福利视频导航| 久色婷婷小香蕉久久| 成人免费视频视频在线观看免费 | 美女任你摸久久| 国产毛片精品视频| 99久久er热在这里只有精品15 | 中文字幕亚洲在| 午夜精品aaa| 日韩av电影天堂| 成人午夜在线免费| 欧美三级三级三级| 久久久久久久久久久久久久久99| 亚洲欧洲日韩在线| 日本亚洲电影天堂| 99视频一区二区| 日韩三级在线观看| 成人免费在线观看入口| 婷婷六月综合网| 成人午夜在线视频| 69精品人人人人| 中文字幕一区二区三区在线不卡 | 欧美一区二区三区影视| 中文久久乱码一区二区| 日本成人在线一区| 99久久伊人久久99| 日韩一区二区三免费高清| 国产精品久久久久一区二区三区| 日韩经典中文字幕一区| av中文字幕在线不卡| 欧美一区二区三区视频在线观看| 亚洲欧美综合网| 精品一二三四在线| 欧美疯狂性受xxxxx喷水图片| 中文字幕电影一区|