4D v12.4

リソース

ホーム

 
4D v12.4
リソース

 

リソース  


 

バージョン11よりリソースの管理が変更されました。Apple社より示された方針や最近のMac OSの実装に沿い、厳密な意味でのリソースのコンセプト (下記の定義参照) は廃止され、徐々に機能が取り除かれます。リソースにより提供されていたニーズをサポートするために、文字列の翻訳に使用するXLIFFファイルや.png ピクチャなど、新しいメカニズムが実装されました。実際、リソースファイルは標準のファイルに置き換えられます。4Dはこの進化をサポートし、バージョン11より、既存のシステムとの互換性を保持しつつ、データベースの翻訳を管理する新しいツールを提供します。

互換性を保持しつつ、既存のアプリケーションを徐々に新しい方式に移行できるようにするため、4D v11では以前のリソースメカニズムが引き続き動作します。以下の点において異なる点に留意してください:

  • 4Dはリソースファイルとリソースチェーン (複数のリソースファイルを開く) をサポートします。リソースチェーンには特に変換されたデータベースにおいて.rsrや.4drファイル (自動で開かれます) と、このテーマのコマンドを使用して開かれたカスタムリソースが含まれます。
  • しかし、内部的なアーキテクチャの進化のため、このテーマのコマン ドや動的参照を使用して直接4Dやシステムのリソースにアクセスすることはできなくなりました。開発者の中にはインタフェースに使用する目的で4Dの内部 リソースを使用している場合があります。(例えば付きの名前やコマンド名を含むリソース)。この方法は完全に禁止されます。ほとんどの場合、4D内部リ ソースの代わりに他の方法を使用できます (定数, ランゲージコマンド等)。既存データベースの更新に対するインパクトを緩和するために、しばしば使用されるリソースを外部ファイル化するという代わりのシ ステムが実装されました。しかしながら変換されたデータベースにおいて、4D内部リソースを呼び出す部分を取り除くことを強くお勧めします。
  • バージョン11より、4Dで作成されたデータベースには.RSR (ストラクチャリソース) と .4DR (データリソース) ファイルは含まれません。

4D v11では、“リソース”という用語は“アプリケーションインタフェースのために翻訳が必要なファイル”と理解する必要があります。リソースの新しいアー キテクチャは"Resources"という名前のフォルダに基づき、このフォルダはデータベースのストラクチャファイル (.4db or .4dc) と同階層になければなりません。このフォルダはデフォルトで作成されません。データベースでリソースを使用する場合、このフォルダを作成します。このフォ ルダには、インタフェースの翻訳やカスタマイズに使用するファイル (ピクチャファイル, テキストファイル, XLIFFファイル等) を置きます。
こ のフォルダには前世代のリソースファイル (.rsr files) を置くこともできます。このリソースファイルは自動ではリソースチェーンに含められないことに留意してください。4D標準のリソース処理コマンドを使用し て開かなければなりません。4Dはこのフォルダを処理する際に、特にXLIFFファイルの管理において自動のメカニズムを適用します (このポイントは4D Design Referenceマニュアルで説明しています)。"リソース"テーマの2つのコマンド (Get indexed stringSTRING LIST TO ARRAYコマンド) がこの新しいアーキテクチャをサポートしています。

互換性メモ: 従来のリソース管理の原則は徐々に4Dから取り除かれていきます (前節参照)。新しいデータベースでは、XLIFFアーキテクチャや標準ファイルに利用をお勧めします。

リソースは、個別のファイルあるいはMacintoshファイルのリソースフォークに、定義済みフォーマット で保持されるデータです。特にリソースは文字列、ピクチャ、アイコン等のデータを含んでいます。実際独自のタイプのリソースを作成して使用することができ ます。また、そのリソースの中にどんなデータでも格納することができます。

元々Macintosh上では、データとリソースは一つのファイルにデータフォークリソースフォークとして格納され ていました。Macintoshファイルのデータフォークは、WindowsやUNIX上のファイルと同等のものです。Macintoshのリソース フォークは、Macintoshベースのリソースが含まれていて、WindowsやUNIXに同等のものはありません。
4Dはまだこの機能をサ ポートしますが、Mac OS上においてもWindowsと同様、リソースは個別のファイル (Mac OS上でのデータフォーク) に格納されます。この原則は4Dによって透過的に管理され、異なったプラットホームの間でのファイル交換を変換なしで可能とします。
リソースファイル管理コマンド (Create resource fileOpen resource file) は、クロスプラットフォームでの互換性を保持するために、データフォークのリソースに対して使用できるようになっています。

