データボックス編集

目次

注:文中の青本とはBTRON1プログラミング標準ハンドブックのことを指します。


始めに

超漢字にはHMIマネージャ群や、アプリケーションプログラムで使用する固定的な データ群をプログラムから切り離した「データボックス」として定義しておき、 その中に存在するデータ項目を効率的かつ統一的に取り扱う手段が用意されてい る(青本8章参照)。

データボックスの利点

データボックスを利用する利点としては以下のような点が挙げられる。

プログラムとデータの分離

データボックスのデータはプログラムと切り離されている為、データボック スのデータを変更した場合、プログラムを再コンパイルする必要がなくなる。

例えば、ウィンドウに特定の文字列を表示する場合、データボックスを使わなかった 場合はプログラム中で例えば"Hello"文字列を格納する変数mojiretuを以下のよ うに記述し、このmojiretuを引数として画面に文字を表示するシステムコールを 呼ぶ。

TC mojiretu[] = { TK_H, TK_e, TK_l, TK_l, TK_o, TNULL };

表示する文字列を"World"に変更する場合は

という手順をとらなければならない。

一方データボックスを使った場合、"Hello"というデータを「文字列データ」と してIDをつけてデータボックスに(データボックス編集アプリケーション等 を使って)登録し、プログラム中ではそのIDを指定して"Hello"という文字列デー タを取り出して表示する。

表示する文字列を"World"に変更する場合は、データボックス内の"Hello"という 文字列を変更するだけで OKである。

ここでは文字列に関する例を挙げたが、文字列に限らず、パーツやメニューを扱 う場合も同様にデータボックスを使用すればプログラムの変更を伴わずにデータだけを 変更することが可能となる。

データの扱いが容易になる。

プログラム中にパーツ等のデータを記述した場合、例えば"確認"という文字が表 示されたテキストモーメンタリスイッチの場合以下のように記述する必要がある。

TC kakunin[] = { MC_STR, 0x334e, 0x4727, 0x0000 }; /* 確認 */
SWSEL msw = { MS_PARTS, { 0, 0, 70, 24 }, 0, kakunin, 0 };

この方法では


このアプリケーションの特長

このアプリケーションは以下の事を行うものです。


起動方法

データボックス編集の実行機能付箋が貼ってある仮身を選択して実行する。

なお、すでに記述したが、このアプリケーションは起動した実身中の「データボッ クスレコード」に対して編集を行うので、アプリケーション登録されたアプリケー ション実身をアプリケーション一覧等を使っ てとってきてそれにデータボックス編集の実行機能付箋を張り付けて実行する方 法がある。

ただし、この方法では万が一データボックスデータが壊れると取り返しがつかな くなるため、慎重を期するなら別にデータボックスデータだけを編集する為の実 身を作り(これは単純に原紙箱からデータボックス編集用紙を取って来るだけで よい)、編集はそちらで行い、作成されたデータをアプリケーション更新又はapdを使ってアプ リケーションファイルに移すという方法が良いだろう。

筆者は後者の方法をお勧めする。


画面の説明と使い方

このアプリケーションを実行すると以下のようなウィンドウが作られる。

[スクリーンショット]

と呼ぶ。以下各ウィンドウについて説明する。

メインウィンドウ

メインウィンドウには現在「道具箱ウィンドウ」で選択さ れているデータボックスのタイプのデータの一覧が表示される。

画面の説明

メインウィンドウには以下の3種類のデータが表示される。

通し番号
画面左端の数字はそのタイプのデータに1から順に付けられる通し番号である。 この番号はあくまでも目安の為についているだけであり、そのデータをプログラ ム中で扱う為に使われることは一切ない。
ID番号
画面の左から2番目の数字はそのデータのID番号である。プログラム中でそのデー タを扱う場合はこのID番号を使って指定する事になる。
データの外観
画面右に並んでいるのがデータボックスに格納されるデータの外観である。なお、 標準メニュー、汎用メニュー、パネルのデータはあくまで、似せて表示されてい るだけであり、実際のそれとは微妙に異なる場合があるので注意する必要がある。 これら3種類のデータの実際の外観は「道具箱ウィンドウ」 のテストボタンを押す事で参照する事が出来る。

メインウィンドウでの操作

メインウィンドウでは以下の操作を行う事ができる。

