
ウインドウを扱う
ダイアログボックスを表示する
コントロールを扱う
エディットボックスコントロールを扱う
1ウインドウを扱う
1.1ウインドウをプログラム上で作成する
ウインドウをプログラム上で作成するには「wnd@makeWnd(親ウインドウ, ウインドウスタイル, 幅, 高さ, タイトル)」とします(図1-1)。
- var wndMain: wnd@Wnd
-
- func main()
- do @wndMain :: wnd@makeWnd(null, %normal, 800, 450, "Title")
-
- while(wnd@act())
- end while
- end func
第2引数のウインドウスタイルには、「%normal」を指定するとサイズ変更や最大化や最小化ができる一般的なウインドウになります。 「%fix」はサイズ変更も最大化も最小化もできない固定ウインドウになります。 「%aspect」はアスペクト比を維持するウインドウで、ゲームを制作するときに使います。
6行目の「wnd@act」関数は、ウインドウを移動させる処理など、ウインドウに関わる様々な処理を行うため定期的に呼び出す必要があります。 呼び出さない間はウインドウが「応答なし」になります。 ウインドウが閉じられるとfalseが返るため、直ちにプログラムを終了します。
実行すると図1-2のようになります。

1.2ウインドウを視覚的に配置して作成する
(この記事は執筆中です!)
2ダイアログボックスを表示する
2.1メッセージボックスを表示する
メッセージボックスとは図2-1のような、メッセージを表示してユーザに確認を求めることができるダイアログボックスです。

メッセージボックスを表示するには、「wnd@msgBox(親ウインドウ, メッセージ, タイトル, アイコン, ボタン)」とします(図2-2)。
- func main()
- var result: wnd@MsgBoxResult :: wnd@msgBox(null, "プログラムを終了しますか?", "確認", %warn, %yesNoCancel)
- end func
第4引数のアイコンは、「%none」でアイコンなし、「%info」で情報を表す「i」アイコン、「%question」で質問を表す「?」アイコン、「%warn」で警告を表す「!」アイコン、「%err」でエラーを表す「×」アイコンです。
第5引数のボタンは、「%ok」で「[OK]」、「%okCancel」で「[OK][キャンセル]」、「%yesNo」で「[はい][いいえ]」、「%yesNoCancel」で「[はい][いいえ][キャンセル]」などがあります。
ユーザが押したボタンは戻り値として取得でき、「%ok」なら「[OK]」、「%cancel」なら「[キャンセル]」または右上の「×」ボタン、「%yes」なら「[はい]」、「%no」なら「[いいえ]」ボタンが選ばれたことを表します。
2.2インプットボックスを表示する
インプットボックスとは図2-3のような、ユーザに文字列を入力させるダイアログボックスです。

インプットボックスを表示するには、「wndex@inputBox(親ウインドウ, メッセージ, タイトル, 初期値, 検証関数)」とします(図2-4)。
- func main()
- var result: []char :: wndex@inputBox(null, "あなたの名前を入力してください。", "確認", "Kuina", null)
- end func
ユーザが入力した文字列が戻り値で返ります。 キャンセルボタンまたは右上の「×」ボタンが押された場合にはnullが返ります。
第5引数にコールバック関数を指定すると、入力が一定の形式に沿うまで確定できないようにできます(図2-5)。
- func main()
- var result: []char :: wndex@inputBox(null, "1桁の整数を入力してください。", "確認", null, validate)
-
- func validate(value: []char): bool
- var success: bool
- var intValue: int :: value.toInt(&success)
- if(!success)
- ret false {整数に変換できないなら確定させない}
- end if
- if(intValue < 0 | 9 < intValue)
- ret false {0以上9以下の範囲外なら確定させない}
- end if
- ret true {確定させる}
- end func
- end func
2.3ファイルを開くダイアログを表示する
ファイルを開くダイアログとは図2-6のような、ユーザに開くファイルを指定させるダイアログボックスです。

