簡単な絵(BMPファイル)と音(WAVファイル)の表示サンプルを元に、
パネル周辺のプログラミングを説明します。

*////////////////////////////////////////////////////////////
*///   サンプルソース                   /
*////////////////////////////////////////////////////////////
*
*  使用データベース SAMPLE.DBF
*  データベース構造  FIELD1 : TEXT 文字型(CHAR) 40byte
*            FIELD2 : BMP   〃    20byte
*            FIELD3 : SND   〃    20byte
*            FIELD4 : ROW 数値型(NUM)  7byte(999.999)
*            FIELD5 : COL 数値型(NUM)  7byte(999.999)
*
*  レコード内容
*     Rec1 [TEXT]  HANA256.BMP BOOT.WAV
*        [BMP]  HANA256.BMP
*        [SND]  BOOT.WAV
*        [ROW]  240.000
*        [COL]  320.000
*
*     Rec2 [TEXT]  LEAVES.BMP CHIMES.WAV
*        [BMP]  LEAVES.BMP
*        [SND]  CHIMES.WAV
*        [ROW]  150.000
*        [COL]  200.000
*
*     Rec3 [TEXT]  MARBLE.BMP DING.WAV
*        [BMP]  MARBLE.BMP
*        [SND]  DING.WAV
*        [ROW]  222.000
*        [COL]  246.000
*
*  上記登録に使用したBMP,WAVファイルは、Windowsのファイルを利用しています。
*  システムより複写してご使用下さい
************************************************************************
*
*** SAMPLE.PRG ***
USE SAMPLE ALIAS TEST

SET TOOLBAR OFF

DEFINE PANEL WIN1 FROM 0,0 TO 20,73
DEFINE PUSHBUTTON SHOW OF WIN1 AT 15,50 PROMPT "表示"
DEFINE PUSHBUTTON END OF WIN1 AT 15,60 PROMPT "終了"

DEFINE LISTBOX XSELECT OF WIN1 FROM 1,1 TO 16,26 PROMPT FIELD TEST->TEXT

ON SELECTION PANEL WIN1 DO SAMSUB

ACTIVATE PANEL WIN1
RELEASE PANEL WIN1
SET TOOLBAR ON
CLOSE ALL

PROCEDURE SAMSUB
DO CASE
  CASE PANEL()="SHOW"
    DO SUB.PRG
  CASE PANEL()="END"
    DEACTIVATE PANEL WIN1
ENDCASE

*** SUB.PRG ***
MC1="  "
DEFINE PANEL WIN2 FROM 1,5 TO 25,78 TITLE "画像の表示と音声再生"
DEFINE PUSHBUTTON PICT OF WIN2 AT 16,40 PROMPT "表示"
DEFINE PUSHBUTTON PLAY OF WIN2 AT 16,50 PROMPT "再生"
DEFINE PUSHBUTTON END OF WIN2 AT 16,60 PROMPT "終了"

DEFINE TEXT DUMMY OF WIN2 AT 0,0 PROMPT TEST->TEXT

MC1=TRIM(BMP)
IF FILE(MC1)
  DEFINE IMAGE IMAGE01 OF WIN2 FROM 20.000,10.000 TO 210.000,300.000 ;
  FILENAME &MC1
ENDIF

ON SELECTION PANEL WIN2 DO SUB1

ACTIVATE PANEL WIN2
RELEASE PANEL WIN2

PROCEDURE SUB1
DO CASE
  CASE PANEL()="PICT"
    MC1=TRIM(BMP)
    IF FILE(MC1)
      RESTORE IMAGE FROM &MC1
    ENDIF
  CASE PANEL()="PLAY"
    MC1=TRIM(SND)
    IF FILE(MC1)
      PLAY SOUND FILENAME &MC1
    ENDIF
  CASE PANEL()="END"
    DEACTIVATE PANEL
ENDCASE


<パネル定義について>
 パネル表示のためには、一般的に次の順番で記述します。

 1.DEFINE PANELによって、パネル名,大きさなど外枠を決めます。
 2.パネルに配置するPUSHBUTTONなどの部品と配置を記述します。
 3.配置されたボタンなどの部品を選択されたときに動作するコマンドを記述します
   (データベースに対する処理やサブルーチン名)
 4.定義したパネルを表示します。
 5.パネルを閉じられたときの処理を記述します。
 6.必要に応じて、3で呼び出されるサブルーチンを用意します。

 ソースでの記述は、この6項目について作成し順次必要な処理を追加するという手