データの(通し番号による)選択
通し番号の部分をPDでクリックすることでその通し番号のデータを選択状態にす る事が出来る。選択状態になったデータはその詳細情報が「デー タ編集ウィンドウ」に表示されその内容を編集することが可能となる。なお、 この方法で選択したデータをドラッグして変形する事は基本的に出来ないので注 意する事(今後の拡張のためこうしている)。
IDの変更
IDの部分をPDでクリックするとID変更パネルが表示される。新しいIDを入力して 設定ボタンを押すとそのデータのIDが変更される。なお、すでに存在するID番号 や負のID番号をを設定した場合はなにも起こらない。なお以下のID番号は可能な限り使用をさけること。
データの(データの外観による)選択
データの外観部分をPDでクリックする事によってデータを選択状態にすることが できる。なお、以下に示すデータのタイプの場合、プレスした位置によってデー タ内のオブジェクトを選択する事がある。
データタイプ動作
パーツ(スイッチセレクタ、
スクロールセレクタ)
すでにそのデータが選択状態の時にプレスすると、プレスした場所にある項目が選択される
標準メニュー標準メニューの項目を表す文字列の上でプレスするとその項目が選択される
汎用メニュー汎用メニューの項目の上でプレスするとその項目が選 択される。項目以外の所でプレスすると汎用メニュー全体が選択される
パネル項目の範囲内でプレスするとその項目が選択される。項目の 範囲以外の所でプレスすると汎用メニュー全体が選択される
項目の移動
汎用メニュー、パネルの項目が選択状態になっている場合、その選択枠上でPDを プレスすることで、その項目をドラッグ移動することができる。ドラッグ移動出 来る場所にPDを持って行くとPDが移動手になる。ドラッグ移動によって項目をそ のデータの領域の外へ移動させることはできない。一度選択状態にしないとドラッ グ移動はできないので注意する事。
項目の移動を行っている際にPDがウィンドウの枠に移動すると、ウィンドウの内 容が自動的にその枠の方向へスクロールする。
項目の変形
汎用メニュー、パネルの項目が選択状態になっている場合、その選択枠の四隅の いずれかでPDをプレスすることで、その項目をドラッグ変形することができる。 ドラッグ変形出来る場所にPDを持って行くとPDが変形手になる。ドラッグ変形に よって項目をそのデータの領域の外へ移動させることはできない。一度選択状態 にしないとドラッグ変形はできないので注意する事。
項目の変形を行っている際にPDがウィンドウの枠に移動すると、ウィンドウの内 容が自動的にその枠の方向へスクロールする。
データの変形
多角形と折れ線以外の図形セグメントデータ、パーツ、汎用メニュー、パネルが 選択状態になっている場合、その選択枠の右下の隅をPDでプレスすることで、そ のデータをドラッグ変形することができる。ドラッグ変形出来る場所にPDを持っ て行くとPDが変形手になる。一度選択状態にしないとドラッグ変形はできないの で注意する事。
データの変形を行っている際にPDがウィンドウの枠に移動すると、ウィンドウの内 容が自動的にその枠の方向へスクロールする。
他のウィンドウからのドラッグによるデータの挿入
現在表示されているデータがピクトグラム、パターン、図形ビットマップの場合 は他のウィンドウ(主に基本図形エディタ)からビットマップデータをメインウィ ンドウにドラッグする事で、そのデータを挿入する事が出来る。
データタイプがピクトグラム、ビットマップの場合ドラッグして来たビットマップデータがそのままデータとして格納される。
パターンデータの場合、データ編集ウィンドウの挿入タイ プが0の場合パターンタイプ0のパターンとして登録される。この場合前景色はビッ トマップを左上から右下に右方法にサーチして行った時の最初の白以外の色、背 景色は白として設定される。挿入タイプが1の時はパターンタイプ1のパターンと して登録される。ドラッグした際にはマスクパターンは存在しないがドラッグ後 に特定の色を透明色としてマスクパターンを設定する事も可能である(方法はデータ編集ウィンドウを参照のこと)。パターンタイプについ ては青本2-19を参照のこと。
上記以外のデータタイプの時にビットマップデータをドラッグした場合や、ビッ トマップデータ以外のデータをドラッグした場合はなにも行われない。

道具箱ウィンドウ

道具箱ウィンドウはメインウィンドウに表示するデータの 種類の設定、挿入するデータの種類の設定、データの挿入、削除、テスト、デー タのIDに番号によるソート、格子点の幅の設定、シーンウィン ドウが表示するシーンの設定を行うウィンドウである。

以下それぞれについて説明する。

メインウィンドウに表示されるデータタイプ
道具箱ウィンドウの左上には現在メインウィンドウに表示されるデータのタイプ が表示される。この部分をPDでプレスすると、このデータタイプを選択する為の ポップアップメニューが表示され、メインウィンドウに表示するデータタイプを 選択する事が出来る。なお、キーの1〜9、0がそれぞれのデータに対応しており、 キーによる変更も可能である(1:ポインタ、2:ピクトグラム...0:パネル)。
挿入するデータタイプ
図形セグメントデータとパーツデータには複数の種類がある。「メインウィンド ウに表示されるデータタイプ」の右にはそれらのうちどのデータが挿入ボタンに よってメインウィンドウに挿入されるかを表示する。ここをPDでプレスする事で ポップアップメニューが表示され上記の場合と同様に選択することが出来る。な お、現在のタイプが図形セグメントデータかパーツデータのいずれかでない場合 はこの部分には"------"が表示され、操作を行う事はできない。
挿入ボタン
現在表示されているデータのタイプが図形セグメントデータ、文字列データ、パー ツデータ、標準メニューデータ、汎用メニューデータ、パネルデータのいずれか の場合このボタンを押すと現在選択されているデータの次(なにも選択されてい ない場合は一番最後)に新しいデータ(図形セグメントとパーツデータの場合は上 記の挿入するデータタイプで設定されているタイプのデータ)が挿入される。挿 入されるデータはデータの種類によってそれぞれ決められたデフォルトのデータ が挿入される。IDは現在選択されているデータのIDの次に大きいID(すでに使わ れているIDは設定されない)が自動的に設定される。上記以外のデータの場合は なにも行われない。
削除ボタン
現在選択されているデータが削除される。なにも選択されていない場合はなにも 行われない。
ソートボタン
現在表示されているデータタイプのデータがIDの小さい順にソートされる。
テストボタン
標準メニュー、汎用メニュー、パネルデータが選択されている場合、それらのデー タが実際に画面に表示される。なお、パネルをテストした場合はメニューボタン を押す事でテストから抜けることが出来る。これら以外のデータを表示している 場合もしくは、なにも選択されていない場合はなにも行われない。
格子点幅
メインウィンドウおよびシーンウィンド ウでデータのドラッグ移動/変形を行う際にデータの座標値がここで設定さ れている数値の倍数に固定される。
シーン
シーンウィンドウで表示するシーンの番号を設定する。シー ンウィンドウが表示されていない場合はここの値を変更することはできない。

データ編集ウィンドウ

データ編集ウィンドウはメインウィンドウで現在選択され ているデータを編集するウィンドウである。選択されているデータのタイプによっ て表示が異なる。以下それぞれのデータタイプで行える設定について述べる。

