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

📄 unlbds.pas

📁 DELPHI编写的商场收银POS机源代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit UNLBDS;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, QuickRpt, Spin, Buttons, Thubar39, ToolWin, ComCtrls,
  DsnUnit, DsnSubMl, DsnSubGr, DsnSelect, DsnSub8, DBTables, FlEdit;

type

  TLBEdit = class(TLABEL)
  private
  protected
  public
  _FONT_STYLE  : INTEGER; //字体种类
  _FONT_ZOOM_W : INTEGER; //横向缩放比例
  _FONT_ZOOM_H : INTEGER; //纵向缩放比例
  _SUBTEXT     : INTEGER; //切字数
  _ROTAT       : INTEGER; //角度

    _CAPTION    : STRING; //1
    _TABLE_NAME : STRING; //2
    _FIELD_NAME : STRING; //2
    _SYSLST     : STRING; //3
  published
  end;

type
  TBCEdit = class(THUBarcode39)
  private
  protected
  public
  _CODE_SIZE  : STRING;
  _CODE_STYLE : INTEGER;
  _CODE_ZOOM_W : INTEGER; //横向缩放比例
  _CODE_ZOOM_H : INTEGER; //纵向缩放比例
  _CODE_HEIGHT : INTEGER; //码高
  _CODE_WIDTH  : INTEGER; //码宽
  _ROTAT       : INTEGER; //角度
  _HUMAN       : INTEGER; //条形码下的文字

    _CAPTION    : STRING; //1
    _TABLE_NAME : STRING; //2
    _FIELD_NAME : STRING; //2
    _SYSLST     : STRING; //3
  published
  end;

type
  TFMLBDS = class(TForm)
    ToolBar1: TToolBar;
    BTNTXT: TSpeedButton;
    BTNBCD: TSpeedButton;
    BTNLOD: TSpeedButton;
    BTNSAV: TSpeedButton;
    BTNCLR: TSpeedButton;
    BTNPRN: TSpeedButton;
    BTNCLV: TSpeedButton;
    BTNQUT: TSpeedButton;
    DsnSwitch1: TDsnSwitch;
    Dsn8Register1: TDsn8Register;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Panel2: TPanel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    P_EDH: TFloatEdit;
    P_EDW: TFloatEdit;
    VRITUAL_BC: THUBarcode39;
    X_BC: THUBarcode39;
    QR: TQuickRep;
    VRITUAL_LB: TLabel;
    QRLB: TDsnStage;
    procedure SAVClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure TXTClick(Sender: TObject);
    procedure LODClick(Sender: TObject);
    procedure CLRClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure QUTClick(Sender: TObject);
    procedure PRNClick(Sender: TObject);
    procedure BCDClick(Sender: TObject);
    procedure BTNCLVClick(Sender: TObject);
    procedure DsnSwitch1Click(Sender: TObject);
    procedure VRITUAL_LBMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure VRITUAL_BCMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Label1Click(Sender: TObject);
    procedure Label2Click(Sender: TObject);
    procedure Label3Click(Sender: TObject);
    procedure P_EDHChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure imRulerMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
    //移动图
//    Dragging: Boolean;          { Drag operation in progress flag }
//    XOffset, YOffset: Integer;  { Offsets from shape upper left }
//    FocusRect: TRect;           { Dotted outline while dragging }
//    Temp_Height, Temp_Left, Temp_Top : Integer;
    //========================================================================

  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; //目前已有组件数
    BC_CNT : INTEGER; //目前已有组件数
    QR_LB  : ARRAY [1..100] OF TLBEDIT;
    QR_BC  : ARRAY [1..100] OF TBCEDIT;

    FUNCTION  CREATE_LB :BOOLEAN;       //产生 LABEL
    FUNCTION  CREATE_BC :BOOLEAN;       //产生 BARCODE

    FUNCTION  FIND_MAX_LBCNT :INTEGER;  //找出 LABEL   最大数量
    FUNCTION  FIND_MAX_BCCNT :INTEGER;  //找出 BARCODE 最大数量

//==========================================
    PROCEDURE SAVE_INI;
    PROCEDURE LOAD_INI;
    PROCEDURE FREE_ALL_LB;
    FUNCTION  PRINT_ALL_LB(LB_CNT:INTEGER):BOOLEAN;

  end;

