vrubyを使ったシンプルなダイアログライブラリ

Simple Dialogとは

VisualuRuby

 VisualuRuby(以下vruby)とは、Ruby+Windows環境で使えるGUIライブラリです。Win32APIを直接扱ったライブラリのため、特殊なウィジェットやツールキットを必要としません。ActiveScriptRubyなんかでRubyをインストールした場合は最初から入ってると思います。


Simple Dialog

・ダウンロード: simple_dialog.zip

 Simple Dialogは、vrubyで扱えるWindowsのダイアログ+αをラップしたライブラリです。(ライブラリと呼べる程大層なものではないかもしれません。)メッセージボックス/ファイル・フォルダ・etc選択ダイアログ/勝手に定義したダイアログを手軽に扱えるようにしただけのもので、拡張性もありません。Jw_cad外部変形のような、Rubyと何かアプリケーションを連携させた際の簡単なインターフェイスに使えると思い作成しました。
 vrubyに合わせてShift_jisに対応させています。

リファレンス

 ダイアログを出して戻り値を得るメソッド群をモジュールで固めたライブラリで、全てmodule_functionとして定義してあります。

require "simple_dialog"
puts SimpleDialog.msgbox("OKボタンのみのメッセージボックス")
#=> :ok

 include SimpleDialogとすると、それ以下はレシーバなしでメソッドを呼べます。

require "simple_dialog"
include SimpleDialog

puts msgbox("[はい]、[いいえ]を選択するメッセージボックス", "title", :yesno)
#=> :yes

puts select_file
#=> C:\jww\Sample.jwf

メソッド一覧

msgbox(text, title = "", type = :ok, icon = nil)

msgbox

 メッセージボックスを表示させ、選択されたボタン毎にマッピングされたシンボルを返します。message_boxのエイリアスです。

text (引数1)

 メッセージ欄に表示させる文字列です。

title (引数2)

 メッセージボックスのタイトルバーに表示させる文字列です。

type (引数3)

 メッセージボックスのタイプを表すシンボルを指定します。以下の括弧はWindowsAPIで扱う定数です。

  • :ok (MB_OK)
    • デフォルト値です。OKボタンのみ表示されます。
  • :okcancel (MB_OKCANCEL)
    • OKボタン、キャンセルボタンが表示されます。
  • :abortretryignore (MB_ABORTRETRYIGNORE)
    • 中止・再試行・無視ボタンが表示されます
  • :yesnocancel (MB_YESNOCANCEL)
    • はい・いいえ・キャンセルボタンが表示されます。
  • :yesno (MB_YESNO)
    • はい・いいえボタンが表示されます。
  • :retrycancel (MB_RETRYCANCEL)
    • 再試行・キャンセルボタンが表示されます。
  • :canceltrycontinue (MB_CANCELTRYCONTINUE)
    • キャンセル・再実行・続行ボタンが表示されます。
icon (引数4)

 アイコンを表示させたい場合に、各アイコンを表すシンボルを指定します。

  • :stop, :error, :hand (MB_ICONSTOP)
    • 停止アイコン(×マーク)を表示させます。
  • :question (MB_ICONQUESTION)
    • 疑問符アイコン(?マーク)を表示させます。
  • :exclamation, :warning (MB_ICONEXCLAMATION)
    • 感嘆符アイコン(!マーク)を表示させます。
  • :information, :asterisk (MB_ICONINFORMATION)
    • 吹き出しに「i」のアイコンを表示させます。
戻り値

 ボタンごとにシンボルを割り当てています。

  • :ok
  • :cancel
  • :abort
  • :retry
  • :ignore
  • :yes
  • :no
  • :tryagain
  • :continue

select_file(title = "ファイル選択", filter = [])

 ファイル選択ダイアログを開き、選択されたファイルのパスを返します。キャンセルされた場合はnilを返します。

filter

 フィルタの説明とフィルタパターンの組(配列)の配列を渡します。説明は単なる文字列、フィルタパターンはワイルドカードと拡張子からなる文字列を指定します。
例:[["ビットマップファイル(*.bmp)", "*.bmp"], ["テキストファイル(*.txt)", "*.txt"]]

save_file(title = "ファイルに保存する", filter = [])

 select_fileと同様に使えます。

select_directory(title = "ディレクトリ選択", initdir = nil)

 ディレクトリ選択ダイアログを表示し、選択されたディレクトリのパスを返します。initdirでルートディレクトリを指定できます。

select_color

 パレットを表示し、選択した色を表す数値を返します。

select_rgb

 select_colorを実行し、結果をRGBの配列にして返します。

select_font

 フォント選択ダイアログを表示し、フォントを表す配列を返します。

input_box(title, text, width = 300)

input_box

 文字列の入力欄があるダイアログを表示します。OKなら入力した文字列、CANCELならfalseを返します。タイトルと説明文の他に、横幅を指定できます。

check_list(title, text, list, width = 300)

check_list

 listに文字列の配列を渡し、その分だけチェックボックスを配置したダイアログを表示します。OKならチェックされた項目のインデックスの配列を返し、CANCELならfalseを返します。

require "simple_dialog"
include SimpleDialog

list = ["項目1: foo", "項目2: bar", "項目3: baz"]
a = check_list("test", "チェックリストダイアログのテスト", list)
#=> [0, 2]

puts list.values_at(*a) if a
#=> 項目1: foo
#=> 項目3: baz

radio_btns(title, text, list, width = 300)

check_list

 check_listと同様の操作で、ラジオボタンを並べたダイアログを表示します。OKなら選択された項目のインデックス、CANCELならfalseを返します。

combo_boxes(title, text, list, width = 300)

check_list

 コンボボックスを複数並べたダイアログを表示します。listには「文字列の配列」の配列を渡します。OKならそれぞれのコンボボックスの選択された項目のインデックスを配列にしたもの、CANCELならfalseを返します。

require "simple_dialog"
include SimpleDialog

list = [
  ["項目1-1", "項目1-2", "項目1-3"],
  ["項目2-1", "項目2-2", "項目2-3"]
]
a = combo_boxes("test", "コンボボックスのテスト", list)
#=> [1, 2]

a.each_with_index{|n, i|
  puts list[i][n]
} if a
#=> 項目1-2
#=> 項目2-3

set_dialog_parent(parent)

 他のvrubyアプリケーションと合わせて使う場合、このメソッドにフォームのインスタンスを渡すことで、Simple Dialogで表示するダイアログの親ウインドウを設定できます。設定した場合、それ以降のダイアログが全てそのフォームを親とすることに注意してください。親ウインドウを無くして初期設定にするにはset_dialog_parent(nil)とします。