ポインタイメージ
残念ながら設定してもうまくポインタの表示が行えないので現在の所未サポート である。
ピクトグラムイメージ
編集できるのはピクトグラムデータの左上の座標のみである。
パターンデータ
パターンタイプが0のデータの場合前景色と背景色を変更できる(色の部分をPDで プレスすると色を選択するポップアップメニューがでて来る)。
パターンタイプが1のデータの場合、データをドラッグして挿入してからデータ をセーブするまでの間なら透明色を設定する事が出来る。透明色の色で透明色に する色を選択し、マスク設定ボタンを押せば良い。
なお、透明色の色で設定されている色がメインウィンドウに表示されているすべ てのパターンタイプ1のパターンの透明色の色として表示される。
挿入パターンタイプの部分でドラッグしてきたビットマップデータをどちらのタ イプのパターン(0か1)で登録するかを指定する。
図形ビットマップイメージ
編集できるのは図形ビットマップイメージデータの左上の座標のみである。
図形セグメントデータ
青本付録2-72で記述されている長方形〜折れ線までのデータを編集できる。
なお、以下の点に注意する事。
文字列データ
編集できるのは文字列の内容のみでありサイズや色などは編集できない(もとも とそうなっている)。
パーツデータ
パーツデータ(青本5-4又を参 照)はシリアルボックスを除きパーツに関するあらゆるデータを設定できる。な お、シリアルボックスのみあまりに複雑な為、一つの整数値フィールドを持った シリアルボックスのみ設定できる。
詳しい使い方については青本の5-20のパーツのデータ構造とデータ編集ウィンド ウを見てもらえばわかる(そのうち詳しく書くかもしれません)と思うので以下の 注意点のみ挙げる。
標準メニューデータ
標準メニューを設定する。詳しい使い方については青本の4章メニューのデータ 構造とデータ編集ウィンドウを見てもらえばわかる(そのうち詳しく書くかもし れません)と思うので以下の注意点のみ挙げる。
汎用メニューデータ
汎用メニューを設定する。詳しい使い方については青本の4章メニューのデータ 構造とデータ編集ウィンドウを見てもらえばわかる(そのうち詳しく書くかもし れません)と思うので以下の注意点のみ挙げる。
パネルデータ
パネルを設定する。詳しい使い方については青本の6章パネルのデータ構造とデー タ編集ウィンドウを見てもらえばわかる(そのうち詳しく書くかもしれません)と 思うので以下の注意点のみ挙げる。

シーンウィンドウ

シーンウィンドウとは?

シーンウィンドウはデータボックスデータとして登録されたデータを組み合わせ て一つのシーン(マイクロスクリプトのシーンのようなもの)を作るためのエディ タである。このウィンドウ上でデータボックスのデータを自由に配置してセーブ するとタイプ31番のレコードにそのデータが保存される。アプリケーションプロ グラム側でこのレコードを読み込み、指定したウィンドウ上にデータボックスの データをシーンウィンドウ上に配置した通りに簡単に表示する ライブラリを別に用意した。

このウィンドウ上に表示されているデータはすべてデータボックスで登録された データであり、このウィンドウはそれらのデータを参照して任意の位置に表示す るものである。従って同じデータを同じシーンに同時に複数登録する事も可能で ある。

このウィンドウで表示されているデータが参照している元データの編集はサイズ 以外に関しては行えない(編集するにはデータ編集ウィンドウ を使う事)。

シーンは0〜255までのいずれかの番号を持っており、シーンウィンドウには道具箱ウィンドウの右下に表示されている番号のシーンが表 示される。

シーンウィンドウでの操作

シーンウィンドウ上では以下の操作を行う事ができる。

データのPDによる直接選択
シーンウィンドウ上に表示されているデータ上でPDをプレスすることでそのデー タを選択することが出来る。選択されたデータはシーンデータ 編集ウィンドウで編集することが出来る。なお、ここでの選択とメインウィ ンドウでの選択は全くの別物なので注意する事。
シフトキー(青又は赤の矢印キー)を押しながら選択することで、他の選択状態を そのままにしてあらたにPDでプレスしたデータを選択することが出来る。なお、 この時すでに選択されているデータをPDでプレスした場合はそのデータのみ選択 状態でなくなる。
データのPDによるドラッグ選択
シーンウィンドウ上でデータ以外の場所でPDをプレスし、プレスしたままPDを動 かす事で範囲を指定する(範囲は選択枠で表示される)事ができる。PDのプレスを 解除した時点で指定された範囲の選択枠内に完全に含まれるデータが全て選択さ れる。
シフトキーを押しながらこの操作を行うと、選択枠内に完全に含まれるデータの うちすでに選択状態にあるものは選択状態が解除され、そうでないものは新たに 選択される。
データの選択枠を設定している際にPDがウィンドウの枠に移動すると、ウィンド ウの内容が自動的にその枠の方向へスクロールする。
データの移動
シーンウィンドウ上でデータが選択状態になっている場合、その選択枠内でPDを プレスすることで、そのデータをドラッグ移動することができる。ドラッグ移動 出来る場所にPDを持って行くとPDが移動手になる。一度選択状態にしないとドラッ グ移動はできないので注意する事。なお、ここでデータを移動してもそのデータ が参照するデータボックスの元データには一切影響を及ぼさない。
データの移動をしている際にPDがウィンドウの枠に移動すると、ウィンドウの内 容が自動的にその枠の方向へスクロールする。
データの変形
シーンウィンドウ上で一つのデータのみが選択状態になっている場合、その四隅 でPDをプレスすることで、そのデータをドラッグ変形することができる。ドラッ グ変形出来る場所にPDを持って行くとPDが変形手になる。一度選択状態にしない とドラッグ変形はできないので注意する事。なお、ここでデータを変形すると選 択されているデータが参照するデータボックスの元データも変形し、それに伴い そのデータを参照しているすべてのシーンウィンドウのデータも変形するので注 意する事。又、変形を行えるのは多角形、折れ線以外の図形データとパーツデー タのみである。
データの変形をしている際にPDがウィンドウの枠に移動すると、ウィンドウの内 容が自動的にその枠の方向へスクロールする。
データの挿入
リターンキーを押す事でシーンデータ編集ウィンドウの一 番下に表示されているデータがシーンウィンドウに挿入される。挿入されたデー タは一番手前に挿入され、選択状態となる。

