喫茶XRAYトップページ


[325] 印刷プレビューコンポでバーコード印刷返信 削除
2005/6/26 (日) 01:04:16 Mr.XRAY
表題の内容についてメールでの問合わせがありました.
皆さんの参考になると思いますので,ここに内容の概略を紹介して
おきます.

http://www.technical.or.jp/
このサイトの[事業案内]から辿っていくと,バーコードフォントがDL
できます.質問の内容は,このフォントを印刷する方法についてです.
http://www.technical.jp/handbook/chapter-font1.html

-------  メールで返信内容 -----------------------------------

特殊フォントの場合は,FontプロパティのCharSetを指定する必要が
あります.CharSetは利用するフォントによって異なる場合がありま
す.

確認方法は,
(1) 目的のフォントをまずインストール
(2) フォームに,例えばTPanelを一つ配置
(3) このPanel1のFont.Nameをオブジェクトインスペクタで
    目的のフォントを選択
(4) Font.Charsetが自動的にANSI_CHARSETになった.
    自動的にならない場合もあります.その時はCharSetを変更して,
    目的のフォントでの表示になるものを探します.
    OEM_CHARSETが有力な候補です.

そこで改めて,印刷プレビューのコードを以下の様にします.
ただし,印刷プレビューコンポでは,0.1mm単位の描画ですので,
バーコードのサイズは,規格などを参考にしてFont.Heightまたは印刷
プレビューコンポのFontHeightメソッド等で調整して下さい.

  //PVはTplPrevのこと
  pv.FontName('CODE39');
  pv.Canvas.Font.Charset:=ANSI_CHARSET;
  pv.TextOut(300,300, '*1234567890*');

-------  ここまで -----------------------------------

なお,質問された方は事情により,実際にはDEKO(TEADの作者)さんのと
ころのバーコード生成ユニットを以下の様に使用されたとのことです.


-------  質問された方のコード(引用開始) -----------------------------------

  http://homepage1.nifty.com/ht_deko/
これを使用してみることにしました。

    S := PQuery1.FieldByName('KANRINO').AsString;
    // CODE-39
    BK := Make_CODE39(S, false);

    // 倍率
    n := 2;

      Position := 0;
      for Counter:=1 to Length(BK) do
        begin
          LineWidth := ((StrToInt(BK[Counter]) div 2) + 1) * n;
          if (StrToInt(BK[Counter]) mod 2) = 0 then
            // 空白
            begin
              Position := Position + LineWidth;
            end
          else
            // バー
            begin
              for i:=1 to LineWidth do
                begin
                  //DrawLine(Position);
                  Pv.MoveTo(Position + 120, 300);//==========
                  Pv.LineTo(Position + 120, 338);//==========
                  Inc(Position);
                end;
            end;
        end;

     pv.TextOut(120,340, S);

一応打ち出してバーコードリーダーで読めました。

-------  ここまで(引用終了) -----------------------------------

参考になれば幸いです.

# 本日(昨日?)は問合わせ関係のメール処理は2件だけ.
# 本当に少なくなりました.




INCM/CMT
Cyclamen v3.82