見出し画像

[基礎][式言語]ダイアログボックスのリストを改行して表示させるには?

はじめに

@Prompt関数を使うと、任意のメッセージをダイアログボックスに表示することができます。しかし長いメッセージですと、次のように一行が長くなり、だらしなく見えてしまいます。

画像1

こうした場合は、コードの文字列を代入する変数に、改行も入れてしまえば解決します。下記コードの文字列における「長い

長い」という改行も、x1という変数に保存されます。

x1 := "長い長い長い長い長い長い長い長い長い長い

長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い";
@Prompt([Ok];"データ型の評価"; x1);

このため、実行すると

画像2

この通り意図した場所で、ダイアログボックスのメッセージも改行されます。

ところが@Promptの引数に@Implode関数を取る場合には、この方法ではうまく行きません。@Implode関数はリストのメンバーを文字列としてくっつけて返す変数です。要するに、複数の値を@Promptで表示したい時に使えます。

例えば次のコードを実行すると、

x1 := @Now;
x2 :=  "数なら1:" + @Text(@IsNumber(x1));
x3 :=  "時間なら1:" + @Text(@IsTime(x1));
x4 :=  "テキストなら1:" + @Text(@IsText(x1));
xx := "のデータ型は?";
x1 := @Text(x1);
@Prompt([Ok];"データ型の評価"; @Implode(x1
:
xx
:
x2: x3: x4))

結果はこうなります。コードは改行したのに文字列同士がくっついていて、表示では改行されていません。

画像3

この記事では、@Char関数を使ってリストを改行する方法を紹介します。


@Char関数を使ってリストを改行する

アクションボタンを押すと、@Promptでダイアログボックスを表示するプログラムを作ります。前提として、何らかのアプリの原型を既に作成済とします。アプリを起動し、フォームを選択します。この記事では「main」という名前のフォームを開きました。

画像4

画面右枠内(アクションペイン)で右クリック[アクションの作成]を選び、「改行後」という名前のアクションボタンを作りました。

そして画面下の枠内(プログラムペイン)には、式言語のコードを記入します。「実行 クライアント」の右側を[式]とすることを忘れないで下さい。

画像5

コード

コードは次の通りです。

x1 := "2020";
x2 :=  "数なら1:" + @Text(@IsNumber(x1));
x3 :=  "時間なら1:" + @Text(@IsTime(x1));
x4 :=  "テキストなら1:" + @Text(@IsText(x1));
@Prompt([Ok];"データ型の評価"; @Implode(x1: xx: x2: x3: x4));

x1 := "2020";
x2 :=  "数なら1:" + @Text(@IsNumber(x1));
x3 :=  "時間なら1:" + @Text(@IsTime(x1));
x4 :=  "テキストなら1:" + @Text(@IsText(x1));
@Prompt([Ok];"データ型の評価"; @Implode(@Char(10)+x1: xx: x2: x3: x4));

x1 := "2020";
x2 :=  "数なら1:" + @Text(@IsNumber(x1));
x3 :=  "時間なら1:" + @Text(@IsTime(x1));
x4 :=  "テキストなら1:" + @Text(@IsText(x1));
@Prompt([Ok];"データ型の評価"; @Implode(x1: xx: x2: x3: x4+@Char(10)));

x1 := "2020";
x2 :=  "数なら1:" + @Text(@IsNumber(x1));
x3 :=  "時間なら1:" + @Text(@IsTime(x1));
x4 :=  "テキストなら1:" + @Text(@IsText(x1));
@Prompt([Ok];"データ型の評価"; @Implode(x1: xx+@Char(10): x2: x3: x4));

x1 := "2020";
x2 :=  "数なら1:" + @Text(@IsNumber(x1));
x3 :=  "時間なら1:" + @Text(@IsTime(x1));
x4 :=  "テキストなら1:" + @Text(@IsText(x1));
@Prompt([Ok];"データ型の評価"; @Implode(x1+@Char(10): xx+@Char(10): x2+@Char(10): x3: x4));

x1 := "2020";
x2 :=  "数なら1:" + @Text(@IsNumber(x1));
x3 :=  "時間なら1:" + @Text(@IsTime(x1));
x4 :=  "テキストなら1:" + @Text(@IsText(x1));
@Prompt([Ok];"データ型の評価"; @Implode(@Char(10)+x1+@Char(10): xx+@Char(10): x2+@Char(10): x3+@Char(10): x4+@Char(10)));

x1という変数のデータ型を、ダイアログボックスに表示させるプログラムですが、@Implode関数の引数が、( )内にx1: xx: x2: x3: x4と5つあります。このうちxxは実行時にどうなるかのテストとして、何も定義していない変数としました

@Implode関数の戻り値を、@Promptの引数とすることにより、x1からx4までの値を、文字列としてくっつけてダイアログボックスに表示させることができます。なお@Implode関数の引数は、:で「引数1 : 引数2 : 引数3 : …」と数を調整できます。

@Char関数は引数によって挙動が変わります。@Char(10) では改行が返されます。下記画像のコードをブロック(カタマリ)に分けて整理すると、赤で囲った6つのブロックに区別できます。

画像6

1番目のブロックでは、@Implode関数の引数内で、「+@Char(10)」を挿入していません。従って、実行時にメッセージが無改行で表示されるはずです。

2番目から5番目までのブロックでは、「+@Char(10)」を挿入する位置を変えてテストしています。色々と変えて、変えた結果を見ましょうとの趣旨です。

6番目のブロックでは、すべての引数に「+@Char(10)」を加えています。

環境の違い

改行記号が@Char(10)で大丈夫なの?ノーツはWindows以外にはMacでもウェブブラウザーでも動きますよね?と疑問に感じられるかもしれません。

「いいんです」
環境に関係なく『ノーツの改行は@Char(10)』です。ノーツでは環境依存しないために自動変換してくれます。
他にも、ノーツの中ではパスの区切記号『/(半角のスラッシュ)』はWindowsでもパスの区切記号として使えます。便利ですね!

次にコードを実行してみます。引き続き読んでいただけると嬉しいです。

ここから先は

475字 / 6画像

¥ 110

期間限定 PayPay支払いすると抽選でお得に!

サポートいただければ、記事をもっと充実することができます