var
  FMLBDS: TFMLBDS;

implementation

uses inifiles, SYSINI, UN_UTL, DB_UTL, URCLEVER, URARGOX,
     UNLBDSL,
     MAIND, MAIN;

{$R *.DFM}

FUNCTION  TFMLBDS.CREATE_LB :BOOLEAN;
BEGIN
LB_CNT := FIND_MAX_LBCNT;  //找出 LABEL   最大数量

//产生对象
QR_LB[LB_CNT] := TLBEDIT.Create(FMLBDS);
QR_LB[LB_CNT].Parent := QRLB;
QR_LB[LB_CNT].Name := 'LB'+INTTOSTR(LB_CNT);
QR_LB[LB_CNT].COLOR:= $00FDC580;
QR_LB[LB_CNT].Left := 10;
QR_LB[LB_CNT].TOP  := 10;
QR_LB[LB_CNT].Caption := 'LB'+INTTOSTR(LB_CNT);
QR_LB[LB_CNT].Cursor :=  crSizeAll;
QR_LB[LB_CNT].FONT.Size := 16;
QR_LB[LB_CNT].AutoSize  := TRUE;
QR_LB[LB_CNT].OnMouseDown := VRITUAL_LBMouseDown;

QR_LB[LB_CNT]._FONT_STYLE := 1; //字体种类
QR_LB[LB_CNT]._FONT_ZOOM_W:= 1; //横向缩放比例
QR_LB[LB_CNT]._FONT_ZOOM_H:= 1; //纵向缩放比例
QR_LB[LB_CNT]._SUBTEXT    := -1; //切字数
QR_LB[LB_CNT]._ROTAT      := 0; //角度
END;

FUNCTION  TFMLBDS.CREATE_BC :BOOLEAN;
VAR N : INTEGER;
BEGIN
BC_CNT := FIND_MAX_BCCNT;  //找出 BARCODE   最大数量

//产生对象
QR_BC[BC_CNT] := TBCEDIT.Create(FMLBDS);
QR_BC[BC_CNT].Parent := QRLB;
QR_BC[BC_CNT].Name := 'BC'+INTTOSTR(BC_CNT);
QR_BC[BC_CNT].Left := 10;
QR_BC[BC_CNT].TOP  := 10;
QR_BC[BC_CNT].BARSTR := 'BC'+INTTOSTR(BC_CNT);
QR_BC[BC_CNT].Cursor :=  crSizeAll;
QR_BC[BC_CNT].FONT.Size := 16;
QR_BC[BC_CNT].AutoSize  := TRUE;
QR_BC[BC_CNT].OnMouseDown := VRITUAL_BCMouseDown;

QR_BC[BC_CNT]._CODE_SIZE   := '';
QR_BC[BC_CNT]._CODE_STYLE  := 1;
QR_BC[BC_CNT]._CODE_ZOOM_W := 1; //横向缩放比例
QR_BC[BC_CNT]._CODE_ZOOM_H := 1; //纵向缩放比例
QR_BC[BC_CNT]._CODE_HEIGHT := 32; //码高
QR_BC[BC_CNT]._CODE_WIDTH  := 1; //码宽
QR_BC[BC_CNT]._ROTAT       := 0; //角度
QR_BC[BC_CNT]._HUMAN       := 0; //条形码下的文字
END;

FUNCTION  TFMLBDS.FIND_MAX_LBCNT :INTEGER;  //找出 LABEL   最大数量
VAR N ,R : INTEGER;
BEGIN
R := 1;
//找出目前最后一号,   最大值
FOR N := 0 TO FMLBDS.ComponentCount-1 DO
    BEGIN
    WITH FMLBDS.Components[N] DO
    IF (COPY(NAME,1,2) = 'LB') 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  TFMLBDS.FIND_MAX_BCCNT :INTEGER;  //找出 BARCODE 最大数量
VAR N ,R : INTEGER;
BEGIN
R := 1;
//找出目前最后一号,   最大值
FOR N := 0 TO FMLBDS.ComponentCount-1 DO
    BEGIN
    WITH FMLBDS.Components[N] DO
    IF (COPY(NAME,1,2) = 'BC') 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;


