-
古いソフトのヘルプファイル(ファイル拡張子は CHM )の場合が開けないことがあります。 chmファイルは古い規格で内部的にHTMLで書かれているようです。 そのため、最近はWindows のセキュリティの関係から直接は見れない様になっています。
以下の方法でセキュリティ関係を解除してやれば見ることができます。
chmファイルの名前の所で右クリックをして、「プロパティ」を選択します。 そこで「ブロックの解除」のボタンをクリックします。
「ブロックの解除」のボタンがグレー表示になりますので、 「適用」ボタンまたは「OK」ボタンをクリックします。
その後、chmファイルをダブルクリックで起動すれば内容が見えるはずです。
=====
2016/04/02:の時の情報
PR -
私事なのですが、最近収めたシステムで客先より「エラーコードが3DHが表示されてデータが登録できない」との連絡在りました。 3DH のエラーコードの内容は取説より
「3Dh:FIELD ステートメントで指定されたフィールド幅が、ファイルと異なっています。」
とのこと、こちらでいくら再現しようとしてもエラーが発生しませんでした。
そこで客先で該当するデータファイルの情報をシステムメニューから表示してもらったところ、 データファイルのフォーマットが昔のままで、そのためにエラーが発生している様でした。
(最初に納入したプログラムで動作させてそのままにしておいて、 フォーマットが変更された最新のプログラムを動作させて為に発生しました)
この FIELD命令 ですが、既に存在するファイルと違っている場合に 新しい FIELD命令 では機能せずにエラーが発生します。
以下に FIELD命令 でエラーが発生するソースを記します。 最初の FIELD命令 で作成された「TEST.DAT」は2個のカラムを持っていますが、 2度目の FIELD命令 でエラーが発生します。
Main SCREEN 1 '漢字モード LOCATE , , 2 'カーソルをブロック表示 ON ERROR GOTO MAIN.ERR 'FIELDのカラム数の定義 Const COL.CD% = 4 Const COL.NUM% = 8 'TEST.DATファイルを、ファイル番号#1としてオープンします PRIVATE FILENO%, strCD$, lngNum&, REC.CD$, REC.NUM$ FILENO% = 1 OPEN "TEST.DAT" AS FILENO% RECORD 2147483647 FIELD #FILENO%, COL.CD% AS REC.CD$, COL.NUM% AS REC.NUM$ strCD$ = "1" lngNum& = 1000 REC.CD$ = LEFT$(strCD$ + " ", COL.CD%) '既定の桁数分スペースを付加 REC.NUM$ = RIGHT$(" " + STR$(lngNum&), COL.NUM%) '既定の桁数分スペースを付加 '書込み PUT #FILENO% 'クローズ CLOSE #FILENO% 'FIELDのカラム数の追加定義 Const COL.DTX% = 4 PRIVATE strDTX$ OPEN "TEST.DAT" AS FILENO% RECORD 2147483647 'カラム数を追加してFIELD文 FIELD #FILENO%, COL.CD% AS REC.CD$, COL.NUM% AS REC.NUM$, COL.DTX% AS strDTX$ '書込み PUT #FILENO% 'クローズ CLOSE #FILENO% ' WAIT 0, &H1 END MAIN.ERR PRINT "ERL=";ERL;" ERR=";HEX$(ERR); WAIT 0, &H1 END
このプログラムを実行すると以下の画面になります。
エラーコードが「3D」で、 FIELD命令 でのエラーであることがわかります。
データファイルのフォーマットが変更された場合には、手動でハンディターミナル内部の該当ファイルを削除するか、 もしくは、プログラムで判定して削除してから、再度の FIELD命令 を行う必要があると思います。
=====
2016/04/02:の時の情報
-
Bluetooth通信を備えたハンディスキャナではその通信でプリンタなどへの データの送受信ができます。
■Bluetooth機器との送受信について
Bluetooth通信で外部機器とデータの送受信を行う場合は、以下の一連の命令の実行で行います。
・OPEN命令によりBluetoothデバイスファイルをオープンする。
(リモートデバイスへのシリアルポート接続が行われる)
・シリアル通信処理を行う。
(送信処理:PRINT #命令)
(受信処理:INPUT$関数、LOC関数、EOF関数などを使用)
・バーコードバッファから読込まれた文字列を取得する。
・CLOSE命令によりBluetoothデバイスファイルをクローズする。
Bluetoothデバイスのオープンの OPEN命令 について説明します。
[書式] OPEN "COM4:M, サービスプロファイル [, [デバイスアドレス][, [パスキー][, [タイムアウト] [, [セキュリティモード]]]]]" AS [#] ファイル番号 <引き数> ・[COM4:M]は自分自身をマスタとして接続先をスレーブとする ・サービスプロファイル ■SDAP:サービス検索 ■SPP:シリアルポートプロファイル ■DUN:ダイヤルアップ接続プロファイル ・[デバイスアドレス]:Bluetooth デバイスアドレス 12 文字の16 進数文字列で指定 ・[パスキー]:Bluetooth パスキー ・[タイムアウト]:接続が完了までの最大待ち時間(1~255秒) ・[セキュリティモード]:接続時のセキュリティモード 1:セキュリティなし 2:セキュリティあり 3:セキュリティあり、暗号化あり 4:シンプルペアリング
上記の他の詳しい内容については各BHTの取説を見てください。
■オープン指定の例
OPEN "COM4:M,SPP,112233AABBCC,,30,1" AS #2
この例では自分自身をマスタとして、 シリアルポートプロファイルを使用してBluetooth 通信行います。 Bluetooth デバイスアドレスは 112233AABBCC で、接続タイムアウトは30秒です。
このオープン例を使ったプログラムは以下の様になりますが、 各機器に合わせてシリアル送受信処理は組む必要があります。
'Bluetoothオープン OPEN "COM4:M,SPP,112233AABBCC,,30,1" AS #2 'シリアル通信処理 '--データ送信処理-- PRINT #2,"TESTDATA"; '送信データは仮のもの '--データ受信処理-- 'ここにINPUT$関数などでデータを取得し、 '各機器ごとに合わせた処理を記述する 'Bluetoothクローズ CLOSE #2
■Bluetoothデバイスアドレス取得について
対応する機器のアドレスが前もってわかっているのであれば、 直接そのアドレスをプログラムに埋め込んでもいいのですが、 実際の場合は機器交換などもありますので、 Bluetoothデバイスから通信で取得できた方がいいと思います。
Bluetoothデバイスアドレス取得を行う簡単なプログラムを以下に示します。
SCREEN 1 '漢字モード LOCATE , , 2 'カーソルをブロック表示 PRIVATE I% PRIVATE strBtAddr$(7)[12] 'Bluetoothデバイスアドレス PRIVATE intBtNum% 'Bluetoothデバイス数 'Bluetooth検出オープン OPEN "COM4:I,60,1" AS #2 ' デバイス検出時間:60秒 '検出機器数:8台 intBtNum% = 8 '検出結果を読み出し CALL "BT.FN3" .fcBTInqRes intBtNum%, strBtAddr$() 'Bluetooth検出クローズ CLOSE #2 '検出したBluetoothアドレス表示 PRINT "BlueTooth-Addr" FOR I% = 0 TO 7 PRINT "Addr" + STR$(I%) + ":" + strBtAddr$(i%) NEXT I% WAIT 0, &H1 END
Bluetooth機器が複数あった場合にはその台数分のアドレスが検出できます。 但し、1台だけに絞る場合は、対象Bluetooth機器のみを電源投入し検出すればできるとは思います。
=====
2016/04/02:の時の情報
-
以前、ハンディターミナル側から送受信を行う関数等の記事を掲載してきましたが、 ハンディターミナルの相手側としてのパソコン側のプログラムが必要になります。
パソコン側のファイル送受信用のツールがDLLの形でDENSOさんの方から提供されています。 以下の所にDENSOのURLを貼っておきますので、そちらを参照下さい。
・BHT-BASIC4.0転送ユーティリティ
このユーティリティを購入して、送受信を行うパソコンにライセンス登録が必要です。 プログラムのインストールなどは無く、必要なDLL等を実行プログラムのフォルダに登録します。 この辺りのことは購入後、取説をDENSOからダウンロードし確認してみて下さい。
■VB.NETプログラムの場合の必要なDLL
VB.NETのプログラムの実行フォルダ内に以下のDLL等が必要です。
・Bhtprtdm.dll -- BHT-BASIC4.0 転送ユーティリティライブラリ ・Bhtprt.ini -- BHT-BASIC4.0 転送ユーティリティライブラリ設定 ・Ymodem_pd.dll -- YMODEMプロトコルライブラリ ・BHTIr_pd.dll -- BHT-Irプロトコルライブラリ
実際の転送処理で呼出すのはBhtprtdm.dllで、その中の送受信関数(ExecProtocol)を呼出して処理をさせます。
Declare Function ExecProtocol Lib "Bhtprtdm.dll" (_ ByVal hWnd As IntPtr, _ ByVal Param As String, _ ByVal FileName As System.Text.StringBuilder, _ ByVal Protocol As Integer) As Integer [引数] hWnd :DLLを呼び出すウィンドウハンドルを設定 Param :ファイル転送の動作を制御するオプションの文字列 (1つのファイル名と複数のオプションをスペースで区切った文字列) FileName:転送したパス名/ファイル名を格納 Protocol:プロトコル番号を指定 [戻り値] Integer型の値で、0(Er_NOERROR)はエラー無しで、 0以外は伝送エラー在り (エラー内容はDENSO提供のBASICソースを参照)
上記のほかにいろんな指定がありますが、それは各BHTの取説を見てください。
■オプションの文字列
オプション 内容 デフォルト 【伝送速度】 +B
"+B9600" 9600 bps "+B19200" 19200 bps "+B38400" 38400 bps "+B57600" 57600 bps "+B115200" 115200 bps "+B230400" 230400 bps "+B460800" 460800 bps
YMODEM時 "+B115200" BHT-Ir時 "+B9600"
【通信ポート】 +Pn
+Pn (n = 1 ~ 99)
"+P1" 【ファイルフィールド】 +Fn +F -F
[+Fn]の場合:"+Fa,b,c..." a:フィールド1桁数 b:フィールド2桁数 c:フィールド3桁数 ... [+F]の場合:既存フィールドファイルによる (YMODEMのみ) ※受信の場合はフィールドファイルを受信しない [-F]の場合:フィールド指定なし(YMODEMのみ)
【伝送方向】 +R -R
"+R" ファイル受信 "-R" ファイル送信
"-R" 【追加書込】 +A -A
"+A" 既存データファイルに追加書込み "-A" 追加書き込みしない
"-A" 【CR-LFの扱い】 +C -C
"+C" CR-LFをデータとする "-C" CR-LFをレコードの区切り
"-C"
オプション文字列の一般的な例としては以下の様になります。送信の場合:"TEST.DAT +P5 +F16,12 -R" 受信の場合:"TEST.DAT +P5 +F16,12 +R"
この場合、YMODEMでの伝送を想定していて、 通信ポートはパソコンにUSB-COMポートをインストールした時に COM5 になったので"P5"としています。
また、フィールド指定は以下の記事のデータファイルを使っています。
・BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
■VB.NETの送受信テストプログラム
上記のオプション例を使った簡単なVB.NETのテストプログラムを以下に示します。
Module Module1 Declare Function ExecProtocol Lib "Bhtprtdm.dll" ( _ ByVal hWnd As IntPtr, _ ByVal Param As String, _ ByVal TransferFileName As System.Text.StringBuilder, _ ByVal ProtocolType As Integer) As Integer End Module Public Class Form1 '送信処理ボタン Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try Const PRTCL_YMODEMBATCH As Short = 2 Dim iRet As Integer Dim strFile As System.Text.StringBuilder = New System.Text.StringBuilder Dim strOption As String 'オプションの編集 strOption = "TEST.DAT +P5 +F16,12 -R" '"-R"送信 'ファイル転送 iRet = ExecProtocol(Me.Handle, strOption, strFile, PRTCL_YMODEMBATCH) '戻り値のチェック If iRet <> 0 Then MsgBox("Err Code = " & iRet.ToString() & " : File[" & strFile.ToString() & "]") Else MsgBox("送信OK...File[" & strFile.ToString() & "]") End If Catch ex As Exception MsgBox(ex.ToString) End Try End Sub '受信処理ボタン Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Try Const PRTCL_YMODEMBATCH As Short = 2 Dim iRet As Integer Dim strFile As System.Text.StringBuilder = New System.Text.StringBuilder Dim strOption As String 'オプションの編集 strOption = "TEST.DAT +P5 +R" '"+R"受信 'ファイル転送 iRet = ExecProtocol(Me.Handle, strOption, strFile, PRTCL_YMODEMBATCH) '戻り値のチェック If iRet <> 0 Then MsgBox("Err Code = " & iRet.ToString() & " : File[" & strFile.ToString() & "]") Else MsgBox("受信OK...File[" & strFile.ToString() & "]") End If Catch ex As Exception MsgBox(ex.ToString) End Try End Sub End Class
フォームの画面表示は以下の感じです。 送信ボタンと受信ボタンをフォームに配置しそれぞれのボタンクリックで送受信処理を行っているだけです。 受信時のオプションはフィールド指定が無い違いがあります。
■BHT-BASICの送受信テストプログラム(ハンディ側)
ハンディターミナル側の簡単な受信・送信テストプログラムを以下に示します。
'--------------------------------------- 'ファイル送信 '--------------------------------------- 'Function GfSndFile%(pintFp%, pstrSpeed$, pstrFile$, pstrOption$) '引 数: ' pintFp% :ファイル番号 ' pstrSpeed$ :送信スピード ' pstrFile$ :送信ファイル名 ' pstrOption$ :送信オプション '戻り値: ' GfSndFile% :送信OK(GcTrue%)NG(GcFalse%) '--------------------------------------- Function GfSndFile%(pintFp%, pstrSpeed$, pstrFile$, pstrOption$) On Error Goto GfSndFile.ErrProc OPEN "COM1:" + pstrSpeed$ AS pintFp% XFILE pstrFile$, pstrOption$ GfSndFile% = GcTrue% GfSndFile.Return '終了処理 CLOSE pintFp% On Error Goto 0 Exit Function '----- 'エラー処理 '----- GfSndFile.ErrProc GfSndFile% = GcFalse% Resume GfSndFile.Return End Function '--------------------------------------- 'ファイル受信 '--------------------------------------- 'Function GfRcvFile%(pintFp%, pstrSpeed$, pstrFile$, pstrOption$) '引 数: ' pintFp% :ファイル番号 ' pstrSpeed$ :受信スピード ' pstrFile$ :受信ファイル名 ' pstrOption$ :受信オプション("R")以外のオプション '戻り値: ' GfRcvFile% :受信OK(GcTrue%)NG(GcFalse%) '--------------------------------------- Function GfRcvFile%(pintFp%, pstrSpeed$, pstrFile$, pstrOption$) On Error Goto GfRcvFile.ErrProc OPEN "COM1:" + pstrSpeed$ AS pintFp% OUT &h6060, 3 'YMODEM XFILE pstrFile$, "R" + pstrOption$ GfRcvFile% = GcTrue% GfRcvFile.Return '終了処理 CLOSE pintFp% On Error Goto 0 Exit Function '----- 'エラー処理 '----- GfRcvFile.ErrProc GfRcvFile% = GcFalse% Resume GfRcvFile.Return End Function '--------------------------------------- 'メイン処理開始 '--------------------------------------- SCREEN 1 '漢字モード LOCATE , , 2 'カーソルをブロック表示 PRIVATE intRet% PRINT "受信開始:"; intRet% = GfRcvFile%(1, "115200", "TEST.DAT", "PTM") '受信 PRINT "GfRcvFile%=" + STR$(intRet%) WAIT 0, &h01 'キー入力待ち PRINT "送信開始:"; intRet% = GfSndFile%(1, "115200", "TEST.DAT", "PTM") '送信 PRINT "GfSndFile%=" + STR$(intRet%) WAIT 0, &h01 'キー入力待ち END
■VB.NETの送受信テストプログラムの実行送信時の画面は、以下の様にYMODEM送信のダイアログが表示されて、 件数の様な数字がカウントアップします。
送信処理後に、 TEST.DAT の存在するフォルダを確認すると TEST.FLD ファイルが作られているのがわかります。 この TEST.FLD ファイルの内容は以下の様にフィールドの定義ファイルの様です。* created by BHT-BASIC 4.0 Transfer Utility DLL Version 1.14 * Copyright (C) DENSO WAVE INC. 2001-2013 all rights reserved file TEST.DAT fields 16 12
受信時の画面は、以下の様な表示になります。
受信後は、ハンディから送られてくる TEST.FLD ファイルが生成される様です。 以下はその内容です。* created by BHT file TEST.DAT size 150 records 5 fields 16 12
=====
2016/04/02:の時の情報
-
ハンディターミナルを使用する最大の要因は、バーコードの読込みを行うことです。 商品に貼られたバーコードや、商品棚に印刷されたバーコードを読み取り、いろいろな作業を行います。
BHTシリーズで読込み可能なバーコードには EAN-13(JAN-13)、EAN-8 (JAN-8)、NW-7、Code39、Code93、Code128等があります。
バーコードを読込む処理は以下の一連の命令の実行で行います。
・OPEN命令によりバーコードデバイスをオープンする。
・バーコードが読込まれるのを待つ。
・バーコードバッファから読込まれた文字列を取得する。
・CLOSE命令によりバーコードデバイスをクローズする。
■バーコードデバイスのオープン
バーコードデバイスのオープンの OPEN命令 について説明します。
[書式1:パラメタを直接指定] OPEN "BAR:[読取モード][ブザー制御][LED制御]" AS [#]ファイル番号 CODE 読取コード[,読取コード...] [書式2:パラメタをシステム設定値から指定] OPEN "BAR:SP" AS [#]ファイル番号 <引き数> ・[読取モード]: ■モメンタリスイッチモード(M): トリガスイッチを押している間だけ照明LEDが点灯し、 バーコードを読み取ることができる。 ■オートオフモード(F) トリガスイッチを押すと照明LEDが点灯し、トリガスイッチを放すか、 またはバーコードを読み取ると、照明LED は消える。 ■オルタネートスイッチモード(A) トリガスイッチを押すと照明LEDが点灯し、トリガスイッチを放しても、 照明LED は点灯している。バーコードデバイスファイルがクローズされるか、 またはトリガスイッチを再度押すと照明LED は消える。 ■連続読み取りモード(C) トリガスイッチに関係なく照明LEDはバーコードデバイスファイルが クローズされるまで点灯しています。 ※4モードとも照明LEDが点灯している間は、 バーコードを読み取ることができます。 ・[ブザー制御]:"B" バーコードの読み取り成功時にブザー(バイブレータ)を作動 ・[LED制御]:"L" バーコードの読み取り成功時に青LED が点灯しないようにする ・ファイル番号:(OPEN命令で指定したファイル番号を指定) ・読取コード: ■共通商品コード("A","B","C") 先頭文字(国フラグ)やアドオンの指定ができますが "A"のみ指定でEAN-13(JAN-13),EAN-8(JAN-8),UPC-E全てが 読込める ■NW-7("N"): 書式:N[:[最小桁数[-最大桁数]][スタート ストップ][CD] [,[最小桁数[-最大桁数]][スタート ストップ][CD]] [,[最小桁数[-最大桁数]][スタート ストップ][CD]]] ■Code39("M"): 書式:M[:[最小桁数[-最大桁数]][CD] [,[最小桁数[-最大桁数]][CD]] [,[最小桁数[-最大桁数]][CD]]] ■Code93("L"): 書式:L[:[最小桁数[-最大桁数] [,[最小桁数[-最大桁数]] [,[最小桁数[-最大桁数]]] ■Code128("K"): 書式:K[:[最小桁数[-最大桁数] [,[最小桁数[-最大桁数]] [,[最小桁数[-最大桁数]]]
上記のほかにいろんな指定がありますが、それは各BHTの取説を見てください。
■オープン指定の例
OPEN "BAR:M" AS #1 CODE "A", "M:4-25", "K:4-25"
この例では読取モードとしてはモメンタリスイッチモードで、読取コードは 共通商品コード、Code39の4桁~25桁、Code128の4桁~25桁を可能としています。
このオープン例を使った簡単なテストプログラムを以下に示します。
PRIVATE intLen%, pstrBarCode$ 'バーコードデバイスオープン OPEN "BAR:M" AS #1 CODE "A", "M:4-25", "K:4-25" 'バーコードスキャニング待ち WAIT 0, &h02 'バーコードバッファ内の文字数取得 intLen% = LOC(#1) 'バーコード読込 pstrBarCode$ = INPUT$(intLen%, #1) 'バーコードデバイスクローズ CLOSE #1 PRINT "BARCODE=" + pstrBarCode$ WAIT 0, &H1 'キー待ち END
実際の処理としては、上記のテストプログラムでは不十分です。 商品などのバーコードコードをスキャンする場合、そのバーコードが準備されていればいいのですが、 準備できていないことがあります。
そんな時には、バーコードスキャンでもキー入力でもコード入力が可能な様に組んでおくことが必要です。
■バーコード・キー入力の両方を行える関数例
以下のソースはバーコードスキャンを途中でやめて、キー入力出来る様にしたバーコード入力関数の例です。
この関数の処理は以下の様な仕様になっています。
(1)最初にカーソル位置を退避する。
(2)バーコードデバイスオープンを行い、キー入力とバーコードスキャンを待つ。
(3)バーコードスキャンがあれば、コードを変数に戻し、関数を終わる。
(4)[F4]キーが押下された場合は、戻り値にそのフラグを持って関数を終わる。
(5)[F1]キーが押下された場合は、キー入力処理になる。
(6)数字キーであれば入力文字列に追加する。
(7)[F2]キーが押下された場合は、バーコードスキャン(2)に戻る。
(8)[F4]キーが押下された場合は、戻り値にそのフラグを持って関数を終わる。
'この変数はどこかで宣言する Global GcKeyF1$ : GcKeyF1$ = "A" Global GcKeyF2$ : GcKeyF2$ = "B" Global GcKeyF3$ : GcKeyF3$ = "C" Global GcKeyF4$ : GcKeyF4$ = "D" Global GcGetRetNormal% : GcGetRetNormal% = 0 '[ENT]キーでの終了 Global GcGetRetF1% : GcGetRetF1% = 1 '[F1]キーでの終了 Global GcGetRetF2% : GcGetRetF2% = 2 '[F2]キーでの終了 Global GcGetRetF3% : GcGetRetF3% = 3 '[F3]キーでの終了 Global GcGetRetF4% : GcGetRetF4% = 4 '[F4]キーでの終了 '--------------------------------------- 'バーコード入力 '--------------------------------------- 'Function GfGetBar%(Byref pstrBarCode$) '引 数: ' pstrBarCode$:入力されたバーコード文字列 '戻り値: ' GfGetBar% :どのキーで終了したかを示す以下のフラグを返す ' : GcGetRetNormal% = 0 '[ENT]キーでの終了 ' : GcGetRetF4% = 4 '[F4]キーでの終了 '--------------------------------------- Function GfGetBar%(Byref pstrBarCode$) Private intX%, intY%, intLoop%, intLen%, strKey$, intRet%, strInp$ 'エラー処理宣言 On Error Goto GfGetBar.ErrProc '結果格納領域の初期化 pstrBarCode$ = "" 'カーソル位置退避 intY% = CSRLIN intX% = POS(0) GfGetBar.ReStart 'バーコード再スタート Locate intX%, intY%, 2 Cursor ON 'バーコードデバイスオープン OPEN "BAR:M" AS #1 CODE "A", "M:4-25", "K:4-25" intLoop% = GcTrue% While intLoop% = GcTrue% 'キー入力とバーコードスキャニング待ち Wait 0, &h03 'バーコードバッファ内の文字数取得 intLen% = Loc(#1) If intLen% <> 0 Then 'バーコードスキャニングがあった場合 pstrBarCode$ = Input$(intLen%, #1) 'バーコードをセット intRet% = GcGetRetNormal% intLoop% = GcFalse% Else 'キー入力があった場合 strKey$ = Input$(1) '入力されたキーの文字を取得 SELECT strKey$ CASE "A" '[F1]キー文字の場合 intLoop% = GcFalse% intRet% = GcGetRetF1% '下のキー入力をさせる CASE "D" '[F4]キー文字の場合 intLoop% = GcFalse% intRet% = GcGetRetF4% '関数を抜ける END SELECT End If WEnd 'バーコードデバイスクローズ Close #1 if intRet% = GcGetRetF1% Then 'キー入力ループ intLoop% = GcTrue% While intLoop% = GcTrue% '表示 Cursor OFF Locate intX%, intY% Print " "; Locate intX%, intY% Print strInp$; Cursor ON 'キーを1文字取得 strKey$ = GfGetKey$ '数字のみしか受け付けない!! IF "0" <= strKey$ And strKey$ <= "9" THEN strInp$ =strInp$ + strKey$ ELSE '数字以外の場合 SELECT strKey$ CASE CHR$(13) '[ENT]キー文字の場合 If strInp$ <> "" Then pstrBarCode$ = strInp$ 'コード戻す intLoop% = GcFalse% 'ループ脱出 intRet% = GcGetRetNormal% Endif CASE CHR$(8) '[BS]キーの場合 If LEN(strInp$) > 0 Then strInp$ = LEFT$(strInp$, LEN(strInp$) - 1) Endif CASE CHR$(24) '[クリア]キーの場合 strInp$ = "" CASE "B" '[F2]キー文字の場合 intLoop% = GcFalse% intRet% = GcGetRetF2% 'バーコード再入力へ CASE "D" '[F4]キー文字の場合 intLoop% = GcFalse% intRet% = GcGetRetF4% '関数を抜ける END SELECT ENDIF WEnd Endif If intRet% = GcGetRetF2% Then 'バーコード再入力へ Goto GfGetBar.ReStart Endif GfGetBar% = intRet% GfGetBar.Return '関数戻り On Error Goto 0 Exit Function '----- 'エラー処理 '----- GfGetBar.ErrProc GfGetBar% = GcGetRetNormal% pstrBarCode$ = "" Resume GfGetBar.Return End Function '----- 'この関数の実行例 '----- SCREEN 1 '漢字モード LOCATE , , 2 'カーソルをブロック表示 PRIVATE intRet%, intLen%, pstrBarCode$ WHILE 1 LOCATE 1, 2 PRINT " "; LOCATE 1, 2 PRINT "CODE="; intRet% = GfGetBar%(pstrBarCode$) LOCATE 1, 4 PRINT " "; LOCATE 1, 4 If intRet% = GcGetRetF4% Then PRINT "**コード無しでの戻り" Else PRINT "INP=" + pstrBarCode$ Endif WEND
この関数はまだまだ足りない点があると思いますので、改造をして下さい。
=====
2016/04/02:の時の情報