pBarCode.pas
上传用户:xdwang_66
上传日期:2016-04-26
资源大小:1726k
文件大小:30k
源码类别:

Static控件

开发平台:

Delphi

  1. // =============================================================================
  2. //
  3. // Barcode VCL Component
  4. //
  5. // For Delphi 4/5/6/7, C++ Builder 4/5/6, BDS 2005/2005, Turbo Delphi 2006
  6. //
  7. // Copyright (c) 2001, 2007  Han-soft Software, all rights reserved.
  8. //
  9. // $Rev: 44 $   $Id: pBarCode.pas 44 2007-01-16 01:16:04Z hanjy $
  10. //
  11. // =============================================================================
  12. unit pBarCode;
  13. interface
  14. uses
  15.   SysUtils, Classes, Controls, ExtCtrls,  Graphics, WinTypes, Forms, Math,
  16.   Windows, HBarCode;
  17. {$I 'BarCode.inc'}
  18. type
  19.   TInvalidChar = procedure(Sender: TObject; var Barcode: string) of object;
  20.   TBarCode = class(TCustomPanel)
  21.   private
  22.     { Private declarations }
  23.     FBarCode        : string;           //Barcode value
  24.     FBarType        : TBarType;         //Barcode Type
  25.     FBarHeight      : Integer;          //Barcode Height
  26.     FModul          : Integer;          //Width of thin bar
  27.     FRatio          : Double;           //Ratio of thick and thin bar
  28.     FCheckSum       : TCheckSum;        //Algorithms of checksum
  29.     FColorSpc       : TColor;           //Background color
  30.     FColorBar       : TColor;           //Bar color
  31.     FOrientation    : TOrientation;     //Orientation of barcode
  32.     FTextShow       : TTextShow;        //Content of barcode text to display
  33.     FTextPosition   : TTextPosition;    //Position of barcode text to display
  34.     FTextColor      : TColor;           //Background color of text to display
  35.     FHMargin        : Integer;          //Left and right margin when auto width
  36.     FAutoWidth      : Boolean;
  37.     FOnChange       : TNotifyEvent;
  38.     FOnInvalidChar  : TInvalidChar;
  39.     function  GetAngle:Double;
  40.     procedure SetBarType(const Value: TBarType);
  41.     procedure SetBarHeight(const Value: Integer);
  42.     procedure SetModul(const Value: Integer);
  43.     procedure SetRatio(const Value: Double);
  44.     procedure SetCheckSum(const Value: TCheckSum);
  45.     procedure SetColorSpc(const Value: TColor);
  46.     procedure SetColorBar(const Value: TColor);
  47.     procedure SetOrientation(const Value: TOrientation);
  48.     procedure SetTextShow(const Value: TTextShow);
  49.     procedure SetTextPosition(const Value: TTextPosition);
  50.     procedure SetTextColor(const Value: TColor);
  51.     procedure SetHMargin(const Value: Integer);
  52.     procedure SetAutoWidth(const Value: Boolean);
  53.     function  GetBarTypeName: string;
  54.     procedure SetAbout(const Value: string);
  55.     function  GetAbout:string;
  56.   protected
  57.     { Protected declarations }
  58.     procedure SetBarcode(const Value: string); virtual;
  59.     procedure DoChange; virtual;
  60.   public
  61.     { Public declarations }
  62.     constructor Create(Owner:TComponent); override;
  63.     destructor  Destroy; override;
  64.     procedure Assign(Source: TPersistent);override;
  65.     procedure Paint;override;
  66.     function  AutoSetWidth(H_Margin: Integer): Integer;
  67.     { Display }
  68.     procedure Draw(DCanvas:TCanvas; const DLeft:Integer; const DTop:Integer;
  69.       const DHeight:Integer; const DAngle:Double);overload;
  70.     procedure Draw(DCanvas:TCanvas; const DLeft:Integer; const DTop:Integer;
  71.       const DHeight:Integer);overload;
  72.     function  GetBarWidth: Integer;
  73.     function  GetBarHeight: Integer;
  74.     function  GetCanvasHeight(const DHeight:Integer;
  75.       const DAngle:Double): Integer;overload;
  76.     function  GetCanvasWidth(const DHeight:Integer;
  77.       const DAngle:Double): Integer;overload;
  78.     function  GetCanvasHeight(const DHeight:Integer): Integer;overload;
  79.     function  GetCanvasWidth(const DHeight:Integer): Integer;overload;
  80.     { Print }
  81.     procedure Print(const DUnit:TUnits; const DLeft:Double; const DTop:Double;
  82.       const DHeight:Double; const DModul:Double; const DAngle:Double);overload;
  83.     procedure Print(const DUnit:TUnits; const DLeft:Double; const DTop:Double;
  84.       const DHeight:Double; const DModul:Double);overload;
  85.     function  GetPrnBarWidth(const DUnit:TUnits; const DModul:Double): Double;
  86.     function  GetPrnCanvasHeight(const DUnit:TUnits; const DHeight:Double;
  87.       const DModul:Double; const DAngle:Double): Double;overload;
  88.     function  GetPrnCanvasWidth(const DUnit:TUnits; const DHeight:Double;
  89.       const DModul:Double; const DAngle:Double): Double;overload;
  90.     function  GetPrnCanvasHeight(const DUnit:TUnits; const DHeight:Double;
  91.       const DModul:Double): Double;overload;
  92.     function  GetPrnCanvasWidth(const DUnit:TUnits; const DHeight:Double;
  93.       const DModul:Double): Double;overload;
  94.     {HBarCode}
  95.     procedure H_DrawBar(
  96.             H_Canvas       : TCanvas;       //Canvas
  97.       const H_BarType      : TBarType;      //Barcode type
  98.       const H_BarCode      : string;        //Barcode value
  99.       const H_Modul        : Integer;       //Width of thin bar (pixels)
  100.       const H_Ratio        : Double;        //Ratio of thick and thin bar
  101.       const H_CheckSum     : TCheckSum;     //Algorithms of checksum
  102.       const H_Left         : Integer;       //Left margin with form (pixels)
  103.       const H_Top          : Integer;       //Top margin with form (pixels)
  104.       const H_Height       : Integer;       //Barcode height (pixels)
  105.       const H_TextFont     : TFont;         //Font of brcode text to display
  106.       const H_TextShow     : TTextShow;     //Content of barcode text to display
  107.       const H_TextPosition : TTextPosition; //Position of barcode text
  108.       const H_BarColor     : TColor;        //Color of bar
  109.       const H_SpcColor     : TColor;        //Background Color of barcode
  110.       const H_BackColor    : TColor;        //Background Color of barcode text
  111.       const H_Angle        : Double         //Angle of left rotate (degree)
  112.       );
  113.     function  H_GetBarWidth(
  114.       const BW_Type     : TBarType;         //Barcode type
  115.       const BW_Code     : string;           //Barcode value
  116.       const BW_Modul    : Integer;          //Width of thin bar (pixels)
  117.       const BW_Ratio    : Double;           //Ratio of thick and thin bar
  118.       const BW_CheckSum : TCheckSum         //Algorithms of checksum
  119.       ) : Integer;
  120.     function H_GetCanvasWidth(
  121.       const CW_Type      : TBarType;        //Barcode type
  122.       const CW_Code      : string;          //Barcode value
  123.       const CW_Modul     : Integer;         //Width of thin bar (pixels)
  124.       const CW_Ratio     : Double;          //Ratio of thick and thin bar
  125.       const CW_CheckSum  : TCheckSum;       //Algorithms of checksum
  126.       const CW_Height    : Integer;         //Barcode height (pixels)
  127.       const CW_Angle     : Double           //Angle of left rotate (degree)
  128.       ): Integer;
  129.     function H_GetCanvasHeight(
  130.       const CH_Type      : TBarType;        //Barcode type
  131.       const CH_Code      : string;          //Barcode value
  132.       const CH_Modul     : Integer;         //Width of thin bar (pixels)
  133.       const CH_Ratio     : Double;          //Ratio of thick and thin bar
  134.       const CH_CheckSum  : TCheckSum;       //Algorithms of checksum
  135.       const CH_Height    : Integer;         //Barcode height (pixels)
  136.       const CH_Angle     : Double           //Angle of left rotate (degree)
  137.       ):Integer;
  138.     procedure H_PrintBar(
  139.       const H_Unit           : TUnits;      //Unit of width and length (mm/inch)
  140.       const H_BarType      : TBarType;      //Barcode type
  141.       const H_BarCode      : string;        //Barcode value
  142.       const H_Modul        : Double;        //Width of thin bar (mm/inch)
  143.       const H_Ratio        : Double;        //Ratio of thick and thin bar
  144.       const H_CheckSum     : TCheckSum;     //Algorithms of checksum
  145.       const H_Left         : Double;        //Left margin from paper (mm/inch)
  146.       const H_Top          : Double;        //Top margin from paper (mm/inch)
  147.       const H_Height       : Double;        //Barcode height (mm/inch)
  148.       const H_TextFont     : TFont;         //Font of brcode text to print
  149.       const H_TextShow     : TTextShow;     //Content of barcode text to print
  150.       const H_TextPosition : TTextPosition; //Position of barcode text
  151.       const H_BarColor     : TColor;        //Color of bar
  152.       const H_SpcColor     : TColor;        //Background color of barcode
  153.       const H_BackColor    : TColor;        //Background color of barcode text
  154.       const H_Angle        : Double         //Angle of left rotate (degree)
  155.       );
  156.     function H_GetPrnBarWidth(
  157.       const BW_Unit      : TUnits;          //Unit of width and length (mm/inch)
  158.       const BW_Type      : TBarType;        //Barcode type
  159.       const BW_Code      : string;          //Barcode value
  160.       const BW_Modul     : Double;          //Width of thin bar (mm/inch)
  161.       const BW_Ratio     : Double;          //Ratio of thick and thin bar
  162.       const BW_CheckSum  : TCheckSum        //Algorithms of checksum
  163.       ):Double;
  164.     function H_PrnCanvasWidth(
  165.       const CW_Unit      : TUnits;          //Unit of width and length (mm/inch)
  166.       const CW_Type      : TBarType;        //Barcode type
  167.       const CW_Code      : string;          //Barcode value
  168.       const CW_Modul     : Double;          //Width of thin bar (mm/inch)
  169.       const CW_Ratio     : Double;          //Ratio of thick and thin bar
  170.       const CW_CheckSum  : TCheckSum;       //Algorithms of checksum
  171.       const CW_Height    : Double;          //Barcode height (mm/inch)
  172.       const CW_Angle     : Double           //Angle of left rotate (degree)
  173.       ):Double;
  174.     function H_PrnCanvasHeight(
  175.       const CH_Unit      : TUnits;          //Unit of width and length (mm/inch)
  176.       const CH_Type      : TBarType;        //Barcode type
  177.       const CH_Code      : string;          //Barcode value
  178.       const CH_Modul     : Double;          //Width of thin bar (mm/inch)
  179.       const CH_Ratio     : Double;          //Ratio of thick and thin bar
  180.       const CH_CheckSum  : TCheckSum;       //Algorithms of checksum
  181.       const CH_Height    : Double;          //Barcode height (mm/inch)
  182.       const CH_Angle     : Double           //Angle of left rotate (degree)
  183.       ):Double;
  184.     function H_GetBarTypeName(
  185.       const BN_BarType   : TBarType         //Barcode type
  186.       ): string;
  187.     property  BarTypeName  :string  read GetBarTypeName;
  188.     property  BarWidth     :Integer read GetBarWidth;
  189.     property  DockManager;
  190.   published
  191.     { Published declarations }
  192.     property BarType: TBarType read FBarType write SetBarType
  193.       default bcCode39;
  194.     property BarCode: string read FBarCode write SetBarCode;
  195.     property BarHeight:Integer   read FBarHeight write SetBarHeight default 0;
  196.     property Modul    :Integer    read FModul    write SetModul;
  197.     property Ratio    :Double     read FRatio    write SetRatio;
  198.     property CheckSum:TCheckSum read FCheckSum write SetCheckSum default csNone;
  199.     property ColorSpc:TColor  read FColorSpc write SetColorSpc default clWhite;
  200.     property ColorBar:TColor  read FColorBar write SetColorBar default clBlack;
  201.     property Orientation:TOrientation read FOrientation write SetOrientation
  202.       default toLeftRight;
  203.     property TextShow:TTextShow read FTextShow write SetTextShow default tsNone;
  204.     property TextPosition:TTextPosition read FTextPosition write SetTextPosition
  205.       default tpBottomCenter;
  206.     property TextColor:TColor read FTextColor write SetTextColor
  207.       default clWhite;
  208.     property AutoWidth: Boolean read FAutoWidth write SetAutoWidth default False;
  209.     property HMargin: Integer read FHMargin write SetHMargin default 0;
  210.     property About: string read GetAbout write SetAbout;
  211.     property OnChange: TNotifyEvent read FOnChange     write FOnChange;
  212.     property OnInvalidChar: TInvalidChar read FOnInvalidChar write FOnInvalidChar;
  213.     property Align;
  214.     property Alignment;
  215.     property Anchors;
  216.     property AutoSize;
  217.     property BevelInner;
  218.     property BevelOuter;
  219.     property BevelWidth;
  220.     property BiDiMode;
  221.     property BorderWidth;
  222.     property BorderStyle;
  223.     property Color;
  224.     property Constraints;
  225.     property Ctl3D;
  226.     property UseDockManager default True;
  227.     property DockSite;
  228.     property DragCursor;
  229.     property DragKind;
  230.     property DragMode;
  231.     property Enabled;
  232.     property FullRepaint;
  233.     property Font;
  234.     property Locked;
  235.     property ParentBiDiMode;
  236. {$IFDEF VER150}
  237.     property ParentBackground;
  238. {$ENDIF}
  239.     property ParentColor;
  240.     property ParentCtl3D;
  241.     property ParentFont;
  242.     property ParentShowHint;
  243.     property PopupMenu;
  244.     property ShowHint;
  245.     property TabOrder;
  246.     property TabStop;
  247.     property Visible;
  248.     property OnCanResize;
  249.     property OnClick;
  250.     property OnConstrainedResize;
  251. {$IFNDEF VER120}
  252.   {$IFNDEF VER125}
  253.     property OnContextPopup;
  254.   {$ENDIF}  
  255. {$ENDIF}
  256.     property OnDockDrop;
  257.     property OnDockOver;
  258.     property OnDblClick;
  259.     property OnDragDrop;
  260.     property OnDragOver;
  261.     property OnEndDock;
  262.     property OnEndDrag;
  263.     property OnEnter;
  264.     property OnExit;
  265.     property OnGetSiteInfo;
  266.     property OnMouseDown;
  267.     property OnMouseMove;
  268.     property OnMouseUp;
  269.     property OnResize;
  270.     property OnStartDock;
  271.     property OnStartDrag;
  272.     property OnUnDock;
  273.   end;
  274. implementation
  275. { Create method }
  276. constructor TBarCode.Create(Owner:TComponent);
  277. begin
  278.   inherited Create(owner);
  279.   FOrientation  := toLeftRight;
  280.   FModul        := 1;
  281.   FRatio        := 2.0;
  282.   FColorSpc     := clWhite;
  283.   FColorBar     := clBlack;
  284.   FBarCode      := '';
  285.   FBarType      := bcCode39;
  286.   FBarHeight    := 0;
  287.   FCheckSum     := csNone;
  288.   FTextColor    := clWhite;
  289.   FTextShow     := tsNone;
  290.   FTextPosition := tpBottomCenter;
  291.   FHMargin      := 0;
  292.   Caption       := '';
  293. end;
  294. { Destroy method }
  295. destructor TBarCode.Destroy;
  296. begin
  297.   inherited;
  298. end;
  299. { Assign method }
  300. procedure TBarCode.Assign(Source: TPersistent);
  301. var
  302.    BSource : TBarCode;
  303. begin
  304.   if Source is TBarCode then
  305.   begin
  306.     inherited;
  307.     BSource       := TBarCode(Source);
  308.     FOrientation  := BSource.FOrientation;
  309.     FModul        := BSource.FModul;
  310.     FRatio        := BSource.FRatio;
  311.     FColorSpc     := BSource.FColorSpc;
  312.     FColorBar     := BSource.FColorBar;
  313.     FBarType      := BSource.FBarType;
  314.     FBarCode      := BSource.FBarCode;
  315.     FBarHeight    := BSource.FBarHeight;
  316.     FCheckSum     := BSource.FCheckSum;
  317.     FTextColor    := BSource.FTextColor;
  318.     FTextShow     := BSource.FTextShow;
  319.     FTextPosition := BSource.FTextPosition;
  320.     FHMargin      := BSource.FHMargin;
  321.     FOnChange     := BSource.FOnChange;
  322.   end;
  323. end;
  324. { Paint method }
  325. procedure TBarCode.Paint;
  326. var
  327.   Angle: Double;
  328.   x,y,h: Integer;
  329.   BW: Integer;
  330.   SG: Integer;
  331. begin
  332.   inherited;
  333.   BW := BorderWidth;
  334.   if BevelInner <> bvNone then BW := BW + BevelWidth;
  335.   if BevelOuter <> bvNone then BW := BW + BevelWidth;
  336.   if BorderStyle = bsNone then SG := 0 else if Ctl3D then SG := 4 else SG := 2;
  337.   if FAutoWidth then AutoSetWidth(FHMargin);
  338.   x := 0;
  339.   y := 0;
  340.   h := 0;
  341.   Angle := 0;
  342.   Case FOrientation of
  343.     toLeftRight :
  344.     begin
  345.       if FBarHeight = 0 then h := Height - 2*BW - SG - 1 else h := FBarHeight;
  346.       Angle := 0;
  347.       if Alignment = taLeftJustify then
  348.        x := BW
  349.       else
  350.         if Alignment = taRightJustify then
  351.           x := Width - BW - SG - GetBarWidth
  352.         else
  353.           x := (Width - SG - GetBarWidth) div 2;
  354.       y := (Height - h - SG) div 2;
  355.     end;
  356.     toRightLeft :
  357.     begin
  358.       if FBarHeight = 0 then h := Height - 2*BW - SG - 1 else h := FBarHeight;
  359.       Angle := 180;
  360.       if Alignment = taLeftJustify then
  361.        x := BW - 1
  362.       else
  363.         if Alignment = taRightJustify then
  364.           x := Width - BW - SG - GetBarWidth - 1
  365.         else
  366.           x := (Width - SG - GetBarWidth) div 2;
  367.       y := (Height - h - SG) div 2;
  368.     end;
  369.     toTopBottom:
  370.     begin
  371.       if FBarHeight = 0 then h := Width - 2*BW - SG - 1  else h := FBarHeight;
  372.       Angle := 270;
  373.       if Alignment = taLeftJustify then
  374.        y := BW
  375.       else
  376.         if Alignment = taRightJustify then
  377.           y := Height - BW - SG - GetBarWidth
  378.         else
  379.           y := (Height - SG - GetBarWidth) div 2;
  380.       x := (Width - h - SG) div 2;
  381.     end;
  382.     toBottomTop:
  383.     begin
  384.       if FBarHeight = 0 then h := Width - 2*BW - SG - 1  else h := FBarHeight;
  385.       Angle := 90;
  386.       if Alignment = taLeftJustify then
  387.        y := BW - 1
  388.       else
  389.         if Alignment = taRightJustify then
  390.           y := Height - BW - SG - GetBarWidth - 1
  391.         else
  392.           y := (Height - SG - GetBarWidth) div 2;
  393.       x := (Width - h - SG) div 2;
  394.     end;
  395.   end;
  396.   //if FAutoWidth then AutoSetWidth(FHMargin);
  397.   H_DrawBar(Canvas,FBarType,FBarCode,FModul,FRatio,FCheckSum,x,y,h,Font,
  398.       FTextShow,FTextPosition,FColorBar,FColorSpc,FTextColor,Angle);
  399. end;
  400. { OnChange Event }
  401. procedure TBarCode.DoChange;
  402. begin
  403.  Paint;
  404.  if Assigned(FOnChange) then
  405.    FOnChange(Self);
  406. end;
  407. { Auto adjust width method }
  408. function TBarCode.AutoSetWidth(H_Margin: Integer): Integer;
  409. var
  410.   BW,SG: Integer;
  411. begin
  412.   BW := BorderWidth;
  413.   if BevelInner <> bvNone then BW := BW + BevelWidth;
  414.   if BevelOuter <> bvNone then BW := BW + BevelWidth;
  415.   if BorderStyle = bsNone then SG := 0 else if Ctl3D then SG := 4 else SG := 2;
  416.   result := GetBarWidth + 2 * (BW + SG + H_Margin);
  417.   if FOrientation in [toLeftRight, toRightLeft] then
  418.     Width := result
  419.   else
  420.     Height := result;
  421. end;
  422. { Get barcode angle of left rotate }
  423. function TBarCode.GetAngle:Double;
  424. begin
  425.   Case FOrientation of
  426.     toLeftRight : result := 0;
  427.     toRightLeft : result := 180;
  428.     toTopBottom : result := 270;
  429.     toBottomTop : result := 90;
  430.     else
  431.       result := 0;
  432.   end ;
  433. end;
  434. { Set HMargin }
  435. procedure TBarCode.SetHMargin(const Value: Integer);
  436. begin
  437.   if Value <> FHMargin then
  438.   begin
  439.     FHMargin := Value;
  440.     if FAutoWidth then DoChange;
  441.   end;
  442. end;
  443. { Get barcode width }
  444. function TBarCode.GetBarWidth: Integer;
  445. begin
  446.     result := H_GetBarWidth(FBarType,FBarCode,FModul,FRatio,FCheckSum);
  447.   end;
  448. { Set barcode value }
  449. procedure TBarCode.SetBarcode(const Value: string);
  450. label
  451.   CheckAgain, TryAgain;
  452. var
  453.   tmp: string;
  454.   chk: Boolean;
  455.   i: Integer;
  456.   NewValue: string;
  457. begin
  458.   if Value <> FBarCode then
  459.   begin
  460.     NewValue := Value;
  461.     if BCdata[FBarType].num then
  462.     begin
  463.       CheckAgain:
  464.       tmp := Trim(NewValue);
  465.       chk := False;
  466.       for i := 1 to Length(tmp) do
  467.         chk := chk or ((tmp[i] > '9') or (tmp[i] < '0'));
  468.       if chk then
  469.       begin
  470.         if Assigned(FOnInvalidChar) then FOnInvalidChar(Self, NewValue);
  471.         if NewValue = Value then
  472.           raise Exception.CreateFmt('%s: %s', [Value, ErrorBarcode])
  473.         else
  474.           goto CheckAgain;
  475.       end
  476.       else
  477.         FBarCode := NewValue;
  478.       DoChange;
  479.     end
  480.     else
  481.     begin
  482.       TryAgain:
  483.       chk := False;
  484.       try
  485.         FBarCode := NewValue;
  486.         DoChange;
  487.       except
  488.         if Assigned(FOnInvalidChar) then FOnInvalidChar(Self, NewValue);
  489.         if NewValue = Value then
  490.           raise Exception.CreateFmt('%s: %s', [Value, ErrorBarcode])
  491.         else
  492.           chk := True;
  493.       end;
  494.       if chk then goto TryAgain;
  495.     end;
  496.   end;
  497. end;
  498. { Set barcode type }
  499. procedure TBarCode.SetBarType(const Value: TBarType);
  500. begin
  501.   if Value <> FBarType then
  502.   try
  503.     FBarType := Value;
  504.     DoChange;
  505.   except
  506.     if Assigned(FOnInvalidChar) then FOnInvalidChar(Self, FBarcode) else raise;
  507.   end;
  508. end;
  509. { Set barcode height }
  510. procedure TBarCode.SetBarHeight(const Value: Integer);
  511. var
  512.   HeightLimt: Integer;
  513.   BW,SG: Integer;
  514. begin
  515.   BW := BorderWidth;
  516.   if BevelInner <> bvNone then BW := BW + BevelWidth;
  517.   if BevelOuter <> bvNone then BW := BW + BevelWidth;
  518.   if BorderStyle = bsNone then SG := 0 else if Ctl3D then SG := 4 else SG := 2;
  519.   if FOrientation in [toTopBottom, toBottomTop] then
  520.     HeightLimt := Width - BW * 2 - SG - 1
  521.   else
  522.     HeightLimt := Height - BW * 2 - SG - 1;
  523.   if Value <> FBarHeight then
  524.   begin
  525.     if (Value >= 0) and (Value <= HeightLimt) then
  526.       FBarHeight := Value
  527.     else
  528.       FBarHeight := 0;
  529.     DoChange;
  530.   end;
  531. end;
  532. { Get barcode height }
  533. function  TBarCode.GetBarHeight: Integer;
  534. var
  535.   BW,SG: Integer;
  536. begin
  537.   BW := BorderWidth;
  538.   if BevelInner <> bvNone then BW := BW + BevelWidth;
  539.   if BevelOuter <> bvNone then BW := BW + BevelWidth;
  540.   if BorderStyle = bsNone then SG := 0 else if Ctl3D then SG := 4 else SG := 2;
  541.   if FOrientation in [toTopBottom, toBottomTop] then
  542.     Result := Width - BW * 2 - SG - 1
  543.   else
  544.     Result := Height - BW * 2 - SG - 1;
  545.   if (FBarHeight > 0) and (FBarHeight < Result) then
  546.     Result := FBarHeight
  547.   else
  548.     FBarHeight := 0;
  549. end;
  550. { Set barcode Algorithms of checksum }
  551. procedure TBarCode.SetCheckSum(const Value: TCheckSum);
  552. begin
  553.   if Value <> FCheckSum then
  554.   begin
  555.      FCheckSum := Value;
  556.      DoChange;
  557.   end;
  558. end;
  559. { Set ratio of thick and thin bar }
  560. procedure TBarCode.SetRatio(const Value: Double);
  561. begin
  562.   if Value <> FRatio then
  563.   begin
  564.      FRatio := Value;
  565.      DoChange;
  566.   end;
  567. end;
  568. { Set color of bar }
  569. procedure TBarCode.SetColorBar(const Value: TColor);
  570. begin
  571.   if Value <> FColorBar then
  572.   begin
  573.      FColorBar := Value;
  574.      DoChange;
  575.   end;
  576. end;
  577. { Set background color of barcode }
  578. procedure TBarCode.SetColorSpc(const Value: TColor);
  579. begin
  580.   if Value <> FColorSpc then
  581.   begin
  582.      FColorSpc := Value;
  583.      DoChange;
  584.   end;
  585. end;
  586. { Set width of thin bar }
  587. procedure TBarCode.SetModul(const Value: Integer);
  588. begin
  589.   if Value <> FModul then
  590.   begin
  591.     if (Value >= 1) and (Value < 50) then
  592.     begin
  593.       FModul := Value;
  594.       DoChange;
  595.     end;
  596.   end;
  597. end;
  598. { Set Orientation of barcode }
  599. procedure TBarCode.SetOrientation(const Value: TOrientation);
  600. begin
  601.   if Value <> FOrientation then
  602.   begin
  603.      FOrientation := Value;
  604.      DoChange;
  605.   end;
  606. end;
  607. { Set barcode of text }
  608. procedure TBarCode.SetTextColor(const Value: TColor);
  609. begin
  610.   if Value <> FTextColor then
  611.   begin
  612.      FTextColor := Value;
  613.      DoChange;
  614.   end;
  615. end;
  616. { Set position of text }
  617. procedure TBarCode.SetTextPosition(const Value: TTextPosition);
  618. begin
  619.   if Value <> FTextPosition then
  620.   begin
  621.      FTextPosition := Value;
  622.      DoChange;
  623.   end;
  624. end;
  625. procedure TBarCode.SetAutoWidth(const Value: Boolean);
  626. begin
  627.   if Value <> FAutoWidth then
  628.   begin
  629.      FAutoWidth := Value;
  630.      DoChange;
  631.   end;
  632. end;
  633. { Set content of text }
  634. procedure TBarCode.SetTextShow(const Value: TTextShow);
  635. begin
  636.   if Value <> FTextShow then
  637.   begin
  638.      FTextShow := Value;
  639.      DoChange;
  640.   end;
  641. end;
  642. { Get type name of current barcode }
  643. function TBarCode.GetBarTypeName:string;
  644. begin
  645.   result := BCdata[FBarType].Name;
  646. end;
  647. { Get About }
  648. function TBarCode.GetAbout: string;
  649. begin
  650.   result := CopyrightInfo;
  651. end;
  652. { Set About }
  653. procedure TBarCode.SetAbout(const Value: string);
  654. begin
  655. //
  656. end;
  657. { Draw current barcode (defing angle) }
  658. procedure TBarCode.Draw(DCanvas:TCanvas;const DLeft:Integer; const DTop:Integer;
  659.   const DHeight:Integer; const DAngle:Double);
  660. begin
  661.     H_DrawBar(DCanvas,FBarType,FBarCode,FModul,FRatio,FCheckSum,DLeft,DTop,
  662.       DHeight,Font,FTextShow,FTextPosition,FColorBar,FColorSpc,FTextColor,DAngle);
  663. end;
  664. { Draw current barcode (current orientation) }
  665. procedure TBarCode.Draw(DCanvas:TCanvas; const DLeft:Integer;
  666.   const DTop:Integer; const DHeight:Integer);
  667. begin
  668.     H_DrawBar(DCanvas,FBarType,FBarCode,FModul,FRatio,FCheckSum,DLeft,DTop,
  669.       DHeight,Font,FTextShow,FTextPosition,FColorBar,FColorSpc,FTextColor,
  670.       GetAngle)
  671. end;
  672. { Get canvas height of current barcode (define angle) }
  673. function TBarCode.GetCanvasHeight(const DHeight:Integer;
  674.   const DAngle:Double): Integer;
  675. begin
  676.   result := H_GetCanvasHeight(FBarType,FBarCode,FModul,FRatio,FCheckSum,DHeight,
  677.     DAngle);
  678. end;
  679. { Get canvas height of current barcode (current orientation) }
  680. function TBarCode.GetCanvasHeight(const DHeight:Integer): Integer;
  681. begin
  682.   result := H_GetCanvasHeight(FBarType,FBarCode,FModul,FRatio,FCheckSum,DHeight,
  683.     GetAngle);
  684. end;
  685. { Get canvas width of current barcode (define angle) }
  686. function TBarCode.GetCanvasWidth(const DHeight:Integer;
  687.   const DAngle:Double): Integer;
  688. begin
  689.   result := H_GetCanvasWidth(FBarType,FBarCode,FModul,FRatio,FCheckSum,DHeight,
  690.     DAngle);
  691. end;
  692. { Get canvas width of current barcode (current orientation) }
  693. function TBarCode.GetCanvasWidth(const DHeight:Integer): Integer;
  694. begin
  695.   result := H_GetCanvasWidth(FBarType,FBarCode,FModul,FRatio,FCheckSum,DHeight,
  696.     GetAngle);
  697. end;
  698. { Print current barcode (define angle) }
  699. procedure TBarCode.Print(const DUnit:TUnits; const DLeft:Double;
  700.   const DTop:Double; const DHeight:Double; const DModul:Double;
  701.   const DAngle:Double);
  702. begin
  703.   H_PrintBar(DUnit,FBarType,FBarCode,DModul,FRatio,FCheckSum,DLeft,DTop,DHeight,
  704.     Font,FTextShow,FTextPosition,FColorBar,FColorSpc,FTextColor,DAngle);
  705. end;
  706. { Print current barcode (current orientation) }
  707. procedure TBarCode.Print(const DUnit:TUnits; const DLeft:Double;
  708.   const DTop:Double; const DHeight:Double; const DModul:Double);
  709. begin
  710.   H_PrintBar(DUnit,FBarType,FBarCode,DModul,FRatio,FCheckSum,DLeft,DTop,DHeight,
  711.     Font,FTextShow,FTextPosition,FColorBar,FColorSpc,FTextColor,GetAngle);
  712. end;
  713. { Get Print widht of current barcode (mm/inch) }
  714. function  TBarCode.GetPrnBarWidth(const DUnit:TUnits;
  715.   const DModul:Double): Double;
  716. begin
  717.     result := H_GetPrnBarWidth(DUnit,FBarType,FBarCode,DModul,FRatio,FCheckSum);
  718. end;
  719. { Get Print cancas height of current barcode (mm/inch, define angle) }
  720. function  TBarCode.GetPrnCanvasHeight(const DUnit:TUnits; const DHeight:Double;
  721.   const DModul:Double; const DAngle:Double): Double;
  722. begin
  723.     result := H_PrnCanvasWidth(DUnit,FBarType,FBarCode,DModul,FRatio,FCheckSum,
  724.       DHeight,DAngle);
  725. end;
  726. { Get Print cancas width of current barcode (mm/inch, define angle) }
  727. function  TBarCode.GetPrnCanvasWidth(const DUnit:TUnits; const DHeight:Double;
  728.   const DModul:Double; const DAngle:Double): Double;
  729. begin
  730.     result := H_PrnCanvasHeight(DUnit,FBarType,FBarCode,DModul,FRatio,
  731.       FCheckSum,DHeight,DAngle);
  732. end;
  733. { Get Print cancas height of current barcode (mm/inch, current orientation) }
  734. function  TBarCode.GetPrnCanvasHeight(const DUnit:TUnits; const DHeight:Double;
  735.   const DModul:Double): Double;
  736. begin
  737.     result := H_PrnCanvasWidth(DUnit,FBarType,FBarCode,DModul,FRatio,FCheckSum,
  738.       DHeight,GetAngle);
  739. end;
  740. { Get Print cancas width of current barcode (mm/inch, current orientation) }
  741. function  TBarCode.GetPrnCanvasWidth(const DUnit:TUnits; const DHeight:Double;
  742.   const DModul:Double): Double;
  743. begin
  744.     result := H_PrnCanvasHeight(DUnit,FBarType,FBarCode,DModul,FRatio,FCheckSum,
  745.       DHeight,GetAngle);
  746. end;
  747. { Draw a barcode on canvas }
  748. procedure TBarCode.H_DrawBar(H_Canvas:TCanvas; const H_BarType:TBarType;
  749.   const H_BarCode:string; const H_Modul:Integer; const H_Ratio:Double;
  750.   const H_CheckSum:TCheckSum; const H_Left:Integer; const H_Top:Integer;
  751.   const H_Height:Integer; const H_TextFont:TFont; const H_TextShow:TTextShow;
  752.   const H_TextPosition:TTextPosition; const H_BarColor:TColor;
  753.   const H_SpcColor:TColor; const H_BackColor:TColor; const H_Angle:Double);
  754. begin
  755.   HBarCode.H_DrawBar(H_Canvas, H_BarType, H_BarCode, H_Modul, H_Ratio,
  756.     H_CheckSum, H_Left, H_Top, H_Height, H_TextFont, H_TextShow, H_TextPosition,
  757.     H_BarColor, H_SpcColor, H_BackColor, H_Angle);
  758. end;
  759. { Get barcode width to display (pixels) }
  760. function  TBarCode.H_GetBarWidth(const BW_Type:TBarType; const BW_Code:string;
  761.   const BW_Modul:Integer; const BW_Ratio:Double;
  762.   const BW_CheckSum:TCheckSum):Integer;
  763. begin
  764.   result := HBarCode.H_GetBarWidth(BW_Type, BW_Code, BW_Modul, BW_Ratio,
  765.     BW_CheckSum);
  766. end;
  767. { Get cancas width to display (pixels) }
  768. function TBarCode.H_GetCanvasWidth(const CW_Type:TBarType; const CW_Code:string;
  769.   const CW_Modul:Integer; const CW_Ratio:Double; const CW_CheckSum:TCheckSum;
  770.   const CW_Height:Integer; const CW_Angle:Double):Integer;
  771. begin
  772.   result := HBarCode.H_GetCanvasWidth(CW_Type, CW_Code, CW_Modul, CW_Ratio,
  773.     CW_CheckSum, CW_Height, CW_Angle);
  774. end;
  775. { Get cancas height to display (pixels) }
  776. function TBarCode.H_GetCanvasHeight(const CH_Type:TBarType;
  777.   const CH_Code:string; const CH_Modul:Integer; const CH_Ratio:Double;
  778.   const CH_CheckSum:TCheckSum; const CH_Height:Integer;
  779.   const CH_Angle:Double):Integer;
  780. begin
  781.   result := HBarCode.H_GetCanvasHeight(CH_Type, CH_Code, CH_Modul, CH_Ratio,
  782.     CH_CheckSum, CH_Height, CH_Angle);
  783. end;
  784. { Print barcode }
  785. procedure TBarCode.H_PrintBar(const H_Unit:TUnits; const H_BarType:TBarType;
  786.   const H_BarCode:string; const H_Modul:Double; const H_Ratio:Double;
  787.   const H_CheckSum:TCheckSum; const H_Left:Double; const H_Top:Double;
  788.   const H_Height:Double; const H_TextFont:TFont; const H_TextShow:TTextShow;
  789.   const H_TextPosition:TTextPosition; const H_BarColor:TColor;
  790.   const H_SpcColor:TColor; const H_BackColor:TColor; const H_Angle:Double);
  791. begin
  792.   HBarCode.H_PrintBar(H_Unit, H_BarType, H_BarCode, H_Modul, H_Ratio,
  793.     H_CheckSum, H_Left,H_Top, H_Height, H_TextFont, H_TextShow, H_TextPosition,
  794.     H_BarColor, H_SpcColor, H_BackColor, H_Angle);
  795. end;
  796. { Get width of barcode to print (mm/inch) }
  797. function TBarCode.H_GetPrnBarWidth(const BW_Unit:TUnits; const BW_Type:TBarType;
  798.   const BW_Code:string; const BW_Modul:Double; const BW_Ratio:Double;
  799.   const BW_CheckSum:TCheckSum):Double;
  800. begin
  801.   result := HBarCode.H_GetPrnBarWidth(BW_Unit, BW_Type, BW_Code, BW_Modul,
  802.     BW_Ratio, BW_CheckSum);
  803. end;
  804. { Get width of canvas to print (mm/inch) }
  805. function TBarCode.H_PrnCanvasWidth(const CW_Unit:TUnits; const CW_Type:TBarType;
  806.   const CW_Code:string; const CW_Modul:Double; const CW_Ratio:Double;
  807.   const CW_CheckSum:TCheckSum; const CW_Height:Double;
  808.   const CW_Angle:Double):Double;
  809. begin
  810.   result := HBarCode.H_PrnCanvasWidth(CW_Unit, CW_Type, CW_Code, CW_Modul,
  811.     CW_Ratio, CW_CheckSum, CW_Height, CW_Angle);
  812. end;
  813. { Get height of canvas to print (mm/inch) }
  814. function TBarCode.H_PrnCanvasHeight(const CH_Unit:TUnits;
  815.   const CH_Type:TBarType; const CH_Code:string; const CH_Modul:Double;
  816.   const CH_Ratio:Double; const CH_CheckSum:TCheckSum;  const CH_Height:Double;
  817.   const CH_Angle:Double):Double;
  818. begin
  819.   result := HBarCode.H_PrnCanvasHeight(CH_Unit, CH_Type, CH_Code, CH_Modul,
  820.     CH_Ratio, CH_CheckSum, CH_Height, CH_Angle);
  821. end;
  822. { Get name of barcode type }
  823. function TBarCode.H_GetBarTypeName(const BN_BarType:TBarType): string;
  824. begin
  825.   result := BCData[BN_BarType].Name;
  826. end;
  827. end.