📄 unreportnameprint.pas
字号:
{**********************************************************************
通用报表打印定制类
名称: 报表打印需求参数定制程序
目的: 按照用户要求设制报表打印名称、需要打印的列、打印的顺序
功能: 按照用户要求设制报表打印名称、需要打印的列、打印的顺序
作者: 邓普德
版权: 成都四方信息技术有限公司
使用限制: 最多打印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 + -