You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8356 8e941d3f-bd1b-0410-a28a-d453659cc2b4
611 lines
22 KiB
ObjectPascal
611 lines
22 KiB
ObjectPascal
unit main;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, ExtCtrls,
|
|
StdCtrls, Spin, Buttons, ExtDlgs, ubarcodes;
|
|
|
|
type
|
|
|
|
{ TMainForm }
|
|
|
|
TMainForm = class(TForm)
|
|
BarcodesTree: TTreeView;
|
|
btnSaveToFile: TBitBtn;
|
|
btnCopyToClipboard: TBitBtn;
|
|
btnFont: TButton;
|
|
cbHumanReadableText: TCheckBox;
|
|
cbAddChecksum: TCheckBox;
|
|
cbDisplayChecksum: TCheckBox;
|
|
cbAutoSize: TCheckBox;
|
|
cbRecommendedSymbolSize: TCheckBox;
|
|
clbColor: TColorButton;
|
|
clbForeground: TColorButton;
|
|
cmbBearerBarsBox: TComboBox;
|
|
clbBackground: TColorButton;
|
|
cbMaxicode_CountryCode: TComboBox;
|
|
edMaxicode_Primary: TEdit;
|
|
edMaxicode_ServiceCode: TEdit;
|
|
edMaxicode_Postcode: TEdit;
|
|
edText: TEdit;
|
|
FontDialog: TFontDialog;
|
|
gbGeometry: TGroupBox;
|
|
gbShow: TGroupBox;
|
|
gbChecksum: TGroupBox;
|
|
gbColors: TGroupBox;
|
|
lblMaxicode_Primary: TLabel;
|
|
lblMaxicode_ServiceCode: TLabel;
|
|
lblMaxicode_CountryCode: TLabel;
|
|
lblMaxicode_Postcode: TLabel;
|
|
lblWhiteSpaceWidth: TLabel;
|
|
lblScale: TLabel;
|
|
lblError: TLabel;
|
|
lblMargin: TLabel;
|
|
lblText: TLabel;
|
|
lblSymbolHeight: TLabel;
|
|
nbOptions: TNotebook;
|
|
pgOptions_Maxicode: TPage;
|
|
pgOptions_Plessey: TPage;
|
|
pgOptions_QR: TPage;
|
|
Panel1: TPanel;
|
|
Panel2: TPanel;
|
|
BarcodePanel: TPanel;
|
|
rgMaxicode_Mode: TRadioGroup;
|
|
rgPlessey_Checkchar: TRadioGroup;
|
|
rgQR_ECCLevel: TRadioGroup;
|
|
SaveDialog1: TSaveDialog;
|
|
seWhiteSpaceWidth: TSpinEdit;
|
|
seScale: TSpinEdit;
|
|
seMargin: TSpinEdit;
|
|
seSymbolHeight: TSpinEdit;
|
|
btnSampleText: TSpeedButton;
|
|
Splitter1: TSplitter;
|
|
procedure BarcodeChange(Sender: TObject);
|
|
procedure BarcodesTreeChange(Sender: TObject; Node: TTreeNode);
|
|
procedure BarcodesTreeCustomDrawItem(Sender: TCustomTreeView;
|
|
Node: TTreeNode; {%H-}State: TCustomDrawState; var DefaultDraw: Boolean);
|
|
procedure btnCopyToClipboardClick(Sender: TObject);
|
|
procedure btnFontClick(Sender: TObject);
|
|
procedure btnSampleTextClick(Sender: TObject);
|
|
procedure btnSaveToFileClick(Sender: TObject);
|
|
procedure cbAutoSizeChange(Sender: TObject);
|
|
procedure cbMaxicode_CountryCodeChange(Sender: TObject);
|
|
procedure cbRecommendedSymbolSizeChange(Sender: TObject);
|
|
procedure edMaxicode_PostcodeChange(Sender: TObject);
|
|
procedure edMaxicode_PrimaryChange(Sender: TObject);
|
|
procedure edMaxicode_ServiceCodeChange(Sender: TObject);
|
|
procedure edTextChange(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure rgMaxicode_ModeClick(Sender: TObject);
|
|
procedure rgPlessey_CheckcharClick(Sender: TObject);
|
|
procedure rgQR_ECCLevelClick(Sender: TObject);
|
|
procedure SaveDialogTypeChange(Sender: TObject);
|
|
private
|
|
FBarCode: TLazBarcodeCustomText;
|
|
FFileName: String;
|
|
procedure PopulateBarcodesTree;
|
|
procedure SelectBarCode(ANode: TTreeNode);
|
|
procedure UpdateErrorMsg;
|
|
|
|
public
|
|
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
uses
|
|
TypInfo;
|
|
|
|
type
|
|
TLazBarcodeClass = class of TLazBarcodeCustomText;
|
|
TBarcodeAccess = class(TLazBarcodeCustomText);
|
|
TSimpleBarcodeAccess = class(TSimpleBarcode);
|
|
|
|
{ We must register all barcode classes because barcodes will be created in this
|
|
application based on a string containing the class name. }
|
|
procedure RegisterBarcodes;
|
|
begin
|
|
RegisterClass(TBarcodeC11);
|
|
RegisterClass(TBarcodeC128);
|
|
RegisterClass(TBarcode2of5);
|
|
RegisterClass(TBarcode3of9);
|
|
RegisterClass(TBarcodeEAN);
|
|
RegisterClass(TBarcodeChannelCode);
|
|
RegisterClass(TBarcodePlessey);
|
|
RegisterClass(TBarcodeTelepen);
|
|
RegisterClass(TBarcodeMedical);
|
|
RegisterClass(TBarcodePostal);
|
|
RegisterClass(TBarcodePDF417);
|
|
|
|
RegisterClass(TBarcodeQR);
|
|
RegisterClass(TBarcodeMicroQR);
|
|
RegisterClass(TBarcodeAztec);
|
|
RegisterClass(TBarcodeAztecRune);
|
|
RegisterClass(TBarcodeDatamatrix);
|
|
RegisterClass(TBarcodeMaxiCode);
|
|
end;
|
|
|
|
|
|
{ TMainForm }
|
|
|
|
procedure TMainForm.BarcodeChange(Sender: TObject);
|
|
begin
|
|
if FBarcode = nil then
|
|
exit;
|
|
|
|
if Sender = seScale then
|
|
TBarcodeAccess(FBarcode).Scale := seScale.Value
|
|
else
|
|
if Sender = seMargin then
|
|
TBarcodeAccess(FBarcode).Margin := seMargin.Value
|
|
else
|
|
if Sender = seWhiteSpaceWidth then
|
|
TBarcodeAccess(FBarcode).WhiteSpaceWidth := seWhiteSpaceWidth.Value
|
|
else
|
|
if Sender = seSymbolHeight then
|
|
TBarcodeAccess(FBarcode).SymbolHeight := seSymbolHeight.Value
|
|
else
|
|
if (Sender = cmbBearerBarsBox) then
|
|
TBarcodeAccess(FBarcode).BearerBarMode := TBarcodeBearerBarMode(cmbBearerBarsBox.ItemIndex)
|
|
else
|
|
if Sender = clbColor then
|
|
TBarcodeAccess(FBarcode).Color := clbColor.ButtonColor
|
|
else
|
|
if Sender = clbBackground then
|
|
TBarcodeAccess(FBarcode).BackgroundColor := clbBackground.ButtonColor
|
|
else
|
|
if Sender = clbForeground then
|
|
TBarcodeAccess(FBarcode).ForegroundColor := clbForeground.ButtonColor
|
|
else
|
|
if (Sender = cbHumanReadableText) and (FBarcode is TCustomBarcode) then
|
|
TBarcodeAccess(FBarcode).ShowHumanReadableText := cbHumanReadableText.Checked
|
|
else
|
|
if (Sender = cbAddChecksum) and (FBarcode is TSimpleBarcode) then
|
|
begin
|
|
TSimpleBarcodeAccess(FBarcode).AddChecksum := cbAddChecksum.Checked;
|
|
cbDisplayChecksum.Enabled := cbAddChecksum.Checked;
|
|
end
|
|
else
|
|
if (Sender = cbDisplayChecksum) and (FBarcode is TSimpleBarcode) then
|
|
TSimpleBarcodeAccess(FBarcode).DisplayChecksum := cbDisplayChecksum.Checked;
|
|
end;
|
|
|
|
procedure TMainForm.btnSampleTextClick(Sender: TObject);
|
|
begin
|
|
if FBarCode <> nil then
|
|
begin
|
|
FBarcode.SampleText;
|
|
edText.Text := FBarcode.Text;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.BarcodesTreeChange(Sender: TObject; Node: TTreeNode);
|
|
begin
|
|
SelectBarcode(Node);
|
|
end;
|
|
|
|
procedure TMainForm.BarcodesTreeCustomDrawItem(Sender: TCustomTreeView;
|
|
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
|
|
begin
|
|
if (Node.HasChildren) or (Node.Level = 0) then
|
|
Sender.Canvas.Font.Style := [fsBold]
|
|
else
|
|
Sender.Canvas.Font.Style := [];
|
|
DefaultDraw := true;
|
|
end;
|
|
|
|
procedure TMainForm.btnCopyToClipboardClick(Sender: TObject);
|
|
begin
|
|
FBarcode.CopyToClipboard;
|
|
end;
|
|
|
|
procedure TMainForm.btnFontClick(Sender: TObject);
|
|
begin
|
|
FontDialog.Font.Assign(FBarcode.Font);
|
|
if FontDialog.Execute then
|
|
FBarcode.Font.Assign(FontDialog.Font);
|
|
end;
|
|
|
|
procedure TMainForm.btnSaveToFileClick(Sender: TObject);
|
|
begin
|
|
with TSaveDialog.Create(self) do
|
|
try
|
|
Filter := 'Windows bitmap files (*.bmp)|*.bmp|' +
|
|
'Portable network graphic files (*.png)|*.png|' +
|
|
'JPEG image files (*.jpg;*.jpeg)|*.jpg;*.jpeg|' +
|
|
'TIFF image files (*.tiff; *.tif)|*.tiff;*.tif|'+
|
|
'XPM image files (*.xpm)|*.xpm|' +
|
|
'Scalable vector graphics files (*.svg)|*.svg|'+
|
|
'Encapsulated PostScript files (*.eps;*.ps)|*.eps;*.ps|'+
|
|
'All files (*.*)|*.*';
|
|
FilterIndex := 2;
|
|
DefaultExt := '.png';
|
|
InitialDir := ExtractFileName(FFileName);
|
|
OnTypeChange := @SaveDialogTypeChange;
|
|
if Execute then
|
|
begin
|
|
FFileName := FileName;
|
|
case lowercase(ExtractFileExt(FFileName)) of
|
|
'.bmp':
|
|
FBarcode.SaveToFile(FFileName, TBitmap);
|
|
'.png':
|
|
FBarcode.SaveToFile(FFileName, TPortableNetworkGraphic);
|
|
'.jpg', '.jpeg':
|
|
FBarcode.SaveTofile(FFileName, TJpegImage);
|
|
'.tif', '.tiff':
|
|
FBarcode.SaveToFile(FFileName, TTiffImage);
|
|
'.xpm':
|
|
FBarcode.SaveToFile(FFileName, TPixmap);
|
|
'.svg':
|
|
FBarcode.SaveToSvgFile(FFileName);
|
|
'.eps', '.ps':
|
|
Fbarcode.SaveToEpsFile(FFileName);
|
|
else
|
|
raise Exception.Create('Image type not supported.');
|
|
end;
|
|
end;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.cbAutoSizeChange(Sender: TObject);
|
|
begin
|
|
if Assigned(FBarcode) then
|
|
begin
|
|
FBarcode.AutoSize := cbAutoSize.Checked;
|
|
if FBarcode.AutoSize then
|
|
begin
|
|
FBarcode.Align := alNone;
|
|
FBarcode.AnchorSideLeft.Control := FBarcode.Parent;
|
|
FBarcode.AnchorSideLeft.Side := asrCenter;
|
|
FBarcode.AnchorSideTop.Control := FBarcode.Parent;
|
|
FBarcode.AnchorSideTop.Side := asrCenter;
|
|
end else
|
|
begin
|
|
FBarcode.AnchorSideLeft.Control := nil;
|
|
FBarcode.AnchorSideTop.Control := nil;
|
|
FBarcode.Align := alClient;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.cbMaxicode_CountryCodeChange(Sender: TObject);
|
|
var
|
|
s: String;
|
|
begin
|
|
if FBarcode is TBarcodeMaxicode then
|
|
begin
|
|
s := cbMaxicode_Countrycode.Items[cbMaxicode_Countrycode.ItemIndex];
|
|
TBarcodeMaxicode(FBarcode).CountryCode := StrToInt(Copy(s, 1, 3));
|
|
edMaxicode_Primary.Text := TBarcodeMaxicode(FBarcode).Primary;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.cbRecommendedSymbolSizeChange(Sender: TObject);
|
|
begin
|
|
seScale.Enabled := not cbRecommendedSymbolSize.Checked;
|
|
lblScale.Enabled := seScale.Enabled;
|
|
seMargin.Enabled := not cbRecommendedSymbolSize.Checked;
|
|
lblMargin.Enabled := seMargin.Enabled;
|
|
seWhitespaceWidth.Enabled := not cbRecommendedSymbolSize.Checked and IsPublishedProp(FBarcode, 'WhiteSpaceWidth');
|
|
lblWhitespaceWidth.Enabled := seWhitespaceWidth.Enabled;
|
|
seSymbolHeight.Enabled := not cbRecommendedSymbolSize.Checked and IsPublishedProp(FBarcode, 'SymbolHeight');
|
|
lblSymbolHeight.Enabled := seSymbolHeight.Enabled;
|
|
cmbBearerBarsBox.Enabled := not cbRecommendedSymbolSize.Checked and IsPublishedProp(FBarcode, 'BearerBarMode');
|
|
if FBarcode is TSimpleBarcode then
|
|
begin
|
|
TSimpleBarcode(FBarcode).RecommendedSymbolSize := cbRecommendedSymbolSize.Checked;
|
|
if not cbRecommendedSymbolSize.Checked then
|
|
begin
|
|
TSimpleBarcode(FBarcode).Scale := seScale.Value;
|
|
TSimpleBarcodeAccess(FBarcode).SymbolHeight := seSymbolHeight.Value;
|
|
TSimpleBarcode(FBarcode).Margin := seMargin.Value;
|
|
TSimpleBarcodeAccess(FBarcode).WhitespaceWidth := seWhiteSpaceWidth.Value;
|
|
TSimpleBarcodeAccess(FBarcode).BearerBarMode := TBarcodeBearerBarMode(cmbBearerBarsBox.ItemIndex);
|
|
end;
|
|
end else
|
|
if FBarcode is TBarcodePDF417 then
|
|
begin
|
|
seSymbolHeight.Enabled := not cbRecommendedSymbolSize.Checked;
|
|
lblSymbolHeight.Enabled := seSymbolHeight.Enabled;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.edMaxicode_PostcodeChange(Sender: TObject);
|
|
begin
|
|
if FBarcode is TBarcodeMaxicode then
|
|
begin
|
|
TBarcodeMaxicode(FBarcode).Postcode := edMaxicode_Postcode.Text;
|
|
edMaxicode_Primary.Text := TBarcodeMaxicode(FBarcode).Primary;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.edMaxicode_PrimaryChange(Sender: TObject);
|
|
begin
|
|
if FBarcode is TBarcodeMaxicode then
|
|
begin
|
|
TBarcodeMaxicode(FBarcode).Primary := edMaxicode_Primary.Text;
|
|
edMaxicode_Primary.Text := TBarcodeMaxicode(FBarcode).Primary;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.edMaxicode_ServiceCodeChange(Sender: TObject);
|
|
begin
|
|
if FBarcode is TBarcodeMaxicode then
|
|
begin
|
|
TBarcodeMaxicode(FBarcode).Servicecode := StrToInt(edMaxicode_Servicecode.Text);
|
|
edMaxicode_Primary.Text := TBarcodeMaxicode(FBarcode).Primary;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.FormCreate(Sender: TObject);
|
|
begin
|
|
nbOptions.PageIndex := -1;
|
|
PopulateBarcodesTree;
|
|
end;
|
|
|
|
procedure TMainForm.rgMaxicode_ModeClick(Sender: TObject);
|
|
begin
|
|
if FBarcode is TBarcodeMaxicode then
|
|
begin
|
|
case rgMaxicode_Mode.ItemIndex of
|
|
-1: exit;
|
|
0: TBarcodeMaxicode(FBarcode).Mode := mcmAuto;
|
|
1: TBarcodeMaxicode(FBarcode).Mode := mcmMode2;
|
|
2: TBarcodeMaxicode(FBarcode).Mode := mcmMode3;
|
|
3: TBarcodeMaxicode(FBarcode).Mode := mcmMode4;
|
|
4: TBarcodeMaxicode(FBarcode).Mode := mcmMode5;
|
|
5: TBarcodeMaxicode(FBarcode).Mode := mcmMode6;
|
|
else raise Exception.Create('Mode not supported.');
|
|
end;
|
|
edMaxicode_Primary.Text := TBarcodeMaxicode(FBarcode).Primary;
|
|
end;
|
|
|
|
edMaxicode_Postcode.Visible := rgMaxicode_Mode.ItemIndex in [0, 1, 2];
|
|
lblMaxicode_Postcode.Visible := edMaxicode_Postcode.Visible;
|
|
cbMaxicode_Countrycode.Visible := edMaxicode_Postcode.Visible;
|
|
lblMaxicode_Countrycode.Visible := edMaxicode_Postcode.Visible;
|
|
edMaxicode_ServiceCode.Visible := edMaxicode_Postcode.Visible;
|
|
lblMaxicode_ServiceCode.Visible := edMaxicode_Postcode.Visible;
|
|
edMaxicode_Primary.Visible := edMaxicode_Postcode.Visible;
|
|
lblMaxicode_Primary.Visible := edMaxicode_Postcode.Visible;
|
|
end;
|
|
|
|
procedure TMainForm.rgPlessey_CheckcharClick(Sender: TObject);
|
|
begin
|
|
if FBarcode is TBarcodePlessey then
|
|
TBarcodePlessey(FBarcode).CheckChar := TPlesseyCheckChar(rgPlessey_CheckChar.ItemIndex);
|
|
end;
|
|
|
|
procedure TMainForm.rgQR_ECCLevelClick(Sender: TObject);
|
|
begin
|
|
if FBarcode is TBarcodeQR then
|
|
TBarcodeQR(FBarcode).ECCLevel := TBarcodeQR_ECCLevel(rgQR_ECCLevel.ItemIndex);
|
|
end;
|
|
|
|
procedure TMainForm.SaveDialogTypeChange(Sender: TObject);
|
|
var
|
|
dlg: TSaveDialog;
|
|
L: TStrings;
|
|
idx: Integer;
|
|
begin
|
|
dlg := Sender as TSaveDialog;
|
|
L := TStringList.Create;
|
|
try
|
|
L.StrictDelimiter := true;
|
|
L.Delimiter := '|';
|
|
L.DelimitedText := dlg.Filter;
|
|
idx := (dlg.FilterIndex - 1) * 2 + 1;
|
|
dlg.DefaultExt := ExtractfileExt(L[idx]);
|
|
finally
|
|
L.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.edTextChange(Sender: TObject);
|
|
begin
|
|
FBarcode.Text := edText.Text;
|
|
UpdateErrorMsg;
|
|
end;
|
|
|
|
procedure TMainForm.PopulateBarcodesTree;
|
|
var
|
|
node, child: TTreeNode;
|
|
begin
|
|
with BarcodesTree do begin
|
|
Items.BeginUpdate;
|
|
try
|
|
Items.Clear;
|
|
|
|
node := Items.AddChild(nil, '1-DIMENSIONAL');
|
|
child := Items.AddChildObject(node, 'Code 11', PChar('TBarcodeC11'));
|
|
child := Items.AddChildObject(node, 'Code 128 and related', PChar('TBarcodeC128'));
|
|
Items.AddChildObject(child, 'Code-128', Pointer(PtrInt(bctCode128)));
|
|
Items.AddChildObject(child, 'EAN-128', Pointer(PtrInt(bctEAN128)));
|
|
child := Items.AddChildObject(node, '2-of-5 codes', PChar('TBarcode2of5'));
|
|
Items.AddChildObject(child, 'Standard 2-of-5', Pointer(PtrInt(bctCode25Standard)));
|
|
Items.AddChildObject(child, 'Data Logic 2-of-5', Pointer(PtrInt(bctCode25DataLogic)));
|
|
Items.AddChildObject(child, 'IATA 2-of-5', Pointer(PtrInt(bctCode25IATA)));
|
|
Items.AddChildObject(child, 'Industrial 2-of-5', Pointer(PtrInt(bctCode25Industrial)));
|
|
Items.AddChildObject(child, 'Interleaved 2-of-5', Pointer(PtrInt(bctCode25Interleaved)));
|
|
Items.AddChildObject(child, 'ITF-14', Pointer(PtrInt(bctITF14)));
|
|
child := Items.AddChildObject(node, '3-of-9 codes', PChar('TBarcode3of9'));
|
|
Items.AddChildObject(child, 'Code 3-of-9 (C39)', Pointer(ptrInt(bctCode39)));
|
|
Items.AddChildObject(child, 'Code 3-of-9 extended (C39+)', Pointer(PtrInt(bctCode39Ext)));
|
|
Items.AddChildObject(child, 'LOGMARS', Pointer(PtrInt(bctLOGMARS)));
|
|
Items.AddChildObject(child, 'Code 93', Pointer(PtrInt(bctCode93)));
|
|
child := Items.AddChildObject(node, 'Channel code', PChar('TBarcodeChannelCode'));
|
|
child := Items.AddChildObject(node, 'UPC/EAN codes', PChar('TBarcodeEAN'));
|
|
Items.AddChildObject(child, 'EAN-8, EAN-13', Pointer(PtrInt(bctEAN)));
|
|
Items.AddChildObject(child, 'EAN-14', Pointer(PtrInt(bctEAN14)));
|
|
Items.AddChildObject(child, 'ISBN', Pointer(PtrInt(bctISBN)));
|
|
Items.AddChildObject(child, 'NVE-18', Pointer(PtrInt(bctNVE18)));
|
|
Items.AddChildObject(child, 'UPC-A', Pointer(PtrInt(bctUPCA)));
|
|
Items.AddChildObject(child, 'UPC-E', Pointer(PtrInt(bctUPCE)));
|
|
child := Items.AddChildObject(node, 'MSI/Plessey', PChar('TBarcodePlessey'));
|
|
Items.AddChildObject(child, 'Plessey', Pointer(PtrInt(bctPlessey)));
|
|
Items.AddChildObject(child, 'MSI/Plessey', Pointer(PtrInt(bctMSIPlessey)));
|
|
child := Items.AddChildObject(node, 'Telepen', PChar('TBarcodeTelepen'));
|
|
Items.AddChildObject(child, 'Telepen', Pointer(PtrInt(bctTelepen)));
|
|
Items.AddChildObject(child, 'Telepen numeric', Pointer(PtrInt(bctTelepenNum)));
|
|
child := Items.AddChildObject(node, 'Medical/pharmaceutical', PChar('TBarcodeMedical'));
|
|
Items.AddChildObject(child, 'CodaBar', Pointer(PtrInt(bctCodaBar)));
|
|
Items.AddChildObject(child, 'Code32', Pointer(PtrInt(bctCode32)));
|
|
Items.AddChildObject(child, 'Pharma one-track', Pointer(PtrInt(bctPharmaOne)));
|
|
Items.AddChildObject(child, 'Pharma two-track', Pointer(PtrInt(bctPharmaTwo)));
|
|
Items.AddChildObject(child, 'Pharmazentralnummer (7-digit)', Pointer(PtrInt(bctPZN7)));
|
|
Items.AddChildObject(child, 'Pharmazentralnummer (8-digit)', Pointer(PtrInt(bctPZN8)));
|
|
child := Items.AddChildObject(node, 'Postal barcodes', PChar('TBarcodePostal'));
|
|
Items.AddChildObject(child, 'Australia Post Customer', Pointer(PtrInt(bctAustraliaPostCustomer)));
|
|
Items.AddChildObject(child, 'Australia Post Reply Paid', Pointer(PtrInt(bctAustraliaPostReplyPaid)));
|
|
Items.AddChildObject(child, 'Australia Post Routing', Pointer(PtrInt(bctAustraliaPostRoute)));
|
|
Items.AddChildObject(child, 'Australia Post Redirection', Pointer(PtrInt(bctAustraliaPostRedirect)));
|
|
Items.AddChildObject(child, 'DAFT', Pointer(PtrInt(bctDaft)));
|
|
Items.AddChildObject(child, 'Deutsche Post IdentCode', Pointer(PtrInt(bctDeutschePostIdentCode)));
|
|
Items.AddChildObject(child, 'Deutsche Post LeitCode', Pointer(PtrInt(bctDeutschePostLeitCode)));
|
|
Items.AddChildObject(child, 'FIM (Face Identification Mark)', Pointer(PtrInt(bctFIM)));
|
|
Items.AddChildObject(child, 'Japanese Post', Pointer(PtrInt(bctJapanPost)));
|
|
Items.AddChildObject(child, 'KIX', Pointer(PtrInt(bctKix)));
|
|
Items.AddChildObject(child, 'Korea Post', Pointer(PtrInt(bctKoreaPost)));
|
|
Items.AddChildObject(child, 'Planet', Pointer(PtrInt(bctPlanet)));
|
|
Items.AddChildObject(child, 'PostNet', Pointer(PtrInt(bctPostNet)));
|
|
Items.AddChildObject(child, 'Royal Mail RM4SCC', Pointer(PtrInt(bctRM4SCC)));
|
|
|
|
node := Items.AddChild(nil, 'STACKED');
|
|
child := Items.AddChildObject(node, 'PDF417 variants', PChar('TBarcodePDF417'));
|
|
Items.AddChildObject(child, 'PDF417', Pointer(PtrInt(bctPDF417)));
|
|
Items.AddChildObject(child, 'Compact PDF417', Pointer(PtrInt(bctPDF417trunc)));
|
|
Items.AddChildObject(child, 'MicroPDF417 (ISO 24728)', Pointer(PtrInt(bctMicroPDF417)));
|
|
|
|
node := Items.AddChild(nil, '2-DIMENSIONAL');
|
|
child := Items.AddChildObject(node, 'QR Code', PChar('TBarcodeQR'));
|
|
child := Items.AddChildObject(node, 'Micro QR', PChar('TBarcodeMicroQR'));
|
|
child := Items.AddChildObject(node, 'Aztec', PChar('TBarcodeAztec'));
|
|
child := Items.AddChildObject(node, 'Aztec Rune', PChar('TBarcodeAztecRune'));
|
|
child := Items.AddChildObject(node, 'Data Matrix', PChar('TBarcodeDataMatrix'));
|
|
child := Items.AddChildObject(node, 'Maxicode (ISO 16023)', PChar('TBarcodeMaxiCode'));
|
|
|
|
FullExpand;
|
|
finally
|
|
Items.EndUpdate;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.SelectBarcode(ANode: TTreeNode);
|
|
var
|
|
barcodeClassName: String;
|
|
barcodeClass: TLazBarcodeClass;
|
|
barcodeType: Integer;
|
|
begin
|
|
if (ANode = nil) then
|
|
begin
|
|
if FBarcode <> nil then FBarcode.Hide;
|
|
exit;
|
|
end;
|
|
|
|
FreeAndNil(FBarcode);
|
|
|
|
// Determine from the node's Data field the class of the barcode to be created
|
|
// and/or the value of the BarcodeType property.
|
|
if (ANode.Level = 1) and not ANode.HasChildren then
|
|
barcodeClassName := PChar(ANode.Data)
|
|
else
|
|
if (ANode.Level = 2) then
|
|
begin
|
|
barcodeClassName := PChar(ANode.Parent.Data);
|
|
barcodeType := {%H-}PtrInt(ANode.Data);
|
|
end else
|
|
begin
|
|
if FBarcode <> nil then FBarcode.Hide;
|
|
exit;
|
|
end;
|
|
|
|
// Create barcode from information provided in the node's Data field.
|
|
barcodeClass := TLazBarcodeClass(GetClass(barcodeClassName));
|
|
FBarcode := barcodeClass.Create(self);
|
|
FBarcode.Parent := BarcodePanel;
|
|
|
|
// Apply general properties
|
|
FBarcode.Text := edText.Text;
|
|
TBarcodeAccess(FBarcode).Color := clbColor.ButtonColor;
|
|
TBarcodeAccess(FBarcode).BackgroundColor := clbBackground.ButtonColor;
|
|
TBarcodeAccess(FBarcode).ForegroundColor := clbForeground.ButtonColor;
|
|
TBarcodeAccess(FBarcode).Scale := seScale.Value;
|
|
TBarcodeAccess(FBarcode).Margin := seMargin.Value;
|
|
TBarcodeAccess(FBarcode).WhiteSpaceWidth := seWhitespaceWidth.Value;
|
|
TBarcodeAccess(FBarcode).BearerBarMode := TBarcodeBearerBarMode(cmbBearerBarsBox.ItemIndex);
|
|
TBarcodeAccess(FBarcode).SymbolHeight := seSymbolHeight.Value;
|
|
TBarcodeAccess(FBarcode).RecommendedSymbolSize := cbRecommendedSymbolSize.Checked;
|
|
|
|
// Apply specific properties for each barcode class - not very elegant...
|
|
if (FBarcode is TCustomBarcode) then
|
|
TBarcodeAccess(FBarcode).ShowHumanReadableText := cbHumanReadableText.Checked;
|
|
|
|
if (FBarcode is TSimpleBarCode) then
|
|
begin
|
|
TSimpleBarcodeAccess(FBarcode).AddChecksum := cbAddChecksum.Checked;
|
|
cbAddChecksum.Enabled := IsPublishedProp(FBarcode, 'AddChecksum');
|
|
TSimpleBarcodeAccess(FBarcode).DisplayChecksum := cbDisplayChecksum.Checked;
|
|
cbDisplayChecksum.Enabled := cbAddChecksum.Checked and IsPublishedProp(FBarcode, 'DisplayChecksum');
|
|
if (ANode.Level = 2) then
|
|
TSimpleBarcodeAccess(FBarcode).BarcodeType := TBarcodeType(barcodeType);
|
|
end;
|
|
|
|
cbAutoSizeChange(nil);
|
|
|
|
// Show options page corresponding to the selected barcode type.
|
|
if (FBarcode is TBarcodePlessey) and (TBarcodePlessey(FBarcode).BarcodeType = bctMSIPlessey) then
|
|
nbOptions.PageIndex := pgOptions_Plessey.PageIndex
|
|
else
|
|
if (FBarcode is TBarcodeQR) then
|
|
nbOptions.PageIndex := pgOptions_QR.PageIndex
|
|
else
|
|
if (FBarcode is TBarcodeMaxiCode) then
|
|
nbOptions.PageIndex := pgOptions_Maxicode.PageIndex
|
|
else
|
|
nbOptions.PageIndex := -1;
|
|
|
|
// Enable/disable GUI components
|
|
cbHumanReadableText.Enabled := not ((FBarcode is TBarcodeSquare) or (FBarcode is TBarcodePDF417));
|
|
btnFont.Enabled := cbHumanReadableText.Enabled;
|
|
seWhiteSpaceWidth.Enabled := IsPublishedProp(FBarcode, 'WhiteSpaceWidth') and not cbRecommendedSymbolSize.Checked;
|
|
lblWhitespaceWidth.Enabled := seWhiteSpaceWidth.Enabled;
|
|
if FBarcode is TBarcodePDF417 then
|
|
begin
|
|
seSymbolHeight.Enabled := not cbRecommendedSymbolSize.Checked;
|
|
lblSymbolHeight.Caption := 'Row height ratio';
|
|
end else
|
|
begin
|
|
seSymbolHeight.Enabled := not cbRecommendedSymbolSize.Checked and IsPublishedProp(FBarcode, 'SymbolHeight');
|
|
lblSymbolHeight.Caption := 'Symbol height';
|
|
end;
|
|
lblSymbolHeight.Enabled := seSymbolHeight.Enabled;
|
|
|
|
// Show error message from rendering, if available.
|
|
UpdateErrorMsg;
|
|
end;
|
|
|
|
procedure TMainForm.UpdateErrorMsg;
|
|
begin
|
|
lblError.Visible := FBarcode.ErrorString <> '';
|
|
lblError.Caption := FBarcode.ErrorString;
|
|
if FBarcode <> nil then
|
|
FBarcode.Visible := not lblError.Visible;
|
|
end;
|
|
|
|
initialization
|
|
RegisterBarcodes;
|
|
|
|
end.
|
|
|