?? unrep1.pas
字號:
unit UNREP1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, StdCtrls, FlEdit, DsnUnit, DsnSubMl, DsnSub8, Qrctrls,
QuickRpt, ExtCtrls, Buttons, ComCtrls, ToolWin, JEdit, Spin;
type
TQRLBEdit = class(TQRLABEL)
private
protected
public
published
end;
type
TQRQDEdit = class(TQRDBTEXT)
private
protected
public
published
end;
type
TQRSPEdit = class(TQRSHAPE)
private
protected
public
published
end;
type
TFMREP1 = class(TForm)
ToolBar1: TToolBar;
DsnSwitch1: TDsnSwitch;
QRLB: TDsnStage;
QuickRep: TQuickRep;
QRBand_TITLE: TQRBand;
QRShape9: TQRShape;
QRBand5: TQRBand;
QRBand_DETAIL: TQRBand;
QRShape21: TQRShape;
QRShape7: TQRShape;
Dsn8Register1: TDsn8Register;
QRShape5: TQRShape;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
Query: TQuery;
VRITUAL_LB: TLabel;
VRITUAL_QD: TLabel;
VRITUAL_SP: TLabel;
Panel1: TPanel;
BTNPRN: TSpeedButton;
BTNCLR: TSpeedButton;
BTNSAV: TSpeedButton;
BTNQUT: TSpeedButton;
PageControl1: TPageControl;
PAGE_A: TTabSheet;
TabSheet2: TTabSheet;
BTN_QRLB: TSpeedButton;
BTN_QRQD: TSpeedButton;
BTN_QRSPV: TSpeedButton;
BTN_QRSPH: TSpeedButton;
BTN_QRSPR: TSpeedButton;
CB_COL: TComboBox;
TabSheet1: TTabSheet;
Label6: TLabel;
Label11: TLabel;
ED_OBJ_TOP: TJEdit;
ED_OBJ_LEFT: TJEdit;
ED_OBJ_HEIGHT:TJEdit;
ED_OBJ_WIDTH: TJEdit;
Label12: TLabel;
Label13: TLabel;
ED_OBJ: TLabel;
ED_PAGE_LENGTH: TFloatEdit;
ED_PAGE_WIDTH: TFloatEdit;
Label3: TLabel;
Label5: TLabel;
Label7: TLabel;
ED_PAGE_TOPMARGIN: TFloatEdit;
Label8: TLabel;
ED_PAGE_BOTTOMMARGIN: TFloatEdit;
Label9: TLabel;
ED_PAGE_LEFTMARGIN: TFloatEdit;
Label10: TLabel;
ED_PAGE_RIGHTMARGIN: TFloatEdit;
ED_PAGE_TABLE: TComboBox;
Label4: TLabel;
BTN_OBJ_APPLY: TBitBtn;
Label2: TLabel;
QRLabel17: TQRLabel;
QRLabel19: TQRLabel;
QRLabel20: TQRLabel;
QRLabel21: TQRLabel;
QRLabel23: TQRLabel;
QRLabel18: TQRLabel;
XLB_USER_TEL: TQRLabel;
XLB_USER_RBPST: TQRLabel;
XLB_USER_NO: TQRLabel;
XLB_USER_FAX: TQRLabel;
XLB_USER_ADDR: TQRLabel;
XLB_USER_NAME: TQRLabel;
XLB_DAT1: TQRLabel;
Label14: TLabel;
ED_PAGE_TITLE: TJEdit;
BTN_PAGE_APPLY: TBitBtn;
XLB_TITLE: TQRLabel;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
Label15: TLabel;
ED_OBJ_FIELD: TComboBox;
ED_OBJ_SHAPE: TComboBox;
Label1: TLabel;
BTN_OBJ_APPLY_LB: TBitBtn;
BTN_OBJ_APPLY_QD: TBitBtn;
BTN_OBJ_APPLY_SP: TBitBtn;
Label16: TLabel;
Label17: TLabel;
ED_OBJ_FONTSIZE: TSpinEdit;
ED_OBJ_NAME: TJEdit;
ED_OBJ_CAPTION: TJEdit;
procedure BTNQUTClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BTN_QRLBClick(Sender: TObject);
procedure BTN_QRQDClick(Sender: TObject);
procedure BTNCLRClick(Sender: TObject);
procedure BTN_QRSPVClick(Sender: TObject);
procedure BTN_QRSPHClick(Sender: TObject);
procedure BTN_QRSPRClick(Sender: TObject);
procedure BTNSAVClick(Sender: TObject);
procedure DsnSwitch1Click(Sender: TObject);
procedure BTNPRNClick(Sender: TObject);
procedure ED_PAGE_TABLEChange(Sender: TObject);
procedure VRITUAL_LBMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure VRITUAL_SPMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure VRITUAL_QDMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormShow(Sender: TObject);
procedure BTN_OBJ_APPLYClick(Sender: TObject);
procedure BTN_PAGE_APPLYClick(Sender: TObject);
procedure ED_OBJ_NAMEChange(Sender: TObject);
private
{ Private declarations }
FUNCTION IS_CHANGED(CHANGED:BOOLEAN):BOOLEAN;
public
{ Public declarations }
QR_CHANGED : BOOLEAN; //更改過
QR_NAME : STRING; //存儲檔名
QR_KEY_FIELD : STRING; // KEY 字段
QR_KEY_VALUE : STRING; // KEY 對應值
QR_TABLE_LIST : STRING; // 列出的TABLE
LB_CNT : INTEGER; //目前已有組件數
QD_CNT : INTEGER; //目前已有組件數
SP_CNT : INTEGER; //目前已有組件數
QR_LB : ARRAY [1..100] OF TQRLBEDIT;
QR_QD : ARRAY [1..100] OF TQRQDEDIT;
QR_SP : ARRAY [1..100] OF TQRSPEDIT;
FUNCTION CREATE_LB :BOOLEAN; //產生 LABEL
FUNCTION CREATE_QD :BOOLEAN; //產生 DB TEXT
FUNCTION CREATE_SP(SHAPE:STRING) :BOOLEAN; //產生 SHAPE
FUNCTION FIND_MAX_LBCNT(KIND:STRING):INTEGER; //找出 LABEL 最大數量
PROCEDURE SAVE_INI;
PROCEDURE LOAD_INI;
PROCEDURE FREE_ALL_LB;
end;
var
FMREP1: TFMREP1;
implementation
USES inifiles, DB_UTL, UN_UTL, FM_UTL, MAIND, SYSINI;
{$R *.DFM}
FUNCTION TFMREP1.IS_CHANGED(CHANGED:BOOLEAN):BOOLEAN;
BEGIN
IF CHANGED = TRUE THEN
BEGIN
BTN_OBJ_APPLY.Enabled := TRUE;
QR_CHANGED := TRUE; //更改過
END ELSE BEGIN
BTN_OBJ_APPLY.Enabled := FALSE;
QR_CHANGED := FALSE; //未更改過
END;
END;
FUNCTION TFMREP1.CREATE_LB :BOOLEAN;
BEGIN
LB_CNT := FIND_MAX_LBCNT('LB'); //找出 LABEL 最大數量
//產生對象
QR_LB[LB_CNT] := TQRLBEDIT.Create(FMREP1);
IF CB_COL.ItemIndex <=0 THEN
BEGIN
QR_LB[LB_CNT].Parent := QRBand_TITLE;
END ELSE BEGIN
QR_LB[LB_CNT].Parent := QRBand_DETAIL;
END;
QR_LB[LB_CNT].Name := 'LB'+INTTOSTR(LB_CNT);
QR_LB[LB_CNT].COLOR:= clWhite;
QR_LB[LB_CNT].Left := 5;
QR_LB[LB_CNT].TOP := 5;
QR_LB[LB_CNT].Caption := '標簽_'+INTTOSTR(LB_CNT);
QR_LB[LB_CNT].Cursor := crSizeAll;
QR_LB[LB_CNT].FONT.Size := 9;
QR_LB[LB_CNT].FONT.NAME := '新宋體';
QR_LB[LB_CNT].FONT.Style := [fsBold];
QR_LB[LB_CNT].AutoSize := TRUE;
QR_LB[LB_CNT].WORDWRAP := FALSE;
QR_LB[LB_CNT].OnMouseDown := VRITUAL_LBMouseDown;
QR_LB[LB_CNT].BringToFront;
END;
FUNCTION TFMREP1.CREATE_QD :BOOLEAN;
VAR N : INTEGER;
BEGIN
QD_CNT := FIND_MAX_LBCNT('QD'); //找出 BARCODE 最大數量
//產生對象
QR_QD[QD_CNT] := TQRQDEDIT.Create(FMREP1);
IF CB_COL.ItemIndex <=0 THEN
BEGIN
QR_QD[QD_CNT].Parent := QRBand_TITLE;
END ELSE BEGIN
QR_QD[QD_CNT].Parent := QRBand_DETAIL;
END;
QR_QD[QD_CNT].Name := 'QD'+INTTOSTR(QD_CNT);
QR_QD[QD_CNT].COLOR:= clWhite;
QR_QD[QD_CNT].Left := 5;
QR_QD[QD_CNT].TOP := 5;
QR_QD[QD_CNT].Caption := '資料_'+INTTOSTR(QD_CNT);
QR_QD[QD_CNT].Cursor := crSizeAll;
QR_QD[QD_CNT].FONT.Size := 9;
QR_QD[QD_CNT].FONT.NAME := '新宋體';
QR_QD[QD_CNT].AutoSize := FALSE;
QR_QD[QD_CNT].WORDWRAP := FALSE;
QR_QD[QD_CNT].DATASET := QUERY;
QR_QD[QD_CNT].OnMouseDown := VRITUAL_QDMouseDown;
QR_QD[QD_CNT].BringToFront;
END;
FUNCTION TFMREP1.CREATE_SP(SHAPE:STRING) :BOOLEAN;
VAR N : INTEGER;
BEGIN
SP_CNT := FIND_MAX_LBCNT('SP'); //找出 BARCODE 最大數量
//產生對象
QR_SP[SP_CNT] := TQRSPEDIT.Create(FMREP1);
IF CB_COL.ItemIndex <=0 THEN
BEGIN
QR_SP[SP_CNT].Parent := QRBand_TITLE;
END ELSE BEGIN
QR_SP[SP_CNT].Parent := QRBand_DETAIL;
END;
IF SHAPE = 'qrsVertLine' THEN QR_SP[SP_CNT].Shape := qrsVertLine;
IF SHAPE = 'qrsHorLine' THEN QR_SP[SP_CNT].Shape := qrsHorLine;
IF SHAPE = 'qrsRectangle' THEN QR_SP[SP_CNT].Shape := qrsRectangle;
IF SHAPE = 'qrsVertLine' THEN BEGIN QR_SP[SP_CNT].WIDTH := 1 ; QR_SP[SP_CNT].HEIGHT := 20; END;
IF SHAPE = 'qrsHorLine' THEN BEGIN QR_SP[SP_CNT].WIDTH := 20; QR_SP[SP_CNT].HEIGHT := 1; END;
QR_SP[SP_CNT].Name := 'SP'+INTTOSTR(SP_CNT);
QR_SP[SP_CNT].COLOR:= clBLACK;
QR_SP[SP_CNT].Left := 5;
QR_SP[SP_CNT].TOP := 5;
QR_SP[SP_CNT].OnMouseDown := VRITUAL_SPMouseDown;
QR_SP[SP_CNT].BringToFront;
END;
FUNCTION TFMREP1.FIND_MAX_LBCNT (KIND:STRING):INTEGER; //找出 LABEL 最大數量
VAR N ,R : INTEGER;
BEGIN
R := 1;
//找出目前最后一號, 最大值
FOR N := 0 TO FMREP1.ComponentCount-1 DO
BEGIN
WITH FMREP1.Components[N] DO
IF (COPY(NAME,1,2) = KIND) AND
(R <= STRTOINTDEF(COPY(NAME,3,LENGTH(NAME)-2),1)) THEN
R := STRTOINTDEF(COPY(NAME,3,LENGTH(NAME)-2),1) + 1;
END;
RESULT := R;
END;
// FUNCTION ========================================================================
PROCEDURE TFMREP1.SAVE_INI;
var T : Tinifile; N : INTEGER; S : TOBJECT; //暫存對象
BEGIN
TRY
IF FMREP1.FindComponent('S') = NIL THEN S := TOBJECT.Create;
T := Tinifile.Create(QR_NAME);
//刪除所有資料
FOR N := 0 TO 100 DO
BEGIN
T.EraseSection('PAGE');
T.EraseSection('LB'+INTTOSTR(N));
T.EraseSection('QD'+INTTOSTR(N));
T.EraseSection('SP'+INTTOSTR(N));
END;
//存入 報表 信息
T.WriteFloat('PAGE','QRBand_TITLE.Height' ,QRBand_TITLE.Height);
T.WriteFloat('PAGE','QRBand_TITLE.Width' ,QRBand_TITLE.Width);
T.WriteFloat('PAGE','QuickRep.Page.Width' , ED_PAGE_WIDTH.Value );
T.WriteFloat('PAGE','QuickRep.Page.Length' , ED_PAGE_LENGTH.Value );
T.WriteFloat('PAGE','QuickRep.Page.TopMargin' , ED_PAGE_TOPMARGIN.Value );
T.WriteFloat('PAGE','QuickRep.Page.BottomMargin' , ED_PAGE_BOTTOMMARGIN.Value );
T.WriteFloat('PAGE','QuickRep.Page.LeftMargin' , ED_PAGE_LEFTMARGIN.Value );
T.WriteFloat('PAGE','QuickRep.Page.RightMargin' , ED_PAGE_RIGHTMARGIN.Value );
T.WriteString('PAGE','XLB_TITLE.Caption' , ED_PAGE_TITLE.Text );
FOR N := 0 TO FMREP1.ComponentCount-1 DO
BEGIN
WITH FMREP1.Components[N] DO
BEGIN
// LABEL ================================================
IF COPY(NAME,1,2) = 'LB' THEN
BEGIN
S := FMREP1.Components[N];
WITH S AS TQRLBEDIT DO
BEGIN
T.WriteString (NAME,'NAME' ,Name);
T.WriteString (NAME,'PARENT' ,PARENT.Name);
T.WriteString (NAME,'CAPTION',CAPTION);
T.WriteInteger(NAME,'FONTSIZE' ,FONT.SIZE);
T.WriteInteger(NAME,'LEFT' ,LEFT);
T.WriteInteger(NAME,'TOP' ,TOP);
T.WriteInteger(NAME,'HEIGHT' ,HEIGHT);
T.WriteInteger(NAME,'WIDTH' ,WIDTH);
END;
END;
//=======================================================
// LABEL ================================================
IF COPY(NAME,1,2) = 'QD' THEN
BEGIN
S := FMREP1.Components[N];
WITH S AS TQRDBTEXT DO
BEGIN
T.WriteString (NAME,'NAME' ,Name);
T.WriteString (NAME,'PARENT' ,PARENT.Name);
T.WriteString (NAME,'DATAFIELD',DATAFIELD);
T.WriteInteger(NAME,'FONTSIZE' ,FONT.SIZE);
T.WriteInteger(NAME,'LEFT' ,LEFT);
T.WriteInteger(NAME,'TOP' ,TOP);
T.WriteInteger(NAME,'HEIGHT' ,HEIGHT);
T.WriteInteger(NAME,'WIDTH' ,WIDTH);
END;
END;
//=======================================================
// LABEL ================================================
IF COPY(NAME,1,2) = 'SP' THEN
BEGIN
S := FMREP1.Components[N];
WITH S AS TQRSHAPE DO
BEGIN
T.WriteString (NAME,'NAME' ,Name);
T.WriteString (NAME,'PARENT' ,PARENT.Name);
T.WriteInteger(NAME,'LEFT' ,LEFT);
T.WriteInteger(NAME,'TOP' ,TOP);
T.WriteInteger(NAME,'WIDTH' ,WIDTH);
T.WriteInteger(NAME,'HEIGHT' ,HEIGHT);
// T.WriteString (NAME,'SHAPE' ,VARTOSTR(SHAPE));
T.WriteString (NAME,'COLOR' ,COLORTOSTRING(PEN.COLOR));
END;
END;
//=======================================================
END;
END;
FINALLY
T.Free;
END;
END;
PROCEDURE TFMREP1.LOAD_INI;
var T : Tinifile; N : INTEGER; S : TOBJECT; //暫存對象
T_STR : STRING;
BEGIN
FREE_ALL_LB; //先清除原先 LABEL
TRY
IF FMREP1.FindComponent('S') = NIL THEN S := TOBJECT.Create;
T := Tinifile.Create(QR_NAME);
FOR N := 0 TO 100 DO
BEGIN
IF T.SectionExists('LB'+INTTOSTR(N)) = TRUE THEN CREATE_LB;
IF T.SectionExists('QD'+INTTOSTR(N)) = TRUE THEN CREATE_QD;
IF T.SectionExists('SP'+INTTOSTR(N)) = TRUE THEN CREATE_SP('qrsVertLine');
END;
ED_PAGE_WIDTH.Value := T.ReadFloat('PAGE','QuickRep.Page.Width' , QuickRep.Page.Width );
ED_PAGE_LENGTH.Value := T.ReadFloat('PAGE','QuickRep.Page.Length' , QuickRep.Page.Length );
ED_PAGE_TOPMARGIN.Value := T.ReadFloat('PAGE','QuickRep.Page.TopMargin' , QuickRep.Page.TopMargin );
ED_PAGE_BOTTOMMARGIN.Value := T.ReadFloat('PAGE','QuickRep.Page.BottomMargin' , QuickRep.Page.BottomMargin );
ED_PAGE_LEFTMARGIN.Value := T.ReadFloat('PAGE','QuickRep.Page.LeftMargin' , QuickRep.Page.LeftMargin );
ED_PAGE_RIGHTMARGIN.Value := T.ReadFloat('PAGE','QuickRep.Page.RightMargin' , QuickRep.Page.RightMargin );
ED_PAGE_TITLE.Text := T.ReadString('PAGE','XLB_TITLE.Caption' , XLB_TITLE.Caption );
QuickRep.Page.Width := ED_PAGE_WIDTH.Value ;
QuickRep.Page.Length := ED_PAGE_LENGTH.Value ;
QuickRep.Page.TopMargin := ED_PAGE_TOPMARGIN.Value ;
QuickRep.Page.BottomMargin := ED_PAGE_BOTTOMMARGIN.Value;
QuickRep.Page.LeftMargin := ED_PAGE_LEFTMARGIN.Value ;
QuickRep.Page.RightMargin := ED_PAGE_RIGHTMARGIN.Value ;
XLB_TITLE.Caption := ED_PAGE_TITLE.Text ;
FOR N := 0 TO FMREP1.ComponentCount-1 DO
BEGIN
WITH FMREP1.Components[N] DO
BEGIN
// LABEL ================================================
IF COPY(NAME,1,2) = 'LB' THEN
BEGIN
S := FMREP1.Components[N];
WITH S AS TQRLBEDIT DO
BEGIN
NAME := T.ReadString (NAME,'NAME' ,Name);
PARENT := QRBand_TITLE;
IF T.ReadString (NAME,'PARENT' ,PARENT.Name) = 'QRBand_DETAIL' THEN PARENT := QRBand_DETAIL;
CAPTION := T.ReadString (NAME,'CAPTION',CAPTION);
FONT.Size := T.ReadInteger(NAME,'FONTSIZE' ,FONT.SIZE);
LEFT := T.ReadInteger(NAME,'LEFT' ,LEFT);
TOP := T.ReadInteger(NAME,'TOP' ,TOP);
HEIGHT := T.ReadInteger(NAME,'HEIGHT' ,HEIGHT);
// WIDTH := T.ReadInteger(NAME,'WIDTH',WIDTH);
END;
END;
//=======================================================
// LABEL ================================================
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -