テクセル
Rubyダイアログライブラリ(Windows用)

RubyよりWindowsの共通ダイアログを呼び出すライブラリ(windlg.rb)です。メッセージボックス、インプットボックス、 ファイル開、ファイル名を付けて保存ダイアログが使用出来ます。動作確認は、 ruby 2.6.3p62 RubyInstaller x86で行っています。
windlg.rbのダウンロード(windlg_V104.7z)

WinDlgtクラス ダイアログ用クラスです。

■ アクセサ

iFileNameFsize
ファイル開、名前をつけて保存ダイアログにおけるフルパスファイル名の取得バッファエリアのサイズです。初期値:512(バイト)
iFileNamesize
ファイル開、名前をつけて保存ダイアログにおけるファイル名の取得バッファエリアのサイズです。初期値:64(バイト)

■ クラスメソッド

msgbox(sMsg, sTitle, iBtnIcon)
メッセージボックスを表示します。
sMsg
メッセージボックスに表示される文字列を指定します。
sTitle
メッセージボックスのタイトルバーに表示される文字列を指定します。
iBtnIcon
メッセージボックスのタイプを以下の定数のORで指定します。
・ボタンフラグ
定数 内容
MB_OK 「OK」ボタンを表示します。
MB_OKCANCEL 「OK」、「キャンセル」ボタンを表示します。
MB_ABORTRETRYIGNORE 「中止」、「再試行」、「無視」ボタンを表示します。
MB_YESNOCANCEL 「はい」、「いいえ」、「キャンセル」ボタンを表示します。
MB_YESNO 「はい」、「いいえ」ボタンを表示します。
MB_RETRYCANCEL 「再試行」、「キャンセル」ボタンを表示します。
MB_CANCELTRYCONTINUE 「キャンセル」、「再実行」、「続行」ボタンを表示します。
・アイコンフラグ
定数 内容
MB_ICONSTOP、MB_ICONERROR、MB_ICONHAND 停止アイコンを表示します。
MB_ICONQUESTION 疑問符(?)アイコンを表示します。
MB_ICONWARNING、MB_ICONEXCLAMATION 感嘆符(!)アイコンを表示します。
MB_ICONINFORMATION、MB_ICONASTERISK 丸の中に小文字の「i」が描かれたアイコンを表示します。
・デフォルトボタンの指定フラグ
定数 内容
MB_DEFBUTTON1 最初のボタンをデフォルトのボタンとします。MB_DEFBUTTON2、MB_DEFBUTTON3、MB_DEFBUTTON4 の いずれかが指定されていない限り、MB_DEFBUTTON1 がデフォルトとなります。
MB_DEFBUTTON2 2番目のボタンをデフォルトのボタンとします。
MB_DEFBUTTON3 3番目のボタンをデフォルトのボタンとします。
MB_DEFBUTTON4 4番目のボタンをデフォルトのボタンとします。
戻り値
関数が成功すると、次の値のいずれかが返ります。失敗の場合は、0が返ります。
定数 内容
IDOK 「OK]ボタンが押されました。
IDCANCEL 「キャンセル」ボタンが押されました。
IDABORT 「中止」ボタンが押されました。
IDRETRY 「再試行」ボタンが押されました。
IDIGNORE 「無視」ボタンが押されました。
IDYES 「はい」ボタンが押されました。
IDNO 「いいえ」ボタンが押されました。
IDTRYAGAIN 「再実行」ボタンが押されました。
IDCONTINUE 「続行」ボタンが押されました。
inputBox(sMsg, sTitle)
インプットボックスを表示し、ユーザが文字列を入力できるようにします。(テキストボックスを表示)
sMsg
インプットボックスに表示される文字列を指定します。
sTitle
インプットボックスのタイトルバーに表示される文字列を指定します。
戻り値
テキストボックスの内容。キャンセルボタンが押された場合は、nilが返ります。
getOpenFileName(ofn)
「ファイルを開く」ダイアログを表示します。
ofn
ダイアログ初期化用の構造体を指定します。構造体の型は、OPENFILENAME
ofn = OPENFILENAME.new
・構造体のメンバ、内容
メンバ名 内容
sTitle文字 ダイアログのタイトルバーに表示される文字列を指定します。
sArFilter文字型の2次元配列 選択対象のファイルをフィルタリングするための文字列を指定します。 表示される文字列とフィルタ文字列をペアで指定します。
例 [[ "テキスト(*.txt)", "*.txt"], ["すべて(*.*)", "*.*"] ]
iFilterIndx整数 sArFilterで指定したフィルタで最初に表示されるフィルタを指定します。0~
sIniDir文字 初期フォルダを指定します。
iFlags整数 ダイアログ初期化用のフラグを指定します。下記表のORで指定します。
sFnameFull文字 選択されたファイル名がフルパスでセットされます。
sFname文字 選択されたファイル名がセットされます。
・iFlagsの一覧
フラグ名 内容
OFN_OVERWRITEPROMPT 保存時に選択されたファイルが存在する場合、上書き確認を行います。
OFN_FILEMUSTEXIST 存在するファイルしか選択出来ないようにします。(ファイル開では、デフォルト)
OFN_PATHMUSTEXIST 有効なパスとディレクトリしか入力できないようにします。
戻り値
ユーザがファイルを選択し、「OK]ボタンを押した場合は0以外の値が返り、構造体のsFnameFull、sFnameにファイル名がセットされます。 ユーザがキャンセルを選択したりダイアログを閉じた場合は、0が返ります。
getSaveFileName(ofn)
「ファイル名を付けて保存」ダイアログを表示します。
ofn
ダイアログ初期化用の構造体を指定します。
ofn = OPENFILENAME.new
構造体のメンバ、内容に関しては、getOpenFileNameを参照して下さい。
戻り値
ユーザがファイルを選択し、「OK]ボタンを押した場合は0以外の値が返り、構造体のsFnameFull、sFnameにファイル名がセットされます。 ユーザがキャンセルを選択したりダイアログを閉じた場合は、0が返ります。

インスタンスの作成

WinDlg = WinDlgt.new(__ENCODING__)

引数に文字のエンコーディング「__ENCODING__」を指定します。 シフトJIS(magic  comment:「Windows-31j」,「shift_jis」)とUTF-8が有効です。

使用例


# -*- coding: utf-8 -*-
require './windlg'

WinDlg = WinDlgt.new(__ENCODING__)

ir = WinDlg.msgbox("使用例の実行を行いますか?", "使用例の開始", WinDlgt::MB_YESNO | WinDlgt::MB_ICONQUESTION)
if ir == WinDlgt::IDNO
   exit
end

sr = WinDlg.inputBox("文字を入力して下さい。","inputboxの例")
if sr == nil
   print "キャンセルボタンが押されました¥r¥n"
else
   print "入力された文字は、「" + sr + "」です。¥r¥n"
end

ofnd = OPENFILENAME.new
ofnd.sTitle = "ファイルを開く"
ofnd.sArFilter = [[ "テキスト(*.txt)", "*.txt"], ["すべて(*.*)", "*.*"] ]
ofnd.iFilterIndx = 0
ofnd.sIniDir = "c:¥¥"
ir = WinDlg.getOpenFileName(ofnd)
if ir != 0
   print ofnd.sFnameFull + "¥r¥n"
   print ofnd.sFname + "¥r¥n"
end

ofnd.sTitle = "ファイルを保存"
ofnd.sArFilter = [[ "テキスト(*.txt)", "*.txt"], ["すべて(*.*)", "*.*"] ]
ofnd.iFilterIndx = 0
ofnd.sIniDir = "c:¥¥"
ofnd.iFlags = WinDlgt::OFN_OVERWRITEPROMPT
ir = WinDlg.getSaveFileName(ofnd)
if ir != 0
   print ofnd.sFnameFull + "¥r¥n"
   print ofnd.sFname + "¥r¥n"
end

履歴

2019.06 Ver.1.04 定数をクラス内に移動
2013.07 Ver.1.03 OPENFILENAME構造体の初期値をセット
2013.05 Ver.1.02 「getOpenFileName」、「getSaveFileName」の不具合修正。ruby2.0対応
2012.06 Ver.1.01 「inputBox」の文字コードutf-8でキャンセルボタンが押された場合の不具合修正
2012.04 Ver.1.00
Rubyユーティリティ
©2012-2019 TEXCELL CORPORATION