表示に関する注意

存在しないデータを挿入した場合、そのデータが存在しない事を表す四角形に 斜め線の図形が表示される。

シーンウィンドウ内のデータには前後の関係があるが、パーツに関してはそれが 実際の描画に反映されないことがあるので注意する事(そもそもパーツを重ねて 表示させる事自体がおかしいはずである)。

メインウィンドウでデータを編集してもその変化はすぐにはシーンウィンドウに は表れない。この場合メニューから再表示を選択することでシーンウィンドウの 表示内容を正しくすることができる。

シーンデータ編集ウィンドウ

シーンデータ編集ウィンドウはシーンウィンドウで選択さ れているデータを編集するウィンドウである。以下の操作を行える。

座標
選択されているデータの座標を設定できる。ここで設定された座標は選択されて いるデータの参照する元データには影響を及ぼさない。
複数データが選択されている場合はそれらのデータがまとめて移動される。
サイズ
選択されているデータのサイズを設定できる。ここで設定された座標は選択され ているデータの参照するデータボックスの元データに設定されるので注意する事。 それに伴いそのデータを参照しているすべてのシーンウィンドウのデータも同様 に変形する。変形を行えるのは多角形、折れ線以外の図形データとパーツデータ のみである。
なお、データが複数選択されている場合、サイズはそれらのデータを含む最小の 長方形のサイズをあらわし、変更することはできない。
タイプ
現在選択されているデータのタイプを変更する。
データが複数選択されている場合は設定できない。
ID
現在選択されているデータのIDを変更する。
データが複数選択されている場合は設定できない。
一番前、一つ前、一つ奥、一番奥
現在選択されているデータの前後の配置を変更する。
データが複数選択されている場合は設定できない。
ID格納配列番号
現在選択されたデータがパーツの場合、そのパーツを識別する番号を設定できる。 この値は筆者が用意したライブラリの中でも使用される(画 面上に表示されたパーツを操作するにはそのパーツをウィンドウに登録した時に 得られるID番号を使って行う。ID格納配列番号はライブラリの中でそのIDを格納 する配列変数の配列の番号を表す為に使われる)。
データが複数選択されている場合は設定できない。
選択
現在シーンウィンドウで選択されているデータをメインウィンドウに表示する。 シーンウィンドウでデータが選択されていない場合や、選択されていても、その データがデータボックスに存在しない場合(四角形に斜線で表示される)はなにも 行われない。
描画モードに関する設定
上から4行目の右にはシーンウィンドウに描画するデータの描画モードが表示さ れ、PDによる設定を行う事ができる。以下の2つの場合においてその意味する内 容が異なるので注意する事。
シーンウィンドウでピクトグラム、パターン、ビットマップ、文字データの いずれかが一つだけ選択されている場合
そのデータに関する設定を行う。
シーンウィンドウで複数のデータが選択されている場合
選択されているデータのうち上記のデータタイプについてのみ設定を行う。
シーンウィンドウで何もデータが選択されていない場合。
シーンウィンドウにピクトグラム、パターン、ビットマップ、文字データのいず れかを挿入した場合の文字に関する設定を行う。
データが複数選択されている場合は選択を行う事はできない。
なお、図形セグメントデータとパーツデータは以下の理由により描画モードの設 定を行う事は出来ない。
文字に関する設定
上から5、6行目には文字の属性、サイズ、色に関する設定を行う。以下の2つの 場合においてその意味する内容が異なるので注意する事。なお、色は左が文字の 色、右が文字の背景色を表す。
シーンウィンドウで文字データが一つだけ選択されている場合。
その文字に関する設定を行う。
シーンウィンドウで複数のデータが選択されている場合。
選択されているデータのうち文字データのみ設定を行う。
シーンウィンドウで何もデータが選択されていない場合。
シーンウィンドウに文字データを挿入した場合の文字に関する設定を行う。
挿入
シーンデータ編集ウィンドウの一番下に表示されているデータタイプ、IDのデー タをシーンウィンドウに挿入し、挿入されたデータを選択状態にする。現在デー タが選択されている場合はその手前にデータが挿入される。選択されていない場 合には一番手前に挿入される。
削除
現在シーンウィンドウで選択されているデータをすべて削除する。
挿入タイプ、ID
「前挿入ボタン」、「奥挿入ボタン」、リターンキーでシーンウィンドウに挿入 されるデータを設定する。標準メニュー、汎用メニュー、パネルデータは挿入できないので注意する事。
なお、この部分の値、以下の操作が行われた場合にはこれらの値は即座に変更さ れる。

作成したデータボックスのデータの使い方と記述例

作成したデータボックスのデータをプログラム中で使用するにはまず、アプリケー ションファイル中に作成したデータボックスレコードが挿入されている必要があ る。従ってアプリケーション更新などを使ってデータボックス編集の実身からデータボックスレコード をアプリケーションファイルにコピーして下さい。

また、シーンデータのデータを使用する際も同様にシーンデータのレコード(レコードタイプが 31のレコードです)をアプリケーションファイルにコピーして下さい。

データボックスのレコードの挿入が完了しているならばアプリケーションプログラムの最初の方で

dopn_dat(&(cmd->self)); /* cmdはMAINの引数 */

を記述する事によってそのアプリケーション内でそのデータボックスデータを使 う事が出来るようになる。

以下各データタイプ別にデータの使い方の記述例を示す。

なお、データボックスデータを読み込んだり画面に表示したりする為のライブラ リが用意してある。使い方についてはデータボックス用ライブ ラリについてを参照の事。