//=  SYS  ===========================================================================
procedure TFMLBDS.FormCreate(Sender: TObject);
BEGIN

IF Application.FindComponent('FMLBDSL')=nil then Application.CreateForm(TFMLBDSL,FMLBDSL );

LB_CNT := 1;
BC_CNT := 1;
QR_NAME := ExtractFilePath(Application.EXEName)+'QR.ini';
QR_TABLE_LIST := 'BGDS';  // 列出的TABLE

IF FileExists(QR_NAME) = FALSE THEN FILE_CREATE(QR_NAME);

//取出 TALBLE
//FMLBDS.D_ED7.Items.Clear;
//Session.GetTableNames('MAIN', '', FALSE,false,FMLBDS.D_ED8.Items);

QR_CHANGED := FALSE; //更改过

P_EDH.VALUE := QRLB.Height / 80;
P_EDW.VALUE := QRLB.WIDTH  / 80;
end;

procedure TFMLBDS.FormShow(Sender: TObject);
begin
//QR_NAME := ExtractFilePath(Application.EXEName)+'QR.ini';

end;

procedure TFMLBDS.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IF QR_CHANGED = TRUE THEN //更改过
   Case MessageDlg('是否确定存储已更改的标签资料?',mtConfirmation,[mbYes,mbNo],0) of
        mrYES :SAVE_INI;end;

FMLBDSL.Release;
FMLBDS.Release;
end;


// FUNCTION ========================================================================
PROCEDURE TFMLBDS.SAVE_INI;
var T : Tinifile;    N : INTEGER;    S : TOBJECT;  //暂存对象
BEGIN

TRY
   IF FMLBDS.FindComponent('S') = NIL THEN S := TOBJECT.Create;
   T := Tinifile.Create(QR_NAME);


   //删除所有资料
   FOR N := 0 TO 100 DO
       BEGIN
       T.EraseSection('QRLB');
       T.EraseSection('LB'+INTTOSTR(N));
       T.EraseSection('BC'+INTTOSTR(N));
       END;

   //存入标签大小
   T.WriteInteger('QRLB','HEIGHT' ,QRLB.HEIGHT);
   T.WriteInteger('QRLB','WIDTH'  ,QRLB.WIDTH);

   FOR N := 0 TO FMLBDS.ComponentCount-1 DO
       BEGIN
       WITH FMLBDS.Components[N] DO
            BEGIN

            // LABEL ================================================
            IF COPY(NAME,1,2) = 'LB' THEN
               BEGIN
               S := FMLBDS.Components[N];

               WITH S AS TLBEDIT DO
               BEGIN
               T.WriteString (NAME,'NAME'   ,Name);
               T.WriteString (NAME,'CAPTION',CAPTION);

               T.WriteInteger(NAME,'LEFT'   ,LEFT);
               T.WriteInteger(NAME,'TOP'    ,TOP);
               T.WriteInteger(NAME,'HEIGHT' ,HEIGHT);
               T.WriteInteger(NAME,'WIDTH'  ,WIDTH);
               T.WriteINTEGER(NAME,'_FONT_STYLE' ,_FONT_STYLE);  //字体种类
               T.WriteINTEGER(NAME,'_FONT_ZOOM_W',_FONT_ZOOM_W); //横向缩放比例
               T.WriteINTEGER(NAME,'_FONT_ZOOM_H',_FONT_ZOOM_H); //纵向缩放比例
               T.WriteINTEGER(NAME,'SUBTEXT',_SUBTEXT);
               T.WriteINTEGER(NAME,'ROTAT'  ,_ROTAT);

               T.WriteInteger(NAME,'FONT'   ,_FONT_STYLE);
               T.WriteString (NAME,'TABLE'  ,_TABLE_NAME);
               T.WriteString (NAME,'FIELD'  ,_FIELD_NAME);
               T.WriteString (NAME,'SYSLST' ,_SYSLST);
               END;
               END;
            //=======================================================

            // LABEL ================================================
            IF COPY(NAME,1,2) = 'BC' THEN
               BEGIN
               S := FMLBDS.Components[N];

               WITH S AS TBCEDIT DO
               BEGIN
               T.WriteString (NAME,'NAME'   ,Name);
               T.WriteString (NAME,'BARSTR' ,BARSTR);

               T.WriteInteger(NAME,'LEFT'   ,LEFT);
               T.WriteInteger(NAME,'TOP'    ,TOP);
               T.WriteInteger(NAME,'HEIGHT' ,_CODE_HEIGHT);
               T.WriteInteger(NAME,'WIDTH'  ,_CODE_WIDTH);

               T.WriteString (NAME,'TABLE'  ,_TABLE_NAME);
               T.WriteString (NAME,'FIELD'  ,_FIELD_NAME);
               T.WriteString (NAME,'SYSLST' ,_SYSLST);

               T.WriteInteger(NAME,'BC_HEIGHT'   ,_CODE_HEIGHT);
               T.WriteInteger(NAME,'BC_ROTAT'    ,_ROTAT);
               T.WriteInteger(NAME,'BC_WIDE'     ,_CODE_WIDTH);
               T.WriteInteger(NAME,'BC_BARKIND'  ,_CODE_STYLE);
               T.WriteINTEGER(NAME,'BC_ROTAT'    ,_ROTAT);
               T.WriteINTEGER(NAME,'BC_HUMAN'    ,_HUMAN);

               END;
               END;
            //=======================================================

            // EDIT ================================================
            IF COPY(NAME,1,2) = 'ED' THEN
               BEGIN
               T.WriteString(NAME,'NAME',NAME);
               END;
            //=======================================================

            END;

       END;