ファイルを開くダイアログを表示するには、「wnd@openFileDialog(親ウインドウ, フィルター, 最初に選択されるフィルターの番号)」とします(図2-7)。
- func main()
- var path: []char :: wnd@openFileDialog(null, ["画像ファイル(*.png,*.jpg)", "*.png;*.jpg", "すべてのファイル", "*.*"], 0)
- end func
フィルターは、指定した拡張子のファイルのみを一覧させることができ、「[表示テキスト0,拡張子0,表示テキスト1,拡張子1,表示テキスト2,拡張子2,...]」と2つ1組で並べます。 拡張子は「;」で区切って、「"*.拡張子;*.拡張子;*.拡張子;..."」の形で複数指定できます。
選択されたファイルのフルパスが返ります。 キャンセルされた場合にはnullが返ります。
最初に表示されるディレクトリを設定するには、事前に「wnd@fileDialogDir(ディレクトリパス)」を呼び出しておきます。 デフォルトでは「wnd@fileDialogDir(null)」が設定されていて、最初に表示されるディレクトリはOSに任せられます。
2.4名前を付けて保存ダイアログを表示する
名前を付けて保存ダイアログとは図2-8のような、ユーザに保存するファイルを指定させるダイアログボックスです。

名前を付けて保存ダイアログを表示するには、「wnd@saveFileDialog(親ウインドウ, フィルター, 最初に選択されるフィルターの番号, 拡張子が省略されたときに自動で付ける拡張子)」とします(図2-9)。
- func main()
- var path: []char :: wnd@saveFileDialog(null, ["画像ファイル(*.png,*.jpg)", "*.png;*.jpg", "すべてのファイル", "*.*"], 0, "png")
- end func
フィルターおよび戻り値は、wnd@openFileDialogと同様です。
3コントロールを扱う
ここでは、最も単純なコントロールであるプッシュボタンを例に、各コントロールで共通する扱い方を示します。
3.1コントロールを作成する
プッシュボタンコントロールを作成するには「wnd@makeBtn(親ウインドウ, 左端座標, 上端座標, 幅, 高さ, 横方向のアンカー, 縦方向のアンカー, プッシュボタン表面に表示するテキスト)」とします(図3-1)。
- var wndMain: wnd@Wnd
- var btnHello: wnd@Btn
-
- func main()
- do @wndMain :: wnd@makeWnd(null, %normal, 800, 450, "Title")
- do @btnHello :: wnd@makeBtn(@wndMain, 12, 12, 185, 23, %fix, %fix, "Push Me")
- do @btnHello.onPush :: btnHelloOnPush
-
- while(wnd@act())
- end while
-
- func btnHelloOnPush(wnd: wnd@WndBase)
- do wnd@msgBox(@wndMain, "Hello!", "Message", %none, %ok)
- end func
- end func
7行目のように「.onPush」に関数を代入しておくと、プッシュボタンが押されるたびにその関数が呼ばれます。 関数は「func 関数名(wnd: wnd@Btn)」の形で定義します。
実行してプッシュボタンを押すと、図3-2のようになります。

wnd@makeBtn関数の引数にある「アンカー」とは、親ウインドウのサイズが変わったときの振る舞いのことです。 「%fix」はサイズを常に固定し、「%move」は親ウインドウの拡縮に伴って移動し、「%scale」は親ウインドウに合わせて拡縮します(図3-3)。

このアンカーはプッシュボタンコントロールに限らず、すべてのコントロールで同様です。
3.2コントロールを無効化や非表示にする
コントロールが操作できる状態かどうかを設定するには、「.setEnabled(操作できるならtrue、できないならfalse)」とします。 例えばプッシュボタンコントロールを「.setEnabled(false)」にすると、灰色の表示になってユーザはボタンが押せなくなります(図3-4)。
- var wndMain: wnd@Wnd
- var btnHello: wnd@Btn
-
- func main()
- do @wndMain :: wnd@makeWnd(null, %normal, 800, 450, "Title")
- do @btnHello :: wnd@makeBtn(@wndMain, 12, 12, 185, 23, %fix, %fix, "Push Me")
- do @btnHello.setEnabled(false) {無効化}
- var enabled: bool :: @btnHello.getEnabled() {false}
- do @btnHello.setVisible(false) {非表示}
- var visible: bool :: @btnHello.getVisible() {false}
-
- while(wnd@act())
- end while
- end func
8行目のように、「.getEnabled()」で操作できる状態かどうかを取得できます。
また同様に、表示するかどうかを設定するには9行目のように「.setVisible(表示するならtrue、しないならfalse」とします。 10行目のように「.getVisible()」で表示されているかどうかを取得できます。
これらのメソッドはすべてのコントロールと、ウインドウにも設定できます。 コントロールやウインドウに「.setEnabled(false)」や「.setVisible(false)」をすると、その子コントロールや子ウインドウがすべて操作できなくなったり非表示になったりします。
4エディットボックスコントロールを扱う
(この記事は執筆中です!)