ポインタイメージ
本アプリケーションではポインタデータは現在の所未サポートなので説明は省く。
ピクトグラムイメージ
通常ピクトグラムイメージはウィンドウや仮身に使用するものであり、使用する 際もピクトグラムデータのID番号を使って指定する為、データボックスのデータ をプログラマが読み込んで使用することはほとんどない。それでも使いたい場合 はピクトグラムイメージは図形ビットマップイメージと同じ方式で格納されてい るので、そちらの説明を参照する事。
パターンデータ
パターンデータは通常図形データの枠パターンや塗りつぶしパターンを指定する 時に使用する。 なお、特定の色での塗りつぶしパターンは以下のように記述できるので特にデー タボックスデータとして設定する必要はないだろう。
    PAT pat; /* 上の記述例と違ってポインタでないことに注意! */

    pat.spat.kind = 0;
    pat.hsize     = 1;
    pat.vsize     = 1;
    pat.fgcol     = color;   /* ここに塗りつぶし色のカラーマップ番号を記述 */
    pat.bgcol     = 0;       /* 背景色。0は白を表す */
    pat.mask      = FILL100; /* 100%塗りつぶしを表す */
図形ビットマップデータ
図形ビットマップデータはBMPではなくCBMPの形式(BMPに圧縮形式を表すデータ (青本2-8))で格納されている事に注意する事。以下の記述例ではビットマップデー タは圧縮されていないものとする。
図形セグメントデータ
図形セグメントデータはTADで規定されるとおりに格納されている(青本付録 2-72)。/usr/TRON/3B/include/btron/taddata.h にTADデータに関する定義がな されており、その中のTF_****が図形セグメントデータを表す。従って図形セグ メントデータを扱う場合は
#include<btron/taddata.h>
を記述する必要がある。
文字列データ
文字列データは文字列のデータがトロンコードでそのまま入っている。文字列の 位置情報や大きさ、フォント等の情報は入っていないので注意する事。
パーツデータ
パーツをIDを使ってデータボックスから直接設定する関数が用意されている。
標準メニュー定義データ
標準メニューをIDを使ってデータボックスから直接設定する関数が用意されている。
汎用メニュー定義データ
汎用メニューをIDを使ってデータボックスから直接設定する関数が用意されている。
パネルデータ
パネルをIDを使ってデータボックスから直接設定する関数が用意されている。

データボックス用ライブラリ & miscライブラリについて

データボックスのデータ及びシーンデータの読み込み、表示に関するライブラリ とその他GUIアプリケーションを作成する際に役に立つと思われる関数を入れた miscライブラリを用意したので以下に使い方を示す。

なお、データボックス用ライブラリ内でmiscライブラリの関数を使用しているの で、データボックス用ライブラリを使用する場合は必ずmiscライブラリも使用す る事。

データボックス用ライブラリ

ライブラリが定義する変数

scenedata
シーンのデータを格納する変数。関数loadscenedata()を使ってシーンデータを 格納する。
root
読み来んだデータボックスデータを格納するtreeのルート。

ライブラリが定義する関数