順で進めます。

現在ではパネルペインターも完成し、簡単に画面設計が出来るようになりました。上記の
手順は概略を把握しておけば、ユーザーが行う事はなくなってしまいました


<DEFINE PANEL記述について>
 DEFINE PANEL <パネル名> FROM <行1>,<列1> TO <行2>,<列2>
  COLOR [<<R,G,B>|<カラー名1>>]
  [TITLE <文字式>>]
  ・・・

   座標指定はキャラクターベースとドットベースの2種類がありますが、キャラクタ
ベースはARAGO/DOS上のソース互換を考慮して残したものと思われます。
  キャラクターベース:FROM 0,0 TO 20,50
  ドットベース   :FROM 0.000,0.000 TO 400.000,500.000
 ドットベースの場合、使用するフォントによって左右される場合があり一概にサイズ
を決定出来ませんが、キャラクタよりドットベースを推賞している様です。また、どち
らの指定もARAGOW自身で使用しているフォント/フォームで使用しているフォントによ
りサイズが変わってしまいます。作成した時と違った表示になってしまった場合には、
使用フォントが変更されていないか確認し、調整を繰り返します。


<カラー設定について>
 カラー設定は、数値での指定とカラー名の2種類の指定が出来ます。ユーザーが新た
にカラー名を指定する場合には次の手順で行います。
 1.SET COLOR <カラー名> TO [赤(R)],[緑(G)],[青(B)]の文法に従い、配合を指定し
  ます。
 2.ARAGOWを一度終了します。指定したカラー名と配合はARAGOW.INIにつけ加えられま
  す。
 3.次に起動されたときには指定カラー名が有効となり、プログラム内で使用する事が
  できます。

 また、終了させなくても確実に指定できる方法に数値指定があります。各カラー要素
を0〜255範囲で指定し、配合します。
 COLOR  0, 0, 0 ・・・ 黒
 COLOR 255,255,255 ・・・ 白
 
 また、ARAGOWではデフォルトカラーを用意しています。SET COLOR を行うことなく、
カラー名で使用できます。用意された16色は以下の通りです。
 BLOCK   0, 0, 0    MAROON  128, 0, 0
 GREEN   0,128, 0    OLIVE  128,128, 0
 NAVY    0, 0,128    PURPLE  128, 0,128
 TEAL    0,128,128    GRAY   128,128,128
 SILVER  192,192,192    RED   255, 0, 0
 LIME    0,255, 0    YELLOW  255,255, 0
 BLUE    0, 0,255    FUCHSIA 255, 0,255
 AQUA    0,255,255    WHITE  255,255,255


<フォント指定について>
 オブジェクトに対してフォント指定ができます。省略した場合はARAGOWで指定され
たフォントが適応されます。
  文法 FONT OF <フォント名>,サイズ
 パネルへの指定はありません。ARAGOWで指定されたフォントにより横/縦が自動調
整されます。オブジェクトに対して大きなフォントを指定すると、パネルサイズより
はみ出してしまうことがありますが、ARAGOWは表示位置に対してエラーにせずスクロ
ールバーを表示しますので、調整を繰り返して下さい。
 フォントを間違えた場合やサイズ指定を忘れた場合は、エラーとはならずARAGOWで
指定したフォントを使用し、そのまま表示します。

 フォント名をソースに記述する際フォント名が判らない場合には、Windowsのメイン
からフォント設定をして下さい。


<DEFINE PUSHBUTTONについて>
 DEFINE PUSHBUTTON <プッシュボタン名> OF <パネル名>
 AT <数値式1>,<数値式2> [TO <数値式3>,<数値式4>]
 PROMPT <文字列>
  ・・・
 数値式1,数値式2でボタンの左上場所を指定します。数値式3,4を省略するとボタンの
大きさは文字列によって自動調整されます。


<DEFINE LISTBOXの記述について>
 DEFINE LISTBOX <リストボックス名> OF <パネル名>
  FROM <数値式1>,<数値式2> [TO <数値式3>,<数値式4>]
  PROMPT <文字列>
  ・・・
 PROMPTにフィールドを指定すると、データベース内容が表示されます。マウス選択
によって、レコードポインタをを操作出来ます。


<パネル定義PRGの流れについて>
DEFINE PANEL WIN1 FROM 0,0 TO 20,73 SHADOW RIGHT             (1)
DEFINE PUSHBUTTON SHOW OF WIN1 AT 15,50 PROMPT "表示"           (2)
DEFINE PUSHBUTTON END OF WIN1 AT 15,60 PROMPT "終了"           (3)

