Tech Note 04b: Images Databaseを作成する

February 05, 2004

 

© NSB Corporation. All rights reserved.


[英語版]

Contributed by Oscar De Leon odeleon© finework.cl

このテクニカルノートはアプリケーションからImages Database(イメージデータベース)を実装する方法を説明します。

このプロセスには3つのステップがあります:

  1. イメージを準備する
  2. イメージデータベースを作成する
  3. プログラム内でイメージデータベースを使う

始める前に:

必要なもの:

1.     イメージを準備する

基本的なイメージの準備は、

2.    イメージデータベースを作成する

イメージデータベースはPilRCを使って作成します。このコマンドライン・ツールは、コンパイルするリソースの情報と共に.rcpファイルを使います。
内容を単純にするため、.rcpファイルの詳細なシンタックスはここでは説明しません。AaronのウェブサイトにPilRCの詳しいドキュメントがあります。

Notepad等を使って2つのテキストファイル(resources.rcpcreatedb.bat)を作成してください。

resources.rcp

私のサンプルは55個のイメージを持っていて、Cat00001.bmp から Cat00055.bmpと名前が付いています。従って、.rcpファイルはこのような内容になります。

BITMAPCOLOR ID 2001 "Cat00001.bmp"
BITMAPCOLOR ID 2002 "Cat00002.bmp"
BITMAPCOLOR ID 2003 "Cat00003.bmp"
...
BITMAPCOLOR ID 2004 "Cat00054.bmp"
BITMAPCOLOR ID 2005 "Cat00055.bmp"

createdb.bat

この1行のスクリプトのファイルは、PilRCのコマンドライン シンタックスを簡単にするためで、Windows Explorerまたはショートカットから実行できます。また、DOSのコマンドプロンプトにタイプしても構いません。

PilRC -ro -type data -creator FW10 -o ItemsGRDB.prc resources.rcp 

以下の内容を持つ上記のシンタックスで、イメージデータベースが作成されます。

-ro PilRCにprcデータベースを作るよう指示する。
-type data データベースタイプ "data"
-creator aaaa データベース Creator Id。あなたのアプリケーションと同じCreator IDを使うと、イメージデータベースはアプリケーションと一緒に取り除かれます。
-o filename データベース名。デバイス内でのデータベース名。".prc"を含む。
resources.rcp 上記で作成したリソース情報ファイル。

createdb.batスクリプトを実行してイメージデータベースを作成してください。(この例ではItemsGRDB.prc)

3.    プログラム内でイメージデータベースを使う

イメージデータベースが作成できましたので、POSE上にドラッグ&ドロップしてインストールしてください。

さて、どのように必要なイメージを見つけて、それをどう表示するかを知る必要があります。ここでは1つの例を使ってそれを説明します。

私のアプリケーションは、Sports Items Database(価格リスト)からアイテムを拾い、オーダー表を作成します。

全部で3つのデータベースを持っています:OrdersDB.PDB(オーダーを保存)、ItemsDB.PDB(アイテムの価格リスト)、ItemsGRDB.PRC(アイテムのイメージ)

ユーザは価格リストに直接アクセスができ、以下のスクリーンを見ることができます。

ユーザがアイテム番号15を選んで、[ i ] ボタンを押した場合、そのアイテムの詳細が次のスクリーンに現れます。

このイメージはAfter Code内にある以下のコードによって表示されます。(以下は関連するコードのみ)

Sub Form1060_After()

'Local Variables.
Dim dbItemsGRDB as Database         'Database Handle.
Dim nItemsGRDB  as Integer          'dbOpen() Result.
Dim nImageID    as Integer          'Image Index.
Dim bmpPtr      as Variant          'SysTrapFunc() Result.
Dim Tbmp        as Integer          'Resource Type.
Dim bmpID       as Short            'Image Handle.

...

'Draw a Frame Around the Image.
DrawRectangle 4, 75, 152, 64, 0

'Display Image.
nItemsGRDB = dbOpen(dbItemsGRDB, "ItemsGRDB.prc", 0) 'Open Database. 
If nItemsGRDB = 0 Then                        'Database Opened.
    'Check if Image Exists.
    Tbmp = 1415736688                         'Resource Type (Tbmp)
    bmpID = 2000 + Val(ItemDescInfo.ItemCode) 'Resource Index.
    bmpPtr = SysTrapFunc(96, 2, Tbmp, bmpID)  'DmGet1Resource.
    If bmpPtr <> 0 Then
        DrawBitmap bmpID, 5, 76               'Image Exists.
    EndIf 
    dbClose(dbItemsGRDB)                      'Close Database.
EndIf
...

イメージインデックスはアイテムインデックスに2000を足すことによって得られています。上記の例の場合、アイテム番号15(グローバル構造エレメント、ItemDescInfo.ItemCode、に含まれる)ですから、ID = 2015を持つリソースを探すことになります。これは.prcファイルで使われているID値に繋がっています。

dmGet1Resource最後に開いたデータベース内(この場合、イメージデータベース)でリソースを探しますので、0001から9999の間でしたら、どの番号でもイメージのインデックスに使うことができます。従って、他のデータベースから間違ったリソースを掴む危険はありません。ですから、イメージデータベースはイメージを表示する直前に開き、直ぐに閉じます。

最後に、アプリケーションが適切な処理をするには、以下のことも考慮に入れてください。

Drawbitmapはリソース(イメージ)が見つからなかった場合、アプリケーションをクラッシュさせます。従って、