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

📄 unreportnameprint.pas

📁 本产品是开发LISTVIEW相关功能的可定制产品
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{**********************************************************************
                           通用报表打印定制类
名称:       报表打印需求参数定制程序
目的:      按照用户要求设制报表打印名称、需要打印的列、打印的顺序
功能:      按照用户要求设制报表打印名称、需要打印的列、打印的顺序
作者:      邓普德
版权:      成都四方信息技术有限公司
使用限制:  最多打印10列,且列名来自于指定数据库
定义时间:  2003-11-21
修改时间:
**********************************************************************}
unit unReportNamePrint;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, ExtCtrls, StdCtrls, Buttons, Menus,DB,DBTables, ImgList,Variants,
  Spin,unCDefine;
  {Self Define}

type
  TfrmReportNamePrint = class(TForm)
    StatusBar1: TStatusBar;
    GroupBox1: TGroupBox;
    Panel1: TPanel;
    Splitter1: TSplitter;
    GroupBox2: TGroupBox;
    Splitter2: TSplitter;
    GroupBox3: TGroupBox;
    spDown: TSpeedButton;
    spUp: TSpeedButton;
    spAllUp: TSpeedButton;
    lvPrintDetail: TListView;
    lvTableDetail: TListView;
    Panel2: TPanel;
    spEdit: TSpeedButton;
    spAdd: TSpeedButton;
    spDel: TSpeedButton;
    PopupMenu1: TPopupMenu;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    miTV: TImageList;
    spSaveDB: TSpeedButton;
    GroupBox4: TPanel;
    GroupBox9: TGroupBox;
    Label3: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    ComboBox1: TComboBox;
    Label2: TLabel;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    Label1: TLabel;
    ComboBox2: TComboBox;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    lvReportName: TListView;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    spRefresh: TSpeedButton;
    ImageList1: TImageList;
    spExit: TSpeedButton;
    procedure Splitter2Moved(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure spDownClick(Sender: TObject);
    procedure spSaveDBClick(Sender: TObject);
    procedure spUpClick(Sender: TObject);
    procedure spAllUpClick(Sender: TObject);
    procedure lvReportNameDblClick(Sender: TObject);
    procedure lvReportNameClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure spAddClick(Sender: TObject);
    procedure spEditClick(Sender: TObject);
    procedure spDelClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure lvReportNameKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure lvTableDetailClick(Sender: TObject);
    procedure lvPrintDetailClick(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox2KeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox2Click(Sender: TObject);
    procedure lvPrintDetailEndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure N6Click(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure N12Click(Sender: TObject);
    procedure spRefreshClick(Sender: TObject);
    procedure lvReportNameColumnClick(Sender: TObject;
      Column: TListColumn);
    procedure lvPrintDetailColumnClick(Sender: TObject;
      Column: TListColumn);
    procedure lvTableDetailColumnClick(Sender: TObject;
      Column: TListColumn);
    procedure spExitClick(Sender: TObject);
  private
    sFormName,sReportName,sFormCaption,sDiscription: string;
    nOldSelectRow,nRowSelected,nRowWidth:Integer;
    procedure Refresh;
  public
  end;

var
  frmReportNamePrint: TfrmReportNamePrint;

implementation

uses
  UnReportInfo, unCSort,unCDM;

{$R *.DFM}

procedure TfrmReportNamePrint.Splitter2Moved(Sender: TObject);
begin
  spDown.Top := Splitter2.Top + 4;
  spSaveDB.Top := Splitter2.Top + 4;
  spUp.Top := Splitter2.Top + 4;
  spAllUp.Top := Splitter2.Top + 4;

  spDown.Left := Splitter2.Left + 91;
  spSaveDB.Left := Splitter2.Left + 125;
  spUp.Left := Splitter2.Left + 59;
  spAllUp.Left := Splitter2.Left + 179;
end;

procedure TfrmReportNamePrint.FormCreate(Sender: TObject);
begin
    Refresh;
end;

procedure TfrmReportNamePrint.spDownClick(Sender: TObject);
var nWidth:Integer;
begin
    if nOldSelectRow<0 then
    begin
         StatusBar1.Panels.Items[1].Text := '请选择你要查询的报表!';
         Exit;
    end;
    IF ((lvPrintDetail.ItemIndex<0) OR (lvPrintDetail.ItemIndex>lvPrintDetail.Items.Count))THEN
    begin
       StatusBar1.Panels.Items[1].Text := '请选择你要取消/删除的定制列!';
       EXIT;
    end;

    sReportName:= TRIM(lvReportName.Items[nOldSelectRow].SubItems[1]);
    nWidth:=StrToInt(lvPrintDetail.Items[lvPrintDetail.ItemIndex].SubItems[2]);
    nRowWidth:=nRowWidth-nWidth;
    lvPrintDetail.Items[lvPrintDetail.ItemIndex].Delete;
    if ((lvReportName.Items[nOldSelectRow].SubItems[2]='A4横打') and ((nRowWidth+nWidth)<718)) then
       MessageDlg('   本系统允许A4纸张竖打最大宽度为718,你现在选择的总宽度只有:'+IntToStr(nRowWidth+nWidth)+'像素,你可以考虑将打印方式由现在的A4横打改为竖打!',mtWarning,[mbYes],0);
    StatusBar1.Panels.Items[1].Text := '报表名称:'+sReportName+',删除打印列成功,打印总列宽还剩余:'+IntToStr(nRowWidth)+'个像素.';
end;

procedure TfrmReportNamePrint.spSaveDBClick(Sender: TObject);
var qQryDB:TQuery;
    i:integer;
    sSerial:string;
begin
   i:=nOldSelectRow;//lvReportName.ItemIndex;
   sReportName:=TRIM(lvReportName.Items[i].SubItems[1]);
   sSerial:=TRIM(lvReportName.Items[i].Caption);
   qQryDB:=TQuery.Create(nil);
   qQryDB.DatabaseName:=CDM.dbData.DatabaseName;
   qQryDB.SessionName:=CDM.dbData.SessionName;
   qQryDB.Close;
   qQryDB.Sql.Clear;
   qQryDB.sql.Add('DELETE FROM SFRJPRINTDETAIL WHERE REPORTID='+sSerial);
   qQryDB.ExecSQL;
   i:=0;
   while i< lvPrintDetail.Items.Count do
   begin
      qQryDB.Close;
      qQryDB.sql.Clear;
      qQryDB.sql.Add('INSERT INTO SFRJPRINTDETAIL(REPORTID,TABLEDETAILID,PRINTTAB)');
      qQryDB.sql.Add(' VALUES('+sSerial+','+lvPrintDetail.Items[i].SubItems[4]+','+lvPrintDetail.Items[i].Caption+')');
      qQryDB.ExecSql;
      i:=i+1;
   end;
   qQryDB.Close;
   qQryDB.Free;
   qQryDB:=nil;
   StatusBar1.Panels.Items[1].Text := '定制打印内容保存成功!报表名称:'+sReportName+',当前打印总列宽为:'+IntToStr(nRowWidth)+'个像素.';
end;

procedure TfrmReportNamePrint.spUpClick(Sender: TObject);
var j,i,nWidth:integer;
begin
    if lvPrintDetail.Items.Count>10 then
    begin
       StatusBar1.Panels.Items[1].Text := '本打印定制最多支持10列,请调整!';
       EXIT;
    end;
    IF ((lvTableDetail.ItemIndex<0) OR (lvTableDetail.ItemIndex>lvTableDetail.Items.Count))THEN
    begin
       StatusBar1.Panels.Items[1].Text := '请选择你要定制的列!';
       EXIT;
    end;
    if nOldSelectRow<0 then
    begin
         StatusBar1.Panels.Items[1].Text := '请选择你要查询的报表!';
         Exit;
    end;
    GroupBox4.Visible:=False;
    i:=lvTableDetail.ItemIndex;
    if(i>=0)then
    begin
        nWidth:=StrToInt(lvTableDetail.Items[i].SubItems[1]);
        if ((lvReportName.Items[nOldSelectRow].SubItems[2]='A4横打') and ((nRowWidth+nWidth)>1047)) then
        begin
           StatusBar1.Panels.Items[1].Text := '本系统限制A4纸张横打支持最大宽度为1047,你选择的总宽度已经达到:'+IntToStr(nRowWidth+nWidth)+',请做调整后重试!';
           Exit;
        end;
        if ((lvReportName.Items[nOldSelectRow].SubItems[2]='A4竖打') and ((nRowWidth+nWidth)>718)) then
        begin
           StatusBar1.Panels.Items[1].Text := '本系统限制A4纸张竖打支持最大宽度为718,你选择的总宽度已经达到:'+IntToStr(nRowWidth+nWidth)+',请做调整或重新设置打印方式后再试!';
           Exit;
        end;
    end;

    spUp.Enabled:=False;
    ComboBox1.Clear;
    j:=0;
    for j:=1 to 10 do
    begin
        i:=0;
        while i< lvPrintDetail.Items.Count do
        begin
            if lvPrintDetail.Items[i].Caption=IntToStr(j)then
              break;
            i:=i+1;
        end;
        if i= lvPrintDetail.Items.Count then
           ComboBox1.Items.Add(IntToStr(j));
    end;
    ComboBox1.ItemIndex:=0;
    spAdd.Enabled:=False;
    spEdit.Enabled:=False;
    spDel.Enabled:=False;
    nRowSelected:=lvTableDetail.ItemIndex;
    GroupBox4.Visible:=True;
    Label2.Caption:='选择列:'+lvTableDetail.Items[nRowSelected].Caption;
    sReportName:=lvReportName.Items[nOldSelectRow].SubItems[1];
    StatusBar1.Panels.Items[1].Text := '报表名称:'+sReportName+',选择打印列名称:'+lvTableDetail.Items[nRowSelected].Caption;
END;

procedure TfrmReportNamePrint.spAllUpClick(Sender: TObject);
var qQryDB:TQuery;
    sSerial:string;
begin
  if nOldSelectRow<0 then
  begin
       StatusBar1.Panels.Items[1].Text := '请选择你要查询的报表!';
       Exit;
  end;
  sSerial:=lvReportName.Items[nOldSelectRow].Caption;
  sReportName:=lvReportName.Items[nOldSelectRow].SubItems[1];
  qQryDB:=TQuery.Create(nil);
  qQryDB.DatabaseName:=CDM.dbData.DatabaseName;
  qQryDB.SessionName:=CDM.dbData.SessionName;
  with qQryDB do
  begin
      Close;//选择要打印的字段LISTVIEW初始化
      SQL.Clear;
      SQL.Add('SELECT  A.TABLEDETAILID,PRINTCAPTION,CAPTION,WIDTH,FORMCAPTION,PRINTTAB FROM SFRJPRINTDETAIL A,SFRJTABLEDETAIL B WHERE A.TABLEDETAILID=B.TABLEDETAILID AND REPORTID='+sSerial+' ORDER BY PRINTTAB');
      Open;
      First;
      lvPrintDetail.items.BeginUpdate;
      lvPrintDetail.items.Clear;
      nRowWidth:=0;//打印列总宽度
      While not Eof do
      begin
        with lvPrintDetail.Items.Add do
        begin
          Caption:=FieldByName('PRINTTAB').AsString;
          SubItems.Add(FieldByName('PRINTCAPTION').Asstring);
          SubItems.Add(FieldByName('CAPTION').AsString);
          SubItems.Add(FieldByName('WIDTH').Asstring);
          nRowWidth:=nRowWidth+FieldByName('WIDTH').AsInteger;
          SubItems.Add(sReportName);
          SubItems.Add(FieldByName('TABLEDETAILID').Asstring);
          Next ;
        end;
      end;
      lvPrintDetail.items.endupdate;
      qQryDB.Close;
      qQryDB.Free;
      qQryDB:=nil;
   END;
   StatusBar1.Panels.Items[1].Text := '报表名称:'+sReportName+',打印总列宽为:'+IntToStr(nRowWidth)+'个像素.';   
end;

procedure TfrmReportNamePrint.lvReportNameDblClick(Sender: TObject);
begin
   spEdit.Click;
end;

procedure TfrmReportNamePrint.lvReportNameClick(Sender: TObject);
var qQryDB:TQuery;
    sSerial:string;
begin
  if nOldSelectRow=lvReportName.ItemIndex then
     Exit;
  GroupBox4.Visible:=False;
  spUp.Enabled:=True;
  spDown.Enabled:=True;
  spSaveDB.Enabled:=True;
  spAllUp.Enabled:=True;
  spAdd.Enabled:=True;
  spEdit.Enabled:=True;
  spDel.Enabled:=True;

⌨️ 快捷键说明

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