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

📄 stbarc.pas

📁 条码控件: 一维条码控件 二维条码控件 PDF417Barcode MaxiCodeBarcode
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  Code93 : array[0..46] of string[9] =
     {BSBSBS}    {bar-space-bar-space-bar...} {0-narrow, 1-wide}
    ('131112',   {0}
     '111213',   {1}
     '111312',   {2}
     '111411',   {3}
     '121113',   {4}
     '121212',   {5}
     '121311',   {6}
     '111114',   {7}
     '131211',   {8}
     '141111',   {9}
     '211113',   {A}
     '211212',   {B}
     '211311',   {C}
     '221112',   {D}
     '221211',   {E}
     '231111',   {F}
     '112113',   {G}
     '112212',   {H}
     '112311',   {I}
     '122112',   {J}
     '132111',   {K}
     '111123',   {L}
     '111222',   {M}
     '111321',   {N}
     '121122',   {O}
     '131121',   {P}
     '212112',   {Q}
     '212211',   {R}
     '211122',   {S}
     '211221',   {T}
     '221121',   {U}
     '222111',   {V}
     '112122',   {W}
     '112221',   {X}
     '122121',   {Y}
     '123111',   {Z}
     '121131',   {-}
     '311112',   {.}
     '311211',   {SPACE}
     '321111',   { $}
     '112131',   {/}
     '113121',   {+}
     '211131',   {%}
     '121221',   {($)}
     '312111',   {(%)}
     '311121',   {(/)}
     '122211');  {(+)}

  Code93Map : array[#0..#127] of string[2] =
  {Circle Code}   {ASCII Code 93 }
    ('%U',        {NL     (%)U   }
     '$A',        {SH     ($)A   }
     '$B',        {SX     ($)B   }
     '$C',        {EX     ($)C   }
     '$D',        {ET     ($)D   }
     '$E',        {EQ     ($)E   }
     '$F',        {AK     ($)F   }
     '$G',        {BL     ($)G   }
     '$H',        {BS     ($)H   }
     '$I',        {HT     ($)I   }
     '$J',        {LF     ($)J   }
     '$K',        {VT     ($)K   }
     '$L',        {FF     ($)L   }
     '$M',        {CR     ($)M   }
     '$N',        {SO     ($)N   }
     '$O',        {SI     ($)O   }
     '$P',        {DL     ($)P   }
     '$Q',        {D1     ($)Q   }
     '$R',        {D2     ($)R   }
     '$S',        {D3     ($)S   }
     '$T',        {D4     ($)T   }
     '$U',        {NK     ($)U   }
     '$V',        {SY     ($)V   }
     '$W',        {EB     ($)W   }
     '$X',        {CN     ($)X   }
     '$Y',        {EM     ($)Y   }
     '$Z',        {SB     ($)Z   }
     '%A',        {EC     (%)A   }
     '%B',        {FS     (%)B   }
     '%C',        {GS     (%)C   }
     '%D',        {RS     (%)D   }
     '%E',        {US     (%)E   }
      ' ',        {Space   Space }
     '/A',        {!      (/)A   }
     '/B',        {"      (/)B   }
     '/C',        {#      (/)C   }
      '$',        { $   (/)D or $}
      '%',        {%    (/)E or %}
     '/F',        {&      (/)F   }
     '/G',        {'      (/)G   }
     '/H',        {(      (/)H   }
     '/I',        {)      (/)I   }
     '/J',        {*      (/)J   }
     ' +',        {+    (/)K or +}
     '/L',        {,      (/)L   }
      '-',        {-    (/)M or -}
      '.',        {.    (/)N or .}
      '/',        {/    (/)O or /}
      '0',        {0    (/)P or 0}
      '1',        {1    (/)Q or 1}
      '2',        {2    (/)R or 2}
      '3',        {3    (/)S or 3}
      '4',        {4    (/)T or 4}
      '5',        {5    (/)U or 5}
      '6',        {6    (/)V or 6}
      '7',        {7    (/)W or 7}
      '8',        {8    (/)X or 8}
      '9',        {9    (/)Y or 9}
     '/Z',        {:      (/)Z   }
     '%F',        {;      (%)F   }
     '%G',        {<      (%)G   }
     '%H',        {=      (%)H   }
     '%I',        {>      (%)I   }
     '%J',        {?      (%)J   }
     '%V',        {       (%)V   }
      'A',        {A   	    A    }
      'B',        {B	    B    }
      'C',        {C	    C    }
      'D',        {D	    D    }
      'E',        {E	    E    }
      'F',        {F	    F    }
      'G',        {G	    G    }
      'H',        {H	    H    }
      'I',        {I	    I    }
      'J',        {J	    J    }
      'K',        {K	    K    }
      'L',        {L	    L    }
      'M',        {M	    M    }
      'N',        {N	    N    }
      'O',        {O	    O    }
      'P',        {P	    P    }
      'Q',        {Q	    Q    }
      'R',        {R	    R    }
      'S',        {S	    S    }
      'T',        {T        T    }
      'U',        {U	    U    }
      'V',        {V	    V    }
      'W',        {W	    W    }
      'X',        {X	    X    }
      'Y',        {Y	    Y    }
      'Z',        {Z	    Z    }
     '%K',        {[  	   (%)K  }
     '%L',        {\  	   (%)L  }
     '%M',        {]  	   (%)M  }
     '%N',        {^  	   (%)N  }
     '%O',        {_  	   (%)O  }
     '%W',        {`       (%)W  }
     '+A',        {a  	   (+)A  }
     '+B',        {b  	   (+)B  }
     '+C',        {c  	   (+)C  }
     '+D',        {d  	   (+)D  }
     '+E',        {e  	   (+)E  }
     '+F',        {f  	   (+)F  }
     '+G',        {g  	   (+)G  }
     '+H',        {h  	   (+)H  }
     '+I',        {i  	   (+)I  }
     '+J',        {j  	   (+)J  }
     '+K',        {k  	   (+)K  }
     '+L',        {l  	   (+)L  }
     '+M',        {m  	   (+)M  }
     '+N',        {n  	   (+)N  }
     '+O',        {o  	   (+)O  }
     '+P',        {p  	   (+)P  }
     '+Q',        {q  	   (+)Q  }
     '+R',        {r  	   (+)R  }
     '+S',        {s  	   (+)S  }
     '+T',        {t  	   (+)T  }
     '+U',        {u  	   (+)U  }
     '+V',        {v  	   (+)V  }
     '+W',        {w  	   (+)W  }
     '+X',        {x  	   (+)X  }
     '+Y',        {y  	   (+)Y  }
     '+Z',        {z  	   (+)Z  }
     '%P',        {{  	   (%)P  }
     '%Q',        {|  	   (%)Q  }
     '%R',        {}{	   (%)R  }
     '%S',        {~  	   (%)S  }
     '%T');       { DEL    (%)T  }

const
  Code128 : array[0..106] of string[7] =
     {BSBSBS}   {Value  CodeA  CodeB   CodeC}
    ('212222',  {0	SPACE	SPACE	00}
     '222122',  {1	!	!	01}
     '222221',  {2	"	"	02}
     '121223',  {3	#	#	03}
     '121322',  {4	$	$	04}
     '131222',  {5	%	%	05}
     '122213',  {6	&	&	06}
     '122312',  {7	'	'	07}
     '132212',  {8	(	(	08}
     '221213',  {9	)	)	09}
     '221312',  {10	* 	*	10}
     '231212',  {11	+	+	11}
     '112232',  {12	,	,	12}
     '122132',  {13	-	-	13}
     '122231',  {14	.	.	14}
     '113222',  {15	/	/	15}
     '123122',  {16	0	0	16}
     '123221',  {17	1	1	17}
     '223211',  {18	2	2	18}
     '221132',  {19	3	3	19}
     '221231',  {20	4	4	20}
     '213212',  {21	5	5	21}
     '223112',  {22	6	6	22}
     '312131',  {23	7	7	23}
     '311222',  {24	8	8	24}
     '321122',  {25	9	9	25}
     '321221',  {26	:	:	26}
     '312212',  {27	;	;	27}
     '322112',  {28	<	<	28}
     '322211',  {29	= 	= 	29}
     '212123',  {30	>	>	30}
     '212321',  {31	?	?	31}
     '232121',  {32	@	@	32}
     '111323',  {33	A	A	33}
     '131123',  {34	B	B	34}
     '131321',  {35	C	C	35}
     '112313',  {36	D	D	36}
     '132113',  {37	E	E	37}
     '132311',  {38	F	F	38}
     '211313',  {39	G	G	39}
     '231113',  {40	H	H	40}
     '231311',  {41	I	I	41}
     '112133',  {42	J	J	42}
     '112331',  {43	K	K	43}
     '132131',  {44	L	L	44}
     '113123',  {45	M	M	45}
     '113321',  {46	N	N	46}
     '133121',  {47	O	O	47}
     '313121',  {48	P	P	48}
     '211331',  {49	Q	Q	49}
     '231131',  {50	R	R	50}
     '213113',  {51	S	S	51}
     '213311',  {52	T	T	52}
     '213131',  {53	U	U	53}
     '311123',  {54	V	V	54}
     '311321',  {55	W	W	55}
     '331121',  {56	X	X	56}
     '312113',  {57	Y	Y	57}
     '312311',  {58	Z	Z	58}
     '332111',  {59	[	[	59}
     '314111',  {60	\	\	60}
     '221411',  {61	]	]	61}
     '431111',  {62	^	^	62}
     '111224',  {63	_ 	_ 	63}
     '111422',  {64	NU	`	64}
     '121124',  {65	SH	a	65}
     '121421',  {66	SX	b	66}
     '141122',  {67	EX	c	67}
     '141221',  {68	ET	d	68}
     '112214',  {69	EQ	e	69}
     '112412',  {70	AK	f	70}
     '122114',  {71	BL	g	71}
     '122411',  {72	BS	h	72}
     '142112',  {73	HT	i	73}
     '142211',  {74	LF	j	74}
     '241211',  {75	VT	k	75}
     '221114',  {76	FF	l	76}
     '413111',  {77	CR	m	77}
     '241112',  {78	SO	n	78}
     '134111',  {79	SI	o	79}
     '111242',  {80	DL	p	80}
     '121142',  {81	D1	q	81}
     '121241',  {82	D2	r	82}
     '114212',  {83	D3	s	83}
     '124112',  {84	D4	t	84}
     '124211',  {85	NK	u	85}
     '411212',  {86	SY	v	86}
     '421112',  {87	EB	w	87}
     '421211',  {88	CN	x	88}
     '212141',  {89	EM	y	89}
     '214121',  {90	SB	z	90}
     '412121',  (*91	EC	{	91*)
     '111143',  {92	FS		92}
     '111341',  (*93	GS	}	93*)
     '131141',  {94	RS	~	94}
     '114113',  {95	US	DEL	95}
     '114311',  {96	FNC 3	FNC 3	96}      {use #132}
     '411113',  {97	FNC 2	FNC 2	97}      {use #131}
     '411311',  {98	SHIFT	SHIFT	98}      {use #130}
     '113141',  {99	CODE C	CODE C	99}      {use #135}
     '114131',  {100	CODE B	FNC 4	CODE B}  {use #134}
     '311141',  {101	FNC 4	CODE A	CODE A}  {use #133}
     '411131',  {102	FNC 1	FNC 1	FNC 1 }  {use #130}
     '211412',  {103	CODE A}                  {use #136}
     '211214',  {104	CODE B}                  {use #137}
     '211232',  {105	CODE C}                  {use #138}
     '2331112');{106    STOP}                    {use #139}


{*** helper routines ***}

function RectWidth(const R : TRect) : Integer;
begin
  Result := R.Right-R.Left;
end;

function RectHeight(const R : TRect) : Integer;
begin
  Result := R.Bottom-R.Top;
end;


{*** TStBarCodeInfo ***}

procedure TStBarCodeInfo.Add(ModuleCount : Integer; BarKind : TStBarKindSet);
var
  Bar : TStBarData;
begin
  Bar := TStBarData.Create;
  Bar.Modules := ModuleCount;
  Bar.Kind := BarKind;
  FBars.Add(Bar);
end;

procedure TStBarCodeInfo.Clear;
var
  I : Integer;
begin
  for I := 0 to FBars.Count-1 do
    TStBarData(FBars[I]).Free;
  FBars.Clear;
end;

constructor TStBarCodeInfo.Create;
begin
  inherited Create;

  FBars := TList.Create;
end;

destructor TStBarCodeInfo.Destroy;
begin
  Clear;
  FBars.Free;
  FBars := nil;

  inherited Destroy;
end;

function TStBarCodeInfo.GetBars(Index : Integer) : TStBarData;
begin
  Result := FBars[Index];
end;

function TStBarCodeInfo.GetCount : Integer;
begin
  Result := FBars.Count;
end;


{*** TStBarCode ***}

procedure TStBarCode.CalcBarCode;
var
  I, J, X : Integer;
  CheckC  : Integer;
  CheckK  : Integer;
  CSP     : string;
  C       : string;
  C1, C2  : string;

  procedure AddCode(const S : string; AKind : TStBarKindSet);
  var
    I : Integer;
  begin
    for I := 1 to Length(S) do
      if S[I] = '0' then
        bcBarInfo.Add(1, AKind - [bkBar, bkThreeQuarterBar, bkHalfBar] + [bkSpace])
      else
        bcBarInfo.Add(StrToInt(S[I]), AKind);
  end;

  procedure AddECode(const Parity : string);
  var
    I : Integer;
  begin
    for I := 1 to Length(Parity) do begin
      if Parity[I] = 'E' then
        AddCode(UPC_E_EvenParity[bcDigits[I]], [bkBar])
      else
        AddCode(UPC_E_OddParity[bcDigits[I]], [bkBar]);
    end;
  end;

  procedure AddSupCode(const Parity : string);
  var
    I : Integer;
  begin
    for I := 1 to Length(Parity) do begin
      if Parity[I] = 'E' then
        AddCode(UPC_E_EvenParity[bcDigits[I]], [bkThreeQuarterBar, bkSupplement])
      else
        AddCode(UPC_E_OddParity[bcDigits[I]], [bkThreeQuarterBar, bkSupplement]);
      if I < Length(Parity) then
        AddCode('01', [bkThreeQuarterBar, bkSupplement]);
    end;
  end;

  procedure AddCodeModules(const S : string);
  var
    K : Integer;
  begin
    for K := 1 to Length(S) do begin
      if Odd(K) then
        bcBarInfo.Add(StrToInt(S[K]), [bkBar])
      else
        bcBarInfo.Add(StrToInt(S[K]), [bkSpace]);
    end;
  end;

  procedure AddCodeWideNarrow(const S : string);
  var
    K : Integer;
  begin
    for K := 1 to Length(S) do begin
      case S[K] of
        '0' : if Odd(K) then
                bcBarInfo.Add(1, [bkBar])
              else
                bcBarInfo.Add(1, [bkSpace]);
        '1' : if Odd(K) then
                bcBarInfo.Add(FBarNarrowToWideRatio, [bkBar])
              else
                bcBarInfo.Add(FBarNarrowToWideRatio, [bkSpace]);
      end;
    end;
  end;

begin
  if csLoading in ComponentState then
    Exit;

  bcBarInfo.Clear;
  if Code = '' then
    Exit;

  {get copy of code}
  C := Code;

  {get digits}
  case FBarCodeType of
    bcUPC_A, bcUPC_E, bcEAN_8, bcEAN_13, bcCodabar, bcCode11, bcCode93 :
      begin
        bcDigitCount := GetDigits(C);

⌨️ 快捷键说明

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