このドキュメントでは、全般的な画面レイアウトを定義するオプションについて説明します。
端末コマンド %M
には、Natural メッセージ行を表示する方法と位置を定義するためのさまざまなオプションを使用できます。
以下に参考情報を示します。
画面の一番下にメッセージ行を表示します。
画面の一番上にメッセージ行を表示します。
メッセージ行の位置設定に関する他のオプションについては、『端末コマンド』ドキュメントの「%M - メッセージ行の制御」を参照してください。
指定した色でメッセージ行を表示します。カラーコードの詳細については、『パラメータリファレンス』ドキュメントに記載されている、セッションパラメータ CD
の説明を参照してください。
端末コマンド %=
を使用すると、もともと色の設定をサポートしていないプログラムのフィールド属性に色を割り当てることができます。 コマンドにより、指定の属性で定義されたすべてのフィールド/テキストが、指定の色で表示されます。
定義済みの色割り当てが使用している端末タイプに合わない場合は、このコマンドを使用して元の割り当てを新しい割り当てで上書きできます。
%=
コマンドは、Natural エディタ内で、例えばマップの作成中に色割り当てをダイナミックに定義するために使用することもできます。
コード | 説明 |
---|---|
空白 | 色変換テーブルをクリアします。 |
F | 新たに定義した色で、プログラムで割り当てた色を上書きします。 |
N | プログラムで割り当てられた色属性は変更されません。 |
O | 出力フィールド |
M | 変更可能なフィールド(出力および入力) |
T | テキスト定数 |
B | 点滅 |
C | 斜体 |
D | デフォルト値 |
I | 高輝度 |
U | 下線付き |
V | 反転 |
BG | 背景 |
BL | 青 |
GR | 緑 |
NE | デフォルト色 |
PI | ピンク |
RE | 赤 |
TU | 空色 |
YE | 黄色 |
例:
%=TI=RE,OB=YE
この例では、すべての高輝度テキストフィールドに赤を割り当て、すべての点滅出力フィールドに黄色を割り当てています。
端末コマンド %X は、Natural 情報行の表示を制御します。
詳細については、『端末コマンド』ドキュメントに記載されている、端末コマンド %X
の説明を参照してください。
以下に参考情報を示します。
ウィンドウとは、端末画面上に表示される、プログラムによって構築された論理ページのセグメントのことです。
論理ページとは、Natural の出力エリアのことです。つまり、論理ページには、Natural プログラムによって表示用に生成された現在のレポート/マップが含まれています。 この論理ページは物理画面よりも大きくすることができます。
存在に気付かない場合もありますが、ウィンドウは常に存在しています。 DEFINE WINDOW
ステートメントで個別に指定されない限り、ウィンドウのサイズは端末画面の物理サイズと同一です。
ウィンドウは、以下の 2 つの方法で操作できます。
物理画面上では、ウィンドウのサイズと位置を制御できます。
論理ページ上では、ウィンドウの位置を制御できます。
以下の図は、物理画面上のウィンドウの位置を示しています。 どちらの例にも、画面上のウィンドウの位置が違うだけで、論理ページの同じセクションが表示されていることに注意してください。
以下の図は、論理ページ上のウィンドウの位置を示しています。
論理ページでウィンドウの位置を変更しても、物理画面上のウィンドウのサイズおよび位置は変更されません。 つまり、ウィンドウがページ上で移動するのではなく、ページがウィンドウの "下" で移動するということです。
DEFINE WINDOW
ステートメントを使用して、物理画面上のウィンドウのサイズ、位置、属性を指定します。
DEFINE WINDOW
ステートメントはウィンドウをアクティブ化しません。ウィンドウをアクティブ化するには、SET WINDOW
ステートメントを使用するか、INPUT
ステートメントの WINDOW
節を使用します。
DEFINE WINDOW
ステートメントには、さまざまなオプションを使用できます。 これらのオプションについて、以下の例で説明します。
以下のプログラムは、物理画面上のウィンドウの位置を定義しています。
** Example 'WINDX01': DEFINE WINDOW ************************************************************************ DEFINE DATA LOCAL 1 COMMAND (A10) END-DEFINE * DEFINE WINDOW TEST SIZE 5*25 BASE 5/40 TITLE 'Sample Window' CONTROL WINDOW FRAMED POSITION SYMBOL BOTTOM LEFT * INPUT WINDOW='TEST' WITH TEXT 'message line' COMMAND (AD=I'_') / 'dataline 1' / 'dataline 2' / 'dataline 3' 'long data line' * IF COMMAND = 'TEST2' FETCH 'WINDX02' ELSE IF COMMAND = '.' STOP ELSE REINPUT 'invalid command' END-IF END-IF END
ウィンドウは、ウィンドウ名によって識別されます。 名前の最大長は 32 文字です。 ウィンドウ名には、ユーザー定義変数と同じ命名規則が適用されます。 この例では、ウィンドウ名は "TEST" です。
ウィンドウのサイズは、SIZE
オプションで設定します。 この例では、ウィンドウの高さは 5 行、幅は 25 列(ポジション)です。
ウィンドウの位置は、BASE
オプションで設定します。 この例では、ウィンドウの左上隅は行 5、列 40 に位置します。
TITLE
オプションを使用すると、ウィンドウフレームに表示するタイトルを定義できますが、これはウィンドウのフレームを定義した場合にのみ有効です。
CONTROL
節を使用して、PF キー行、メッセージ行、および統計行をウィンドウに表示するかフル物理画面に表示するかを指定します。 この例では、CONTROL WINDOW
によって、ウィンドウ内にメッセージ行が表示されます。 CONTROL SCREEN
を使用すると、ウィンドウの外側の物理画面全体に行が表示されます。 CONTROL
節を省略すると、デフォルトで CONTROL WINDOW
が適用されます。
FRAMED
オプションを使用すると、フレーム付きのウィンドウを定義できます。 このフレームは、カーソル依存です。 カーソル依存が適用可能な場所では、適切な記号(<、-、+、>。POSITION
節の説明を参照)の上にカーソルを置いて Enter キーを押すだけで、ウィンドウ内のページを上下左右に移動できます。 つまり、物理画面上のウィンドウの下にある論理ページを移動できます。 記号が表示されない場合は、カーソルを枠線の最上部(前のページに戻る場合)または最下部(次のページに進む場合)に置いて Enter キーを押すことにより、ウィンドウ内でページを前後に移動することができます。
FRAMED
オプションの POSITION
節を使用して、ウィンドウのフレームに表示する、論理ページ上のウィンドウの位置情報を定義します。 これは、論理ページがウィンドウよりも大きい場合にのみ適用されます。そうでない場合は、POSITION
節は無視されます。 位置情報は、論理ページが拡張する方向(現在のウィンドウの上、下、左、右)を示します。
POSITION
節を省略すると、デフォルトで POSITION SYMBOL TOP RIGHT
が適用されます。
POSITION SYMBOL
を使用すると、位置情報が記号形式("More: < - + >")で表示されます。 情報は、上部か下部のいずれか、または両方のフレームラインに表示されます。
TOP
/BOTTOM
で、位置情報を上のフレームラインまたは下のフレームラインのどちらに表示するかを指定します。
LEFT
/RIGHT
で、位置情報をフレームラインの左または右のどちらに表示するかを指定します。
INPUT WINDOW
ステートメントは、DEFINE WINDOW
ステートメントで定義したウィンドウを有効にします。 以下の例では、ウィンドウ TEST が有効化されています。 ウィンドウにデータを出力する場合(WRITE
ステートメントを使用する場合など)は、SET WINDOW
ステートメントを使用します。
前述のプログラムを実行すると、入力フィールド COMMAND
がウィンドウに表示されます。 セッションパラメータ AD
を使用して、フィールドの値を高輝度で表示し、下線を充填文字として使用するよう定義されています。
プログラム WINDX01 の出力:
複数のウィンドウを開くことはもちろん可能です。 ただし、Natural ウィンドウでは、アクティブにできるのは常に 1 つのウィンドウのみ、つまり最新のウィンドウのみです。 画面に前のウィンドウが表示されていても、アクティブではないので、Natural に無視されます。 現在のウィンドウにのみ入力できます。 入力する十分なスペースがない場合は、まずウィンドウサイズを調整する必要があります。
COMMAND
フィールドに「TEST2」と入力すると、プログラム WINDX02 が実行されます。
** Example 'WINDX02': DEFINE WINDOW ************************************************************************ DEFINE DATA LOCAL 1 COMMAND (A10) END-DEFINE * DEFINE WINDOW TEST2 SIZE 5*30 BASE 15/40 TITLE 'Another Window' CONTROL SCREEN FRAMED POSITION SYMBOL BOTTOM LEFT * INPUT WINDOW='TEST2' WITH TEXT 'message line' COMMAND (AD=I'_') / 'dataline 1' / 'dataline 2' / 'dataline 3' 'long data line' * IF COMMAND = 'TEST' FETCH 'WINDX01' ELSE IF COMMAND = '.' STOP ELSE REINPUT 'invalid command' END-IF END-IF END
2 つ目のウィンドウが開きます。 もう 1 つのウィンドウは表示されたままですが、非アクティブです。
新しいウィンドウのメッセージ行は、ウィンドウ上ではなく、出力ウィンドウの下部に表示されることに注意してください。 これは、WINDX02 プログラムの CONTROL SCREEN
節によって定義されています。
DEFINE WINDOW
、INPUT WINDOW
、SET WINDOW
の各ステートメントの詳細については、『ステートメント』ドキュメントの対応する説明を参照してください。
標準レイアウトは、マップエディタで定義できます。 このレイアウトによって、アプリケーション全体のすべてのマップの外観を統一できます。
標準レイアウトを参照するマップを初期化すると、その標準レイアウトはマップに固定的に組み込まれます。 つまり、標準レイアウトを変更する場合、変更を有効にするために影響を受けるマップをすべて再カタログ化する必要があります。
標準レイアウトとは対照的に、ダイナミックレイアウトは、そのレイアウトを参照するマップに固定的に組み込まれるのではなく、ランタイム時に組み込まれます。
したがって、レイアウトマップをマップエディタの[マップエディタプロファイル(Define Map Settings For MAP)]画面で "ダイナミック" として定義すると、レイアウトに対する変更はすべて、そのレイアウトを参照するすべてのマップに引き継がれます。 マップを再カタログ化する必要はありません。
レイアウトマップの詳細については、『エディタ』ドキュメントの「マップエディタ」を参照してください。
Natural を使用すると、各国で使用するための多言語アプリケーションを作成できます。
マップ、ヘルプルーチン、エラーメッセージ、プログラム、関数、サブプログラム、コピーコードは、ダブルバイト文字セットを使用する言語を含め、最大 60 の異なる言語で定義できます。
以下に参考情報を示します。
Natural では、言語ごとに言語コード(1~60)が割り当てられています。 以下の表は、言語コード表を一部抜粋したものです。 言語コードの完全な表については、『システム変数』ドキュメントに記載されている、システム変数 *LANGUAGE
の説明を参照してください。
言語コード | 言語 | オブジェクト名のマップコード |
---|---|---|
1 | 英語 | 1 |
2 | ドイツ語 | 2 |
3 | フランス語 | 3 |
4 | スペイン語 | 4 |
5 | イタリア語 | 5 |
6 | オランダ語 | 6 |
7 | トルコ語 | 7 |
8 | デンマーク語 | 8 |
9 | ノルウェー語 | 9 |
10 | アルバニア語 | A |
11 | ポルトガル語 | B |
言語コード(左の列)が、システム変数 *LANGUAGE
に含まれているコードです。 このコードは Natural によって内部的に使用されます。 このコードを使用してユーザー言語を定義します(以下の「ユーザー言語の定義」を参照)。 表の右の列のマップコードを使用して、Natural オブジェクトの言語を識別します。
例:
ポルトガルの言語コードは "11" です。 ポルトガル語版の Natural オブジェクトをカタログ化するときに使用するコードは "B" です。
言語コードの完全な表については、『システム変数』ドキュメントに記載されている、システム変数 *LANGUAGE
の説明を参照してください。
Natural オブジェクト(マップ、ヘルプルーチン、プログラム、関数、サブプログラム、コピーコード)の言語を定義するには、対応するマップコードをオブジェクト名に追加します。 マップコードを除くオブジェクト名は、すべての言語で同一である必要があります。
以下の例では、マップが英語とドイツ語で作成されています。 マップの言語を識別するために、各言語に対応するマップコードがマップ名に組み込まれています。
DEMO1 = 英語のマップ(マップコード 1)
DEMO2 = ドイツ語のマップ(マップコード 2)
マップコードは、1~9、A~Z または a~y の範囲内の値です。 英字のマップコードには、特別な操作が必要です。
小文字は大文字に自動的に変換されるため、通常は、名前に小文字があるオブジェクトをカタログ化することはできません。
しかし、例えば、言語コードが 59 でマップコードが "x" の漢字(日本語)をオブジェクト名に定義する場合、小文字を使用する必要があります。
このようなオブジェクトをカタログ化するには、まず正しい言語コード(ここでは 59)を端末コマンド %L=nn
を使用して設定します。nn は言語コードです。
その後、実際のマップコードの代わりにアンパーサンド(&)文字をオブジェクト名に使用して、オブジェクトをカタログ化します。 したがって、マップ DEMO の日本語版を作成するには、DEMO& という名前でマップを STOW します。
ここで Natural オブジェクトのリストを確認すると、マップは DEMOx として正しくリストされます。
言語コード 1~9 および大文字の A~Z のオブジェクトは、アンパーサンド(&)表記を使用せずに直接カタログ化できます。
以下の例では、3 つのマップ DEMO1、DEMO2、および DEMOx. を確認できます。 マップ DEMOx を削除するには、作成時と同じ方法で、つまり、端末コマンド %L=59
で正しい言語を設定し、アンパーサンド(&)表記(DEMO&)を使用して削除します。
システム変数 *LANGUAGE
の定義として、プロファイルパラメータ ULANG
(『パラメータリファレンス』を参照)または端末コマンド %L=nn
(nn は言語コード)を使用して、ユーザーごとに使用する言語を定義します。
多言語オブジェクトをプログラムで参照するには、オブジェクト名にアンパーサンド(&)文字を使用します。
以下のプログラムでは、マップ DEMO1 および DEMO2 が使用されています。 マップ名の最後のアンパーサンド(&)文字はマップコードを表し、*LANGUAGE
システム変数で定義されている現在の言語のマップを使用することを意味します。
DEFINE DATA LOCAL 1 PERSONNEL VIEW OF EMPLOYEES 2 NAME (A20) 2 PERSONNEL-ID (A8) 1 CAR VIEW OF VEHICLES 2 REG-NUM (A15) 1 #CODE (N1) END-DEFINE * INPUT USING MAP 'DEMO&' /* <--- INVOKE MAP WITH CURRENT LANGUAGE CODE ...
このプログラムを実行すると、英語のマップ(DEMO1)が表示されます。 これは、*LANGUAGE
の現在の値が "1" = 英語であるためです。
MAP DEMO1 SAMPLE MAP Please select a function! 1.) Employee information 2.) Vehicle information Enter code here: _ |
以下の例では、端末コマンド %L=2
を使用して、言語コードが "2" = ドイツ語に変更されています。
プログラムを再度実行すると、ドイツ語のマップ(DEMO2)が表示されます。
BEISPIEL-MAP Bitte wählen Sie eine Funktion! 1.) Mitarbeiterdaten 2.) Fahrzeugdaten Code hier eingeben: _ |
アプリケーションの中には、多言語プログラムを定義すると便利なものがあります。 例えば、一般的な請求書発行プログラムでは、請求書を発行する国ごとのさまざまな税制度に対応する、複数のサブプログラムを使用します。
多言語プログラムは、前述のマップの場合と同様の方法で定義します。
Natural ユーティリティ SYSERR を使用すると、Natural エラーメッセージを最大 60 の言語に変換できます。また、独自のエラーメッセージを定義することもできます。
ユーザーに表示されるメッセージの言語は、*LANGUAGE
システム変数によって決まります。
エラーメッセージの詳細については、『ユーティリティ』ドキュメントの「SYSERR ユーティリティ」を参照してください。
編集マスクを使用して定義する日付フィールドおよび時刻フィールドに使用される言語もまた、システム変数 *LANGUAGE
によって決まります。
編集マスクの詳細については、『パラメータリファレンス』に記載されている、セッションパラメータ EM
の説明を参照してください。
同じアプリケーションを使用しつつ、ユーザーのスキルレベルに応じて(さまざまな詳細度の)異なるマップを使用したい場合があります。
アプリケーションを多言語で国際的に使用する必要がない場合、多言語のマップに対する手法を使用して、詳細度の異なるマップを定義できます。
例えば、初心者用に言語コード 1 を定義し、上級者用に言語コード 2 を定義できます。 この単純かつ有効な手法を以下に示します。
以下のマップ(PERS1)には、エンドユーザー向けに、メニュー機能を選択する方法の説明が含まれています。 非常に詳細な情報が記載されています。 マップ名には、マップコード 1 が含まれています。
MAP PERS1 SAMPLE MAP Please select a function 1.) Employee information _ 2.) Vehicle information _ Enter code: _ To select a function, do one of the following: - place the cursor on the input field next to desired function and press ENTER - mark the input field next to desired function with an X and press ENTER - enter the desired function code (1 or 2) in the 'Enter code' field and press ENTER |
詳細な説明が含まれていない同じマップが、同じ名前で保存されています。ただし、マップコードは 2 です。
MAP PERS2 SAMPLE MAP Please select a function 1.) Employee information _ 2.) Vehicle information _ Enter code: _ |
上記の例では、ULANG
プロファイルパラメータの値が 1 の場合は詳細な説明付きのマップが出力され、値が 2 の場合は説明なしのマップが出力されます。 『パラメータリファレンス』に記載されている、プロファイルパラメータ ULANG
の説明も参照してください。