DEFINE LISTBOX XSELECT OF WIN1 FROM 1,1 TO 16,26 PROMPT FIELD TEST->TEXT (4)

ON SELECTION PANEL WIN1 DO SAMSUB                     (5)

ACTIVATE PANEL WIN1                            (6)
RELEASE PANEL WIN1                            (7)
CLOSE ALL                                 (8)

PROCEDURE SAMSUB
DO CASE
  CASE PANEL()="SHOW"
    DO SUB.PRG                            (9)
  CASE PANEL()="END"
    DEACTIVATE PANEL WIN1                       (10)
ENDCASE

 流れ1. (1) -> (2),(3),(4) -> (5) -> (6)
   ここで定義されたパネルが表示され、ボタン入力を待ちます。

 流れ2. (6) -> (9)
   ボタン待ちの状態でマウスクリックなど操作が行われると、対応したコマン
   ドが実行されます。サンプルは、「表示(SHOW)」を押すとサブプログラムが
   実行されます。

 流れ3. (6) -> (10) -> (7) -> (8)
   DEACTIVATE PANELが実行されると、ACTIVATEでイベント待ちとなっていたプ
   ログラムが次のステップに進みます。次には(7)RELEASEが記述されています
   ので、パネルが閉じられます。データベースに対する処理が必要な場合には
   (9)の場所で処理(記述)します


<SET MESSAGE TOを追加する場合の注意>
 このサンプルにSET MESSAGE TOを追加する場合には若干の注意が必要です。
ARAGO/DOSの場合には(1)〜(6)に記述したり(9)の前に記述して、処理内容を順次表示
する事が可能でした。ARAGOWではACTIVATEに到達し、イベント待ちとなったときに
メッセージが表示されます。次の2点に注意しながら、使用して下さい
  ・(1)〜(6)で記述されるSET MESSAGEコマンドは全て無視される。
   (DEFINE PANEL のオプションで指定して下さい)
  ・イベント発生後(例えば(9)の前後)に記述されたSET MESSAGEコマンドは
   ACTIVATEに到達した時点で表示されるため、記述順に表示されない事がある

 処理進捗をを表示する一つの手段としては、「DEFINE TEXT」でパネル内に表示し
「RELEASE OBJECT」で消去する方法があります。ARAGOWでは、一度表示してしまった
文字列も消去する事が出来ます。


<BMP・PCXファイルとDEFINE IMAGE>
DEFINE IMAGE <オブジェクト名> OF <パネル名> FROM <数値1>,<数値2> TO <数値3>,<数値4>
 FILENAME <ファイル名>/<メモフィールド名>
 このコマンドでは左上と右下の座標を数値で指定します。そのため、表示データの
サイズが反映されず、表示サイズに自動調整されてしまいます。これを回避するために
は、次の方法で表示幅を設定して下さい。
 1.RESTORE IMAGEコマンドもしくはメニュー機能を選択し、画面への表示を行います
 2.ステータスラインに「exp.Row240,Col320」が表示されます。この数値をプログラ
  に反映させます。

 変更前:DEFINE IMAGE INAGE01 OF WIN2 FROM 20.000,10.000 TO ;
          210.000,300.000 FILENAME &MC1
 変更後:DEFINE IMAGE INAGE01 OF WIN2 FROM 20.000,10.000 TO ;
          20.000 +ROW ,10.000 + COL FILENAME &MC1
  *.原点にイメージのサイズを付加して数値を決定します。


<パネル定義テクニック>
 ARAGO/DOSでは、パネルサイズより外側に位置するようなボタン定義は出来ません
でした。ARAGOWでは、パネルサイズをはみ出すような部品(オブジェクト)を定義すると
自動的にスクロールバーが表示されます。

+========================+-------------------------
|            |        テキスト1:
|< パネルサイズ ---------->|       -------   :
|            |       |ボタン1|   :
|            |       -------   :
+========================+ゥゥゥゥゥゥゥゥゥゥゥゥゥ
:            :             :
:            :             :
:      -------   :             :
:      |ボタン2|   :             :
:      -------   :             :
---------------------------------------------------

 ボタン1やテキスト1を定義すると横スクロールバー、ボタン2を定義すると縦スクロールバー
が表示されます。
 なお、スクロールバーに対応したオブジェクトはテキストやボタンなどで、移動する
可能性のないラインなどは対応しません。