void inittreedata()
rootを初期化する関数。必ず最初に呼ぶ事。
void loadscenedata(W fd)
fdが示すファイルデスクリプタのファイルからシーンデータをロードし変数 scenedataに格納する。
void displayscene(W wid, W scenenum, W *pid, W pmax, RECT *hr)
widが指定するウィンドウの*hrが示す範囲ににscenenumが示すシーン番号のシー ンを表示する。hrがNULLの場合はそのウィンドウの描画領域全体に対して描画を 行う。
シーンにパーツが存在する場合、そのパーツをウィンドウに登録し、そのパーツ IDをpidが示す配列変数のシーンデータの「パーツID配列格納番号」の示す場所 に格納する。もし、格納するpidの場所が0でなければすでにそのパーツは登録さ れているものとしてパーツの登録は行われない。従って、始めてウィンドウにこ の関数を使って描画を行う場合はpidの配列の要素をすべて0に初期化しておく必 要がある。
pmaxにはpidの配列の要素数を入れる。もし「パーツID配列格納番号」がpmax以 上であった場合はパーツは格納されない。
この関数はパーツの登録は行うが描画は行わないので、別にcdsp_pwd等を使ってパーツの描画を行う必要がある。
W searchtree(W type, W id, B **ptr)
typeのタイプのidのIDを持つデータボックスデータをrootのtree又はデータボックスからサーチし、データへのポインタを返す。具体的には以下の動作を行う。 又、標準メニュー以外のデータボックスのデータはこの関数内で直接使用できる 形に展開されるので、ptrのデータを直接使う事ができる。それぞれのデータタ イプに関する記述例については作成したデータボックスの データの使い方と記述例を参照すること。
void displaypatdatafromid(W gid, W id, RECT *r, W dispmode)
gidの示す描画環境の*rの示す位置にidの示すパターンデータをdispmodeが示す 描画モードで描画する。
rがNULLの場合はパターンタイプが0の場合左上の点を0とする座標に、パターン タイプが1の場合はpat->mpat.bmap.boundsの示す位置に描画する。
データが存在しない場合は*rの位置に(rがNULLの場合は(0,0,50,50)の位置)に四 角形に斜線の図形を描画する。
void displaypictdatafromid(W gid, W id, RECT *r, W dispmode)
gidの示す描画環境の*rの示す位置にidの示すピクトグラムデータdispmodeが示す描画モードで描画する。
rがNULLの場合はcbmp->bmp.boundsの示す位置に描画する。
データが存在しない場合は*rの位置に(rがNULLの場合は(0,0,50,50)の位置)に四 角形に斜線の図形を描画する。
void displaybmpdatafromid(W gid, W id, RECT *r, W dispmode)
gidの示す描画環境の*rの示す位置にidの示すビットマップデータをdispmodeが 示す描画モードで描画する。
rがNULLの場合はcbmp->bmp.boundsの示す位置に描画する。
データが存在しない場合は*rの位置に(rがNULLの場合は(0,0,50,50)の位置)に四 角形に斜線の図形を描画する。
void displayfigdatafromid(W gid, W id, RECT *rptr)
gidの示す描画環境の*rptrの示す位置にidの示す図形セグメントデータを描画す る。
rがNULLの場合はその図形本来の位置に描画を行う。
データが存在しない場合は*rの位置に(rがNULLの場合は(0,0,50,50)の位置)に四 角形に斜線の図形を描画する。
void displaytextdatafromid(W gid, W id, RECT *r, W dispmode, W attr, PNT *mojisize, W fgcolor, W bgcolor)
gidの示す描画環境の*rの示す位置にidの示す文字列データをdispmodeが示す描 画モード、attrが示すフォント属性、*mojisizeが示す文字サイズ、 fgcolor,bgcolorが示す文字色で描画する。
rがNULLの場合はその図形本来の位置に描画を行う。
mojisizeがNULLの場合は文字のサイズは16x16で描画される。
データが存在しない場合は*rの位置に(rがNULLの場合は(0,0,50,50)の位置に四 角形に斜線の図形を描画する。
void createpartsdatafromid(W wid, W id, RECT *r, W *pid)
widの示すウィンドウの*rptrの示す位置にidの示すパーツデータを登録し、*pid に登録したパーツのパーツIDを格納する。
なお、この関数は登録は行うがパーツの描画は行わないので注意する事。
rがNULLの場合はそのパーツ本来の位置に登録を行う。
データが存在しない場合は*rの位置に(rがNULLの場合は(0,0,50,50)の位置)に四 角形に斜線の図形を描画する。
void displaynodata(W gid, RECT *r)
*rの位置に(rがNULLの場合は(0,0,50,50)の位置)に四角形に斜線の図形を描画する。

miscライブラリ

画面の描画に関する関数

void displaypatdata(W gid, PAT *pat, RECT *r, W dispmode)
gidの示す描画環境の*rの示す位置にpatの示すパターンデータをdispmodeが示す 描画モードで描画する。
rがNULLの場合はパターンタイプが0の場合左上の点を0とする座標に、パターン タイプが1の場合はpat->mpat.bmap.boundsの示す位置に描画する。
void displaypictdata(W gid, CBMP *cbmp, RECT *r, W dispmode)
gidの示す描画環境の*rの示す位置にcbmpの示すピクトグラムデータdispmodeが示す描画モードで描画する。
rがNULLの場合はcbmp->bmp.boundsの示す位置に描画する。
void displaybmpdata(W gid, CBMP *cbmp, RECT *r, W dispmode)
gidの示す描画環境の*rの示す位置にcbmpの示すビットマップデータをdispmodeが 示す描画モードで描画する。
rがNULLの場合はcbmp->bmp.boundsの示す位置に描画する。
void displayfigdata(W gid, B *figdata, RECT *rptr)
gidの示す描画環境の*rptrの示す位置にfigdataの示す図形セグメントデータを描画す る。
rがNULLの場合はその図形本来の位置に描画を行う。
void displaytextdata(W gid, TC *tptr, RECT *r, W dispmode, W attr, PNT *mojisize, W fgcolor, W bgcolor)
gidの示す描画環境の*rの示す位置にtptrの示す文字列データをdispmodeが示す描 画モード、attrが示すフォント属性、*mojisizeが示す文字サイズ、 fgcolor,bgcolorが示す文字色で描画する。
rがNULLの場合はその図形本来の位置に描画を行う。
mojisizeがNULLの場合は文字のサイズは16x16で描画される。
void createpartsdata(W wid, PARTS *parts, RECT *r, W *pid)
widの示すウィンドウの*rの示す位置にpartsの示すパーツデータを登録し、*pid に登録したパーツのパーツIDを格納する。
なお、この関数は登録は行うがパーツの描画は行わないので注意する事。
rがNULLの場合はそのパーツ本来の位置に登録を行う。

図形セグメントのサイズに関する関数

void getfigsize(B *figdata, RECT *r)
figdataが示す図形セグメントデータのサイズを計算しrに格納する。
void setfigsize(B *figdata, RECT r)
figdataの図形セグメントデータの位置をrに変更する。
ただし、多角形と折れ線は左上の点の位置のみ変更される。

ドラッグ操作に関する関数

void dragmove(W wid, PNT pnt, RECT *r, W p1, W p2, PNT hpnt, RECT maxrect, W haba)
widの示すウィンドウで pntの位置でドラッグした r の大きさのオブジェクトの ドラッグ移動の為の選択領域の移動操作を行う。
p1、p2に数値ボックスのパーツIDを設定しておいた場合、移動中の選択領域の左 上の点の座標がp1、p2 の数値ボックスパーツにリアルタイムに入れられる。そ の際 hpnt の値を原点とし座標の補正を行う。
maxrect が NULL でなければmaxrectの範囲を越えないように移動を行う。
haba > 0 の場合選択領域の左上のhpntで補正された左上の点の座標が必ずその 値の倍数になるように修正される。
ドラッグ終了時に移動後の選択領域のサイズがrに格納される。
void dragmove2(W wid, PNT pnt, RECT *r, W p1, W p2, PNT *hpnt, RECT *maxrect, W haba, W flag)
dragmoveの改良版。違いはhpnt、maxrectの指定がポインタになったこと(必要ない場合はNULLを指定)、flagに0以外の数字を指定する事でウィンドウ外へのドラッグが可能になったことの2点である。
void dragresize(W wid, PNT kpos, RECT *r, W p1, W p2, PNT hpnt, RECT maxrect, W haba, W mode)
widの示すウィンドウでkposの位置を固定した r の大きさのオブジェクトのドラッ グ変形の為の選択領域の変形操作を行う。
p1、p2に数値ボックスのパーツIDを設定しておいた場合、変形中の選択領域の大 きさが p1、p2 の数値ボックスパーツにリアルタイムに入れられる。
maxrect が NULL でなければ maxrectの範囲を越えないように変形を行う。
haba > 0 の場合変形中の座標が必ずその値の倍数になるように修正する。
mode が 1 の時は kposの対角線上の頂点がkposより左上にいかないようにする。
ドラッグ終了時に変形後の選択領域のサイズがrに格納される。
ドラッグ変形時にPDが画面の枠上に来た時にウィンドウのスクロールを行うよう な関数もあるのだが、少々バグが残っている(スクロールした時に時々選択枠が 消されずに残る事がある)のでまだ公開しません。それでも使いたい人は直接私 に言って下さい。
void dragresize2(W wid, PNT kpos, RECT *r, W p1, W p2, PNT *hpnt, RECT *maxrect, W haba, W mode)
dragresizeの改良版。違いはhpnt、maxrectの指定がポインタになったこと(必要ない場合はNULLを指定)である。
W dragvobjandpaste(WINFOREC *wrec, W wid, PNT pnt, RECT vr, VLINK *vlnk, VOBJSEG vseg, W timeout);
仮身を他のウィンドウへドラッグ移動させる。
widに自分のウィンドウIDを設定、pntに仮身をドラッグした時のポインタの座標、vrに仮身のサイズ、vlnkに仮身を表すlnkへのポインタ、vsegに仮身のVOBJSEG、timeoutにドラッグ移動したときにACKメッセージが返って来るまで待つ時間(ミリ秒)を設定する。
wrecがNULLでない場合はwrecが持つウィンドウIDに一致するウィンドウ上にドラッグした場合はなにもしない
自分のウィンドウ上にドラッグした場合はなにもしない。
正常終了時には0、タイムアウトした場合は-1が返る。

その他の関数

W getpartsnum(W *pid, W pmax, W partsid)
W型の配列変数pidの中からpartsidと同じ要素を探し、みつかった場合その要素番号を返す。見付からなかった場合は-1を返す。
pmaxにpidの要素数を格納すること。
void printrect(RECT r)
長方形rの座標を表示。
具体的には
printf("rect %d %d %d %d\n", r.c.left, r.c.top, r.c.right, r.c.bottom);
を行う。
void msgpanel(TC *tc)
*tc が表すテキストと「確認」ボタンの存在するパネルを作成し、画面に表示す る。
作成されたパネルは*tcの文字列の長さに応じた大きさで作成され、自動的に画 面の中央に配置される。
*tc内にkaigyotcと同じ文字が存在する場合、それを改行記号とみなし、パネル 内で改行して表示する。
なお、改行文字が必要内場合はTNULLを指定すれば良い。
パネルの詳細を変更したい場合はmisclib.h内のdefine文を変更すること。 エラーメッセージパネルを表示するには(改行文字を定めて)エラーメッセージを テキストデータで登録し、それを表示する関数を上記の記述例を元に作成すると 良いだろう。
void displaytcmsg(W num)
データボックスのテキストデータの番号を入れるとその内容を上記のmsgpanelを使ってパネルに表示する関数。

メニューの操作について

このアプリケーションには以下のメニューが用意されている。

終了
アプリケーションを終了する。終了前とデータが異なっていても確認のメッセー ジは表示されないので注意する事。メインウィンドウのピクトグラムのダブルク リック又は命令-Eでも同じ動作が行われる。
保存
すべて保存
データボックスデータ及びシーンデータの両方を保存する。命令-Sでも同じ動作 が行われる。
データボックスデータのみ保存
データボックスデータのみ保存する。
シーンデータのみ保存
シーンデータのみ保存する。
表示
再表示
全てのウィンドウの再表示を行う。主にメインウィンドウでデータボックスデー タの変更を行った場合その変更をシーンウィンドウに反映させる場合に使用する。
シーンパネル表示
シーンウィンドウ及びシーン編集ウィンドウの表示のON/OFFを行う。
バージョン表示
現在のバージョンを表示するパネルを表示する。
編集
位置合わせ
このメニューを選択すると、シーンウィンドウ上で選択されているデータの位置 合わせを行う為のパネルが表示される。パネルで合わせたい項目を設定し、決定 ボタンを押すとシーンウィンドウ上で選択されているデータの位置合わせが行わ れる。なお、位置合わせは選択されいるデータのうち左上の点が一番上(同じも のがあればそれらのうちで一番左。それも同じ場合は奥にあるほうのデータ)の データが基準となる。
なお、2つ以上のデータがシーンウィンドウで選択されていない時にこのメニュー を選択してもなにも起きない。
シーンのコピー
現在のシーンを他のシーンにコピーする。選択するとパネルが表示されるのでコ ピーしたいシーン番号を入れて選択するとシーンがコピーされる。
ウィンドウ
ウィンドウの一覧をサブメニューで表示する。選択するとそのウィンドウがアク ティブになる。
小物
小物の一覧をサブメニューで表示する。選択するとその小物が起動される。

キー操作について

このアプリケーションではキーは主にテキストボックス及び数値ボックスの編集 に使われるが、それらの編集を行っていない場合、以下の操作をキー入力によっ て行う事が出来る。

命令-E
メニューの終了と同じで、アプリケーションを終了させる。
命令-S
メニューの全て保存と同じでデータボックスデータとシーンデータを保存する。
命令-D
メニューの位置合わせと同じ動作を行う。
1-9、0
メインウィンドウの表示を対応する番号のデータタイプに変更する。対応する番 号は青本の8-20で定義されている番号に対応(ただし10は0)している。ちなみに 道具箱ウィンドウのデータタイプを表す部分をPDでプレス した時にでてくるポップアップメニューにもその番号は表示されている。
改行
シーンデータ編集ウィンドウの一番下の行に表示されてい るデータをシーンウィンドウに挿入する。

操作一覧表

ここでは各ウィンドウで行える操作の一覧を表にして示す。

表で使用する記号一覧

表に使用する記号の一覧を以下に示す。

メインウィンドウ

メインウィンドウ上での操作

操作内容
通し番号部分のPDプレスによるデータの選択
IDのPDプレスによる変更
データの外観部のPDプレスによるデータの選択×
データの外観部のPDプレスによるデータ内項目の選択(注1)×××××
選択状態のデータ内項目のPDによるドラッグ移動×××××××
選択状態のデータ内項目のPDによるドラッグ変形×××××××
選択状態のデータのPDによるドラッグ変形(右下隅のみ)(注2) ×××××
他のウィンドウからのドラッグによるデータの挿入××××××

各データタイプで推奨されるデータID番号

ポインタイメージ
ピクトグラムイメージ100以上の値(100以下はシステムで使用するために予約されている)
パターンデータ256以上の値(99以下はシステムで使用するために予 約されている。
255以下は図形セグメントデータのパターンとして使われる)。
図形ビットマップデータ7以上の値(6以下はデフォルトが設定されている)
図形セグメントデータ1000000(百万)〜1009999以外の値。この範囲のID はこのアプリケーションで使っている。
文字列データ1000000(百万)〜1049999以外の値。この範囲のIDはこ のアプリケーションで使っている。
パーツ定義データ1000000(百万)〜1049999以外の値。この範囲 のIDはこのアプリケーションで使っている。
標準メニュー定義データ1000000(百万)〜1009999以外の値。この範 囲のIDはこのアプリケーションで使っている。
汎用メニューデータ1000000(百万)〜1009999以外の値。この範囲のID はこのアプリケーションで使っている。
パネル定義データ1000000(百万)〜1009999以外の値。この範囲のID はこのアプリケーションで使っている。

道具箱ウィンドウ

道具箱ウィンドウ上での操作

操作内容
PDによるメインウィンドウに表示されるデータタイプの変更
数キーによるメインウィンドウに表示されるデータタイプの変更
PDによる挿入するデータのデータタイプの変更×× ×××××
挿入ボタンのプレスによるメインウィンドウへのデータ挿入 ×××
削除ボタンのプレスによるメインウィンドウで選択されているデータの 削除
ソートボタンのプレスによるメインウィンドウ上のデータのID番号によ るソート
テストボタンのプレスによるメインウィンドウで選択されているデータ の実際の外見の表示××××××
PDによる格子点幅の変更
PDによるシーンウィンドウに表示されるシーンの変更(注1)

データ編集ウィンドウ

メインウィンドウに表示されているデータタイプ毎に異なっているのでここでは 詳しく述べない。青本で各データの仕様を見てもらえればわかると思う。操作に関する注意点は以下の通り。

シーンウィンドウ

シーンウィンドウ上での操作

操作内容
PDによるデータの選択
PDによる選択状態のデータのドラッグ移動
PDによる選択状態のデータのドラッグ変形(注1)××× ×
リターンキーによるデータの挿入

シーンデータ編集ウィンドウ

シーンデータ編集ウィンドウ上での操作

操作内容
データの左上の点の座標の設定×
データのサイズの変形(注1)×××× ××
現在選択されているデータのタイプの変更××
現在選択されているデータのIDの変更××
ボタンのプレスによる現在選択されているデータの表示の前後関係の変 更(注2)×××
パーツのIDを格納する配列変数の配列番号の設定××× ××××
現在選択されているデータをメインウィンドウに表示(注3)××
データの描画モードに関する設定(注4)××
文字データのサイズ、色、属性に関する設定(注4)××× ××
挿入ボタンのプレスによるシーンウィンドウへのデータの挿入
挿入ボタンのプレスによる現在選択されているデータのシーンウィンド ウからの削除×
シーンウィンドウに挿入するデータタイプの設定
シーンウィンドウに挿入するデータのIDの設定

シーンウィンドウに挿入されるデータのタイプが変更される条件。


このアプリケーションが対応していないデー タについて

以下のデータについてはこのデータボックスアプリケーションは対応していませ んのであしからず。

ポインタイメージ
このデータタイプは今の所どうやっても登録したデータをポインタとして表示で きないので現在の所未サポートです。誰かうまくポインタの形状を変更できた人 はやり方を教えて下さい。
ピクトグラムイメージ、パターンイメージ、図形ビットマップイメージ
現在の所planes=1、pixbits=0x0808以外はサポートしていません。
パーツデータ
パーツデータのうちシリアルボックスのみあまりに複雑な為、現在の所一つの整 数値フィールドを持ったシリアルボックスのみ設定できる。その他のパーツは全 ての条件を設定できるはずである。
標準メニュー
標準メニューの項目リストのデータをデータボックスの文字列データ番号を指定 して設定する事は出来ない。これは現在の所テキストデータとしてMC_ATTR等の 属性をデータとして登録するのが困難なためこうしている。なお、このアプリケー ション以外で作った標準メニューで項目リストのデータを文字列データの番号で 指定してあるものを読み込む事は可能である。
汎用メニュー、パネルデータ
標準メニューとは逆に汎用メニューとパネルデータの項目データを実データで指 定する事はできない(全てデータボックスに登録したデータのみを設定できる)。 これに関しては特に今後サポートする予定はないのであしからず(サポートしな くても困らないと思う)。
その他
データタイプとは関係ないが、一つのファイルに2つ以上のデータボックスデー タタイプ(10)のレコードやシーンデータが存在している場合は動作は保証されな いので注意する事。

エラーメッセージについて

エラーが起きた場合、パネルが開いてエラーメッセージを表示する予定ですが、 現在エラーメッセージに関してはまだ一部のみしか実装されていない。


戻る