v11より前の4Dで作成されたデータベースでは、4Dは自動で、ストラクチャリソースを格納する.rsrファイルと、データファイルリソースを格納する.4drファイルを作成します。
4Dアプリケーション自身が、“.RSR”拡張子のファイルに格納されたリソースを使用しています。4D Writeなどの4Dプラグインもリソースを使用します。

4Dが提供するリソースファイルに加え、4DコマンドCreate resource fileOpen resource fileを使って、独自のリソースファイルを作成して使用できます。この2つのコマンドは、開いたリソースファイルを一意に識別するリソースファイル参照番号を返します。このリソース参照番号は、Open document等のシステムドキュメントコマンドによって返される一般ファイルのドキュメント参照番号と同じものです。すべての4Dリソースコマンドは、引数としてリソースファイル参照番号を受け取ります。リソースファイルを使い終わったら、CLOSE RESOURCE FILEを使って、そのファイルを閉じることを忘れないでください。

4Dのデータベースで作業する際、現在開いているすべてのリソースファイルまたは特定のリソースファイルのどちらか一方で作業することができます。

複数のリソースファイルを同時に開くことができます。4Dデータベース常に以下の複数のリソースファイルを開いています:

  • Macintosh上ではシステムリソースファイル
  • Windows上では (Macintoshのシステムリソースの一部を含む) ASIPORT.RSRファイル
  • 4Dアプリケーションリソースファイル
  • データベースのストラクチャリソースファイル (存在すれば)
  • データベースのデータファイルリソースファイル (存在すれば) も開かれることがあります
  • 最後に、開発者はOpen resource fileを使ってカスタムリソースファイルを開くことができます。

開かれたリソースファイルのリストは、リソースチェーンと呼ばれます。以下の2つの方法で所定のリソースを検索することができます:

  • 4Dリソースコマンドにリソースファイル参照番号を渡すと、リソースはそのリソースファイル内でのみ検索されます。
  • 4Dリソースコマン ドにリソースファイル参照番号を渡さない場合、そのリソースは現在開かれているすべてのリソースファイル内で検索されます。この場合、1番最後に開かれた ファイルから1番最初に開いたファイルに向かって検索を行います。このように、リソースチェーンは開かれた順序と逆の順番でブラウズされます。つまり、最 後に開かれたリソースファイルが最初に検査されます。

リソースファイルは、高度に構造化されています。各リソースデータの他に、そのリソース内容を詳細に記述したヘッダとマップを含んでいます。

リソースは、タイプで分類できます。リソースタイプは、常に4文字の文字列で表されます。リソースタイプは大文字小文字、および発音区別記号付き文字を識別します。例えばリソースタイプ“Hi_!”、“hi_!”、“HI_!”はすべて異なります。

重要: 小文字のリソースタイプは、オペレーションシステムで使用するために予約されています。そのため、ユーザ独自のリソースタイプを小文字で設計するのは避けてください。

下記は、共通で使用されるリソースタイプを示したものです:

  • “STR#”リソースタイプは、Pascal文字列のリストを含んでいるリソースです。このリソースはストリングリストリソースと呼ばれます。
  • “STR ” (4文字目にスペースがある点に注意) リソースタイプは、個別のPascal文字列を含んでいるリソースです。このリソースはストリングリソースと呼ばれます。
  • “TEXT”リソースタイプは、長さのないテキスト文字列を含んでいるリソースです。このリソースは、テキストリソースと呼ばれます。
  • “PICT”リソースタイプは、4Dを使って、MacintoshとWindowsの両方で使用および表示できるMacintoshベースのQuickDrawピクチャを含んでいるリソースです。このリソースはピクチャリソースと呼ばれます。
  • “cicn”リソースタイプは、4Dを使って、MacintoshとWindowsの両方で使用および表示できるMacintoshベースのカラーアイコンを含んでいるリソースです。このリソースはカラーアイコンリソースと呼ばれます。例えば、“cicn”リソースは、SET LIST ITEM PROPERTIESコマンドを使って階層リストの項目に割り当てることができます。

標準のリソースタイプの他に、独自のリソースタイプを作成することができます。例えば、“MTYP” リソースタイプを使って作業することができます。

開かれているすべてのリソースファイルまたは特定のリソースファイル内に現在存在するリソースタイプのリストを取得するには、RESOURCE TYPE LISTコマンドを使用します。また、開かれているすべてのリソースファイルまたは特定のリソースファイル内に現在存在する指定されたリソースタイプのリソースリストを取得するには、RESOURCE LISTコマンドを使用します。このコマンドは、指定されたリソースタイプの全リソースID番号と名前を返します。

警告: 多くのアプリケーションはリソースの内容を使って作業する際にそのリソースタイプを信頼しています。例えば、アプリケーションが“STR#”リソースにア クセスする際には、そのリソース内でストリングリストが見つかるものとみなします。標準のリソースタイプ内に矛盾したデータを格納してはいけません。これ を実行すると、4Dアプリケーションまたは他のアプリケーションにおいてシステムエラーを引き起こす原因になります。

警告: リソースは高度に構造化されたファイルです。そのため、リソースコマンド以外のコマンドを使ってリソースファイルにアクセスしてはいけません。例えば、SEND PACKET等のコマンドへリソースファイル参照番号 (ドキュメント参照番号と同じ時間型) を渡すことが妨げられることはありませんが、これを実行するとリソースファイルはおそらくダメージを受けます。

警告: ひとつのリソースファイルは約2700個のリソースを持つことができます。この制限は越えないようにしてください。この制限を越えると、リソースファイルがダメージを受けて、使用できなくなります。

リソースはリソース名を持っています。リソース名は最大255文字で指定することができ、発音区別記号は識別しますが、大文字小文字 の区別は行いません。リソース名は任意のリソースを説明するのに有効ですが、実際はリソースのタイプとID番号を使って、任意のリソースにアクセスしま す。リソース名は一意ではありません。複数のリソースで同じ名前を持つことができます。

リソースはリソースID番号 (短く言えばリソースIDまたはID) を持っています。このIDはリソースファイル内のリソースタイプ内において一意です。例えば:

  • 1つのリソースファイルに、リソース“ABCD” ID=1とリソース“EFGH” ID=1を持つことができます。
  • 2つのリソースファイルでは、それぞれ同じタイプとIDのリソースを持つことができます。

4Dコマンドを使ってリソースにアクセスする場合、そのリソースのタイプとIDを指定します。このリソースを検索するためのリソースファイルを指定 しなかった場合、4Dコマンドは調べたリソースファイル内で最初に見つかったリソースのオカレンスを返します。リソースファイルは開かれたのとは逆の順番 で検索されることを思い出してください。

リソースIDの範囲は-32768から32767までです。

重要: 15,000から32,767の範囲を独自のリソース用に使用します。負数のリソースIDを使用してはいけません。これはオペレーションシステムで使用さ れるために予約されています。また0から14,999のリソースIDを使用してもいけません。この範囲は4Dで使用されるために予約されています。

所定のリソースタイプのIDと名前を取得するには、RESOURCE LISTコマンドを使用します。

個別のリソース名を取得するには、Get resource nameを使用します。

個別のリソース名を変更するには、SET RESOURCE NAMEコマンドを使用します。

各4Dコマンドはオプションでリソースファイル参照番号を受け付けるため、異なる2つのリソースファイル内で同じタイプとIDを持つリソースを簡単に取り扱うことができます。
以下の例は、あるリソースから別のリソースにすべての“PICT”リソースをコピーします:

  ` 既存のリソースファイルを開く
 $vhResFileA:=Open resource file("")
 If(OK=1)
  ` 新しいリソースファイルを作成
    $vhResFileB:=Create resource file("")
    If(OK=1)
  ` リソースファイルAの"PICT"タイプのすべてのリソースIDと名前を取得
       RESOURCE LIST("PICT";$aiResID;$asResName;$vhResFileA)
  ` リソース毎に:
       For($vlElem;1;Size of array($aiResID))
          $viResID:=$aiResID{$vlElem}
  ` Aからリソースをロード
          GET RESOURCE("PICT";$viResID;vxResData;$vhResFileA)
  ` リソースをロードできたら
          If(OK=1)
  ` Bにリソースを書き込む
             SET RESOURCE("PICT";$viResID;vxResData;$vhResFileB)
  ` リソースの書き込みができたら
             If(OK=1)
  ` リソース名をコピー
                SET RESOURCE NAME("PICT";$viResID;$asResName{$vlElem};$vhResFileB)
  ` リソースプロパティもコピー (以下参照)
                $vlResAttr:=Get resource properties("PICT";$viResID;$vhResFileA)
                SET RESOURCE PROPERTIES("PICT";$viResID;$vlResAttr;$vhResFileB)
             Else
                ALERT("The resource PICT ID="+String($viResID)+" could not be added.")
             End if
          Else
             ALERT("The resource PICT ID="+String($viResID)+" could not be loaded.")
          End if
       End for
       CLOSE RESOURCE FILE($vhResFileB)
    End if
    CLOSE RESOURCE FILE($vhResFileA)
 End if

リソースは、タイプ、名前、ID番号の他に (属性とも呼ばれる) 追加プロパティを持っています。例えばリソースは パージ (消去) できるものもあれば、できないものもあります。この属性は、他のオブジェクトに割り当てるために空きメモリが必要とされている場合に、ロードされたリソー スがメモリからパージできるかどうかオペレーションシステムに知らせます。上記の例で示しているように、リソースを作成またはコピーする際、そのリソース のコピーだけでなく、そのリソースの名前およびプロパティもコピーすることが重要です。リソースプロパティに関する詳細は、Get resource propertiesおよびSET RESOURCE PROPERTIESの説明を参照してください。

メモリの中に任意のリソースタイプをロードするには、BLOBの中にリソース内容を返すGET RESOURCEを呼び出します。

ディスク上に任意のリソースを追加、または書き込むには、ユーザが渡したBLOBの内容にリソース内容を設定できるSET RESOURCEを呼び出します。

既存のリソースを削除するには、DELETE RESOURCEを使用します。

BLOBを解析してリソースデータを取り出す手間を省き、一般的なリソースタイプを簡単に取り扱うために、4Dは下記のような内蔵コマンドを用意しています:

  • STRING LIST TO ARRAYはストリングリストリソースに含まれる文字列による文字列配列またはテキスト配列を生成します。
  • ARRAY TO STRING LISTは文字列配列またはテキスト配列の要素を使ってストリングリストリソースを作成または上書きします。
  • Get index stringはストリングリストリソースから特定の文字列を返します。
  • Get string resourceはストリングリソースから文字列を返します。
  • SET STRING RESOURCEはストリングリソースを作成または上書きします。
  • Get text resourceはテキストリソースのテキストを返します。
  • SET TEXT RESOURCEはテキストリソースを作成または上書きします。
  • GET PICTURE RESOURCEはピクチャリソースのピクチャを返します。
  • SET PICTURE RESOURCEはピクチャリソースを作成または上書きします。
  • GET ICON RESOURCEはピクチャとしてカラーアイコンリソースを返します。

上記のコマンドは一般的なリソースタイプを簡単に管理するために用意されていますが、これはBLOBを使ったGET RESOURCESET RESOURCEの使用ができないということではありません。例えば、以下のコードは:

以下のコードと同等です:

 GET RESOURCE("TEXT";20000;vxData)
 If(OK=1)
    $vlOffset:=0
    ALERT(BLOB to text(vxData;UTF8 Text without length;$vlOffset;BLOB size(vxData)))
 End if

この章で説明するリソースコマンドの他にも、リソースやリソースファイルを使って作業する4Dコマンドがあります。

  • Macintosh上では、DOCUMENT TO BLOBBLOB TO DOCUMENTコマンドはMacintoshファイルのリソースフォーク全体をロードしたり書き込んだりすることができます。
  • SET LIST ITEM PROPERTIESSET LIST PROPERTIESを使って、リストの項目にピクチャやカラーアイコンリソースを関連付けたり、リストのノードとしてカラーアイコンリソースを使用することができます。
  • PLAYコマンドは、MacintoshとWindowsの両方で"snd"リソースを再生します。
  • SET CURSORコマンドは、"CURS"リソースを使って、マウスの外観を変更します。

 
プロパティ 

プロダクト: 4D
テーマ: リソース

 
参照 

BLOBコマンド
Get component resource ID
OSリソースマネージャエラー (-196 -> -1)