■Windows版Rubyの細道・けもの道

■ナビゲータ

[南北館(最初のメニュー)]

  1. [Windows版Rubyの細道・けもの道]
    1. [1.準備編]
    2. [2.基本編]
    3. [3.応用編]
      1. [3-1.固定長データとCSVデータとの変換]
      2. [3-2.重複データの処理]
      3. [3-3.フォルダ内の一括処理]
      4. [3-4.1つのファイルを複数のファイルに分割する]
      5. [3-5.文字コードの変換]
      6. [3-6.半角全角変換]
      7. [3-7.多次元配列の処理]
      8. [3-9.その他]
        1. [3-9-1.文字列のフォーマットを変更する]
        2. [3-9-2.メッセージを表示する]
        3. [3-9-3.ファイルのサイズを取得する]
        4. [3-9-4.当日・前日・前営業日、前月末日・当月末日・翌月末日を取得する]
        5. [3-9-5.複数レコードを1レコードにまとめる]
        6. [3-9-6.電卓プログラム]
        7. [3-9-7.素因数分解]
    4. [スクリプトと入力データのサンプル]
Perlではどう処理する?
同じことをPerlではこうしています。

3.応用編

3-9.その他

3-9-2.メッセージを表示する

完成したrubyスクリプトを実行するには、rubyスクリプト(通常、xxxx.rbのように拡張子が「rb」で終わるファイル)をダブルクリックしますが、処理が終了しても何も変化がないため、いつ終了したのか、確認しにくい場合があります。また、処理結果によって、メッセージを変更して表示したい場合があります。

このような場合にWindowsの機能を利用してメッセージを表示する方法について解説します。

一般的には、以下のようなスクリプトになります。

        require 'Win32API'
   

を指定した後にメッセージボックスを表示するclassを定義します。実際にメッセージボックスを表示するには、以下のようなクラスをあらかじめ作成しておいた上で、

    class Win32API  
      def Win32API.MessageBox(wnd, text, caption, type = MB_OK) 
        messagebox = Win32API.new('user32', 'MessageBox', %w(p p p i), 'i')    
        messagebox.call(wnd, text, caption, type)   
      end   
    end 
   

メッセージボックスを表示する位置に以下のようなスクリプトを記述します。

    戻り値 = Win32API.MessageBox(0, "メッセージ", "キャプション", ボタンおよびアイコン)
   

ウィンドウに表示するボタンやアイコンには下記の表に示す数値の合計値をセットします。キャプション(メッセージを表示する画面のタイトル)やメッセージは「""」(ダブルクォーテーション)で囲んだ文字列を指定します。

たとえば、ボタンは[OK]ボタンと[キャンセル]ボタンを表示(数値 = 1)し、注意メッセージのアイコン(数値 = 48)を表示する場合は、1+48 = 49 をセットします。具体的には、

    w_res = Win32API.MessageBox(0, "メッセージ", "キャプション", 49)    
   

としてもいいのですが、何と何の合計かをわかりやすく表示するため、

    w_res = Win32API.MessageBox(0, "メッセージ", "キャプション", 1+48)    
   

とすることが望ましい方法です。

フラグ 内    容
0 [OK] ボタンのみを表示する。
1 [OK] ボタンと [キャンセル] ボタンを表示する。
2 [中止]、[再試行]、および [無視] の 3 つのボタンを表示する。
3 [はい]、[いいえ]、および [キャンセル] の 3 つのボタンを表示する。
4 [はい] ボタンと [いいえ] ボタンを表示する。
5 [再試行] ボタンと [キャンセル] ボタンを表示する。
16 警告メッセージ アイコン(赤い円の中に×印)を表示する。
32 問い合わせメッセージ アイコン(吹き出しの中に?マーク)を表示する。
48 注意メッセージ アイコン(黄色い三角の中に!マーク)を表示する。
64 情報メッセージ アイコン(吹き出しの中に「i」)を表示する。
0 第 1 ボタンを標準ボタンにする。
256 第 2 ボタンを標準ボタンにする。
512 第 3 ボタンを標準ボタンにする。
【メッセージのサンプル】

以下に警告メッセージや問い合わせメッセージの表示サンプルを載せます。

rubyでWindowsのメッセージボックスのメッセージやキャプションに漢字等を使用する場合は、Ruby1.8以前の場合、$KCODEを使用し、Ruby1.9以降の場合は、マジックコメントを使用して、スクリプト(プログラム)の文字コードを指定しておきます。$KCODEやマジックコメントについては、[2-1-5.スクリプトの中で漢字を使う]を参照してください。