FINALLY
   T.Free;
END;




END;

PROCEDURE TFMLBDS.LOAD_INI;
var T : Tinifile;    N : INTEGER;    S : TOBJECT;  //暂存对象
BEGIN
FREE_ALL_LB;  //先清除原先 LABEL

TRY

   IF FMLBDS.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('BC'+INTTOSTR(N)) = TRUE THEN CREATE_BC;
       END;

   // LOAD 标签大小
   QRLB.HEIGHT := T.ReadInteger('QRLB','HEIGHT' ,QRLB.HEIGHT);
   QRLB.WIDTH  := T.ReadInteger('QRLB','WIDTH'  ,QRLB.WIDTH);
   P_EDH.VALUE := QRLB.Height / 80;
   P_EDW.VALUE := QRLB.WIDTH  / 80;

   FOR N := 0 TO FMLBDS.ComponentCount-1 DO
       BEGIN
       WITH FMLBDS.Components[N] DO
            BEGIN

            // LABEL ================================================
            IF COPY(NAME,1,2) = 'LB' THEN
               BEGIN
               S := FMLBDS.Components[N];

               WITH S AS TLBEDIT DO
               BEGIN

               NAME    := T.ReadString (NAME,'NAME'   ,Name);
               CAPTION := T.ReadString (NAME,'CAPTION',CAPTION);
               LEFT    := T.ReadInteger(NAME,'LEFT'   ,LEFT);
               TOP     := T.ReadInteger(NAME,'TOP'    ,TOP);
               _FONT_STYLE := T.ReadINTEGER(NAME,'_FONT_STYLE' ,_FONT_STYLE);  //字体种类
               _FONT_ZOOM_W:= T.ReadINTEGER(NAME,'_FONT_ZOOM_W',_FONT_ZOOM_W); //横向缩放比例
               _FONT_ZOOM_H:= T.ReadINTEGER(NAME,'_FONT_ZOOM_H',_FONT_ZOOM_H); //纵向缩放比例
               _SUBTEXT    := T.ReadINTEGER(NAME,'SUBTEXT',-1);
               _ROTAT      := T.ReadINTEGER(NAME,'ROTAT'  , 0);

               _FONT_STYLE := T.ReadInteger(NAME,'FONT'    ,16);
               _TABLE_NAME := T.ReadSTRING (NAME,'TABLE'   ,'');
               _FIELD_NAME := T.ReadSTRING (NAME,'FIELD'   ,'');
               _SYSLST     := T.ReadSTRING (NAME,'SYSLST'  ,'');

               FONT.Size := 8 * STRTOINTDEF(FMLBDSL.ED_LB_FONT_STYLE.Items.Strings[_FONT_STYLE],2);
               IF _SYS_CFG_BARPRN = 0 THEN
                  IF _FONT_STYLE = 9 THEN FONT.Size := 16;  // 中文字体

⌨️ 快捷键说明

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