会話
対話とは、二人の間の会話です。 通常、2人で次のような会話をします。
- パイロット:(サンドイッチをトレイに戻す)「経済についてどう思いますか?」
- 副操縦士:(電話から見上げていない)「昇給が必要です、あなたはどうですか?」
- パイロット:(ガーリックブレッドのパン粉を拭き取ります)「まあ、今週は五つ星で食べます。」
- 副操縦士:(ゲームで眉をひそめる)「彼らのチキンスープはおいしいです。」
この二人は、会話中に他のことに気を配ることができるように情報を交換しています。
2人が会話モードに切り替えて、集中力が高まることがあります。
- パイロット:「ガスが不足しています。」
- 副操縦士:「他のタンクに切り替えてください。」
- パイロット:「1時間前にやった」
- 副操縦士:「これは良くありません。 もう1時間水に浸かるよ」と語った。
- パイロット:「私はアイデアを持っていますが、あなたはそれを気に入らないでしょう。」
このモードでは、副操縦士はソリティアゲームを無視し、パイロットはサンドイッチを無視します。
ダイアログボックスは、人がコンピュータと会話するためのウィンドウです。 JMPには、モードレスとモーダルの2種類のダイアログボックスがあります。 検索/置換ダイアログはモードレスです。パイロットが経済から食料に切り替えるのと同じくらい簡単に、開いたままでウィンドウ間でフォーカスを切り替えます。 JMPの保存ダイアログはモーダルです。 JMPがファイル保存モードに入ると、ファイルが保存されるか、保存がキャンセルされるまで、他に何も邪魔になりません。 JSLは、モードレスまたはモーダルのカスタムダイアログを作成して、情報を提供し、回答を返すことができます。
答えを得る
モーダルダイアログボックスの寿命:
- ディスプレイボックスツリーを構築する
- 所有するウィンドウを開いて、ディスプレイボックスツリーを表示します
- ウィンドウが閉じるのを待ちます
項目1、ツリーの構築は、多くの場合、新しいウィンドウ関数の引数として実行されます。 項目2と3は、新しいウィンドウ機能です。 これがアラートボックスのモーダルダイアログです。
rdata = New Window( title, <<MODAL></MODAL>
<<モーダルは、次のステートメントを実行する前にウィンドウが閉じるのを待つモーダルウィンドウにする魔法です。
あなたが知っておくべきだと思っただけです...
この小さなウィンドウの双方向ダイアログは非常に単純です。
- JMP:「起きろ! このことが起こった!」
- 大丈夫"
返すデータはありません。 NewWindow関数は値を返します。 OKボタンを押したかどうかがわかります
{Button( 1 )}
または、OSが提供する閉じるボタンでウィンドウを閉じました
{Button( -1 )}
1つの要素を持つリストを返しています。 キャンセルとOKを使用してテストできますrdata ["ボタン"] -1または1になります。 ダイアログに[キャンセル]ボタンを配置しなかったので、おそらく気にしないでしょう。
もっと見る...タイトルとテキストを入力するだけでなく、アイコンも必要です。 このような簡単なプロジェクト用の組み込みアイコンのアドインが好きです。 必要に応じて、カスタムビットマップを作成することもできます。
@Justin_Chilton組み込みのJMPアイコン
「エラー」アイコンがMacに存在しない可能性があります。または異なるサイズの警告アイコン
警告!
ゴミ
昔、JMPはウィンドウの内容(表示ボックス)をと呼ばれる内部構造に入れていました。ゴミOSにウィンドウを閉じるように要求する前に。ゴミ多くの問題を解決するために時間とともに進化し、時には意図しない副作用を引き起こしました。 副作用の1つは、モーダルダイアログの表示ボックスをJSLで使用できるようにすることでした。短いダイアログが閉じられてからしばらく経ちましたが、これが一部のユーザーがモーダルダイアログから回答を取得する方法でした...文字通りゴミ箱からそれらを取り出しました。
- パイロット:(にんにくクラムナプキンをゴミ箱に捨てる)「うーん、いいね」
- 副操縦士:(しわの寄った鼻)「私は今それを空にするだろうと思います。 または多分少しで。」
の問題ゴミそれがどれだけ満たされるか、そしていつそれを空にするかを中心に展開します。 JMPの初期のバージョンでは、次のウィンドウが表示されたとき、またはいくつかのバリエーションでゴミ箱が空になりました。 ゴミ箱が空になると、その内容はなくなり、モーダルダイアログボックスの変数も消えます。 ほとんどの場合、それはほとんど機能しましたが、さまざまな問題を解決しようとして進化し続けました。 最終的@hecht_jmpゴミ箱の問題を解決する最先端のソリューションをJMPに入れます...しかし、モーダルダイアログから回答を取り戻すにはもう少し計画が必要でした。
正しい方法で答えを得る
より多くのデータを返したい場合は、 <<結果を返す:
rdata = New Window( "modal dialog test",
<<MODAL></MODAL>
入力する前に「名前を入力してください」と表示されました。
{answer = "Craige"、Button(1)}
あなたが使用することができますrdata ["answer"]後に新しい窓()変数のテキストボックスから値を取得するために戻ります答え。 (最初にキャンセルテストを実行します。)
リストは連想配列のようなものですか?
上記のすべての例はリストを返します。 リスト内の項目はすべて、単純な代入ステートメントまたはある種の関数呼び出しのように見えます。 JMPの少し使用され、よく理解されていない機能は、より一般的な数値インデックスではなく、それらの名前を使用してリストに添え字を付けることです。
result = New Window( "Tell us about yourself",
<<MODAL></MODAL>
ボブはOKを押しようとしています
結果の値は次のようになります
{name = "Bob"、title = "programmer"、Button(1)}
または、ボブがキャンセルした場合、
{name = "Bob"、title = "programmer"、Button(-1)}
If( result["Button"] == 1,
Write( Eval Insert( "\!n\[^result["name"]^ is a ^result["title"]^]\" ) )
, // else
Write( "\!nthe dialog canceled." )
);
ボブはプログラマーです
リストNSシーケンシャルルックアップで実行されますが、連想配列のように動作します。 (連想配列が必要な場合は、作成してください。 このリストの動作を使用しないでください...これは不十分な代替手段です。)
モーダルダイアログのセマンティクス
ユーザーがモーダルダイアログのキャンセルボタンを押すと、何も変更されないことを期待します。 モーダルダイアログのJSLは、プログラムの残りの部分の変数を変更せずにダイアログを操作する必要があります。 これはより大きな例です。レポートを起動するためのモードレスダイアログがあります。
このウィンドウが開いている間は、他のウィンドウで作業できます。モードレスダイアログです。
[レポートの作成]ボタンを押すたびに、別のウィンドウが開きます。
モードレスランチャーからの値を示すレポート。
検証ルーチンを使用してモーダルダイアログを開く[パラメータの設定]ボタンもあります。 このキャンセルボタンは、上記のランチャーに変更を適用しません。
検証ルーチンは、さらに別のモーダルダイアログを開きます。
- パイロット:(目を細める)「これは複雑に見えます!」
- 副操縦士:「これは可能です。 コメントがあります!」
// here's a simple modal window. It provides a warning, but no data is returned.
alert = Function( {title, text, icon = "error"},
New Window( title, <<MODAL></MODAL>