【警告メッセージのサンプル】
        警告メッセージのサンプル
   
【問い合わせメッセージのサンプル】
        問い合わせメッセージのサンプル
   
【注意メッセージのサンプル】
        注意メッセージのサンプル
   
【情報メッセージのサンプル】
        情報メッセージのサンプル
   

メッセージを表示した後、どのボタンをクリックしたかは、戻り値(例では、w_res)に整数値がセットされますので、if文を使って判断します。どのような戻り値がセットされるかについては、下記の表を参照してください。

戻り値 クリックしたボタン
0 エラー(クリックした結果が戻り値に反映されなかった)
1 [OK] ボタン
2 [キャンセル] ボタン
3 [中止] ボタン
4 [再試行] ボタン
5 [無視] ボタン
6 [はい] ボタン
7 [いいえ] ボタン
【戻り値のサンプル】
        戻り値のサンプル
   
【サンプルスクリプト】
# coding:windows-31j    
# message.rb    
# 内容 : Windowsのメッセージを表示する。    
# Copyright (c) 2002-2015 Mitsuo Minagawa, All rights reserved. 
# (minagawa@fb3.so-net.ne.jp)   
# 使用方法 : c:\>ruby message.rb    
#   
require "Win32API"  

class Win32API  
    def Win32API.MessageBox(wnd, text, caption, type = MB_OK)   
        messagebox = Win32API.new('user32', 'MessageBox', %w(p p p i), 'i') 
        messagebox.call(wnd, text, caption, type)   
    end 
end 

#下記のようにして、Windowsのメッセージを表示する。  
#   
#$res   = Win32API.MessageBox(0, "表示するメッセージ。", "画面のキャプション", ボタンおよびアイコン);   
#   
#if     (w_res      =   1)  
#    ・・・・・ 
#end    

### 警告メッセージのサンプル   
w_res   = Win32API.MessageBox(0, "このファイルは実行してはいけません。", "警告メッセージのサンプル", 0 + 16)    

# OK ボタン 
if      (w_res      ==  1)  

        w_res   =   Win32API.MessageBox(0, "「OK」をクリックしました。", "メッセージのテスト", 0 + 64)  

end 

### 問い合わせメッセージのサンプル 
w_res   = Win32API.MessageBox(0, "これでよろしいですか?", "問い合わせメッセージのサンプル", 1 + 32)    

# OK ボタン 
if      (w_res      ==  1)  

        w_res   =   Win32API.MessageBox(0, "「OK」をクリックしました。", "メッセージのテスト", 0 + 64)  

# キャンセル ボタン 
elsif   (w_res      ==  2)  

        w_res   =   Win32API.MessageBox(0, "「キャンセル」をクリックしました。", "メッセージのテスト", 0 + 64)  

end 

### 注意メッセージのサンプル   
w_res   = Win32API.MessageBox(0, "このまま処理を続行しますか?", "注意メッセージのサンプル", 2 + 48)    

# 中止 ボタン   
if      (w_res      ==  3)  

        w_res   =   Win32API.MessageBox(0, "「中止」をクリックしました。", "メッセージのテスト", 0 + 64)    

# 再試行 ボタン 
elsif   (w_res      ==  4)  

        w_res   =   Win32API.MessageBox(0, "「再試行」をクリックしました。", "メッセージのテスト", 0 + 64)  

# 無視 ボタン   
elsif   (w_res      ==  5)  

        w_res   =   Win32API.MessageBox(0,"「無視」をクリックしました。","メッセージのテスト", 0 + 64)  

end 

### 情報メッセージのサンプル   
w_res   = Win32API.MessageBox(0,"内容が理解できましたか?","情報メッセージのサンプル", 4 + 64)  

# はい ボタン   
if      (w_res      ==  6)  

        w_res   =   Win32API.MessageBox(0,"「はい」をクリックしました。","メッセージのテスト", 0 + 64)  

# いいえ ボタン 
elsif   (w_res      ==  7)  

        w_res   =   Win32API.MessageBox(0,"「いいえ」をクリックしました。","メッセージのテスト", 0 + 64)    

end 
   


【スクリプトとデータのサンプル】

スクリプトはこちらにあります(shift_jis形式で保存してください)。




Copyright (c) 2004-2015 Mitsuo Minagawa, All rights reserved.