C++Builder Firemonkey(Win64) バーコード表示[JAPAN]

Posted by on in Programming

C++Builder Firemonkeyでバーコードを画面に表示します。

利用したライブラリはDEKOさんBARCODE生成ユニットです。

bcode_07.lzhを解凍するとBARCODE.PASソースが入っています。(VCLサンプルも入っています)

BARCODE.PASを少し書き換えます。それはString部分をAnsiStringに変更です。

 

 

次に新規プロジェクトC++BUilderの「マルチデバイスアプリケーション」を選び新規プロジェクトを作成します。

プロジェクトにファイル追加BARCODE.PASを追加します。ビルドするとBARCODE.hppが作られますので

それをプロジェクトにincludeします。#include "BARCODE.hpp

 

画面デザインを作っていきます。2つのTEditTButton, TLayout, TTimerを使いました。

Edit1でバーコード用の文字列を入れてEdit2にはスタートコードとButton1で文字からCODE128コードに変換します。

BARCODE.PASはたくさんのフォーマットに対応できていますが試したのはCODE128だけです。

 

ボタンクリックイベントにコードを書きます。

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	///Convert character strings to bar-codes.
	f_bcode	= Make_Code128(Edit1->Text, Edit2->Text[1]).c_str();
}

f_bcodeはstd::string変数です。Edit1.TextはA〜Z,1〜9です。

 

タイマーイベントでLayout1に対してRepaint()しています。

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Layout1->Repaint();
}

 

バーコードを描画しているのはLayout1のCanvasです。

Layout1->OnPaint内に下記のようなコードで描画しています。

//---------------------------------------------------------------------------
void __fastcall TForm1::Layout1Paint(TObject *Sender, TCanvas *Canvas, const TRectF &ARect)

{
	Canvas->BeginScene();
	Canvas->Fill->Kind	= TBrushKind::Solid;
	Canvas->Fill->Color	= TAlphaColors::White;
	Canvas->FillRect(ARect,0,0,AllCorners,1);///Make the Layout1 background white.
	if ( f_bcode.size() > 0 )
	{
		int _pos = 0;
		for (char s : f_bcode)
		{
			std::string _str = {s};
			int _width = std::stoi(_str);
			int _linew = (static_cast<int>(_width/2)+1)*3;
			if ((_width % 2) == 0)
			{
				_pos = _pos + _linew;
			}
			else
			{
				for (int i = 0; i < _linew; i++)
				{
					Canvas->Stroke->Kind = TBrushKind::Solid;
					Canvas->StrokeThickness  = 1;
					Canvas->Stroke->Color = TAlphaColorRec::Navy;
					Canvas->DrawLine(TPointF(_pos + 30, 0), TPointF(_pos + 30, ARect.Bottom), 1);
					_pos++;
				}
			}

		}
	}
	Canvas->EndScene();
}
//---------------------------------------------------------------------------

 

実行すると下記のようにEdit1.Textで入力されたバーコードが表示されます。

 

AnsiStringを使ったのでモバイルでは使えないと思います。

きっとDEKOさんならUnicode対応バージョンを作ってくれると思っています。

 

 

 

 

 

 

 

 

 



About
Gold User, No rank,
Delphi / C++Builder blogger

Comments

Check out more tips and tricks in this development video: