version 6.0
SET RESOURCE (resType; resID; resData{; resFile})
| 引数 | 型 | 説明 | |
| resType | 文字列 | 4文字のリソースタイプ | |
| resID | 数値 | リソースID番号 | |
| resData | BLOB | リソースの新しい内容 | |
| resFile | DocRef | リソースファイル参照番号、または | |
| 省略時、カレントリソースファイル |
説明
SET RESOURCE コマンドは、BLOB resDataに渡されるデータを使って引数resTypeとresIDに渡されるタイプとIDを持つリソースを作成または上書きします。
重要: resTypeには4文字を渡す必要があります。
リソースを書き込めなかった場合、システム変数OKに0が設定されます。
resFileに有効なリソースファイル参照番号を渡すと、リソースはそのリソースファイルに追加されます。resFileを省略した場合、リソースはリソースチェーンの最上位にあるファイル (最後に開いたリソースファイル) に追加されます。
Note: リソースは数メガバイトのサイズになる可能性があります。
プラットフォーム独立性: Mac OSベースのリソースに対して作業していることを忘れないでください。プラットフォームが何であろうと、倍長整数のような内部リソースデータはMacintoshバイトオーダーで格納されます。Windows上では、(ストリングリストリソースおよびピクチャリソース等の) 標準リソースデータは必要に応じて自動的にバイトスワップされます。これに対して、カスタム内部データストラクチャを作成および使用する場合は、BLOBから取り出すデータのバイトスワップは開発者に任されています (LONGINT TO BLOBコマンドにMacintosh byte ordering定数を渡すなど)。
例題
4Dセッション中にインタープロセス変数でユーザの環境設定を管理すると仮定します。この環境設定をセッション間で保存するには、以下のように記述できます:
1. SAVE VARIABLESとLOAD VARIABLESを使って、ディスク上の変数ドキュメントにその変数を保存して取り出します。
2. VARIABLE TO BLOB、BLOB TO DOCUMENT、DOCUMEN T TO BLOB、BLOB TO VARIABLEコマンドを使って、ディスク上のBLOBドキュメントにその変数を保存して取り出します。
3. VARIABLE TO BLOB、SET RESOURCE、GET RESOURCE、BLOB TO VARIABLEコマンドを使って、ディスク上のリソースファイルにその変数を保存して取り出します。
以下の例は、3番目のメソッドの例です。
On Exit データベースメソッドに以下のように記述します:
` On Exit データベースメソッド
If (Test path name("DB_Prefs")#Is a document)
$vhResFile:=Create resource file("DB_Prefs")
Else
$vhResFile:=Open resource file("DB_Prefs")
End if
If (OK=1)
VARIABLE TO BLOB(<>vbAutoRepeat;$vxPrefData)
VARIABLE TO BLOB(<>vlCurTable;$vxPrefData;*)
VARIABLE TO BLOB(<>asDfltOption;$vxPrefData;*)
` and so on...
SET RESOURCE("PREF";26500;$vxPrefData;$vhResFile)
CLOSE RESOURCE FILE($vhResFile)
End if
On Startup データベースメソッドに以下のように記述します:
` On Startup データベースメソッド
C_BOOLEAN(<>vbAutoRepeat)
C_LONGINT(<>vlCurTable)
$vbDone:=False
$vhResFile:=Open resource file("DB_Prefs")
If (OK=1)
GET RESOURCE("PREF";26500;$vxPrefData;$vhResFile)
If (OK=1)
$vlOffset:=0
BLOB TO VARIABLE($vxPrefData;<>vbAutoRepeat;$vlOffset)
BLOB TO VARIABLE($vxPrefData;<>vlCurTable;$vlOffset)
BLOB TO VARIABLE($vxPrefData;<>asDfltOption;$vlOffset)
` and so on...
$vbDone:=True
End if
CLOSE RESOURCE FILE($vhResFile)
End if
If(Not($vbDone))
<>vbAutoRepeat:=False
<>vlCurTable:=0
ARRAY STRING(127;<>asDfltOption;0)
End if
参照
システム変数とセット
リソースを書き込めた場合システム変数OKに1が設定されます。それ以外は0が設定されます。