📄 unlbds.pas
字号:
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 + -