Object Browser

VisualuRuby
win32ole
rubyscript2exe
の勉強がてら Object Browser を作ってみた。


るびまを見ると python をインストールすればついて来ると書いてあったので
実際に入れて動かしてみたけどよく分からないので(^^;
るびまのソースと visual Ruby に付いてくるサンプルを参考に自分で作ってみた。


ただ、パラメータの名称とかしか分からないので
メソッドの説明文を取得できるとかなり嬉しいんだけど・・・・
できるんだろうか・・・。


object-browser.rb

require 'vr/vrcontrol'
require 'vr/vrcomctl'
require 'vr/vrtooltip'
require 'win32ole'

# version情報
VER = 0.1

class MyForm < VRForm
  include VRMenuUseable
  include VRStatusbarDockable


  def setprogids
    ids = WIN32OLE_TYPE.progids
    ids.sort!{|a,b| b <=> a}
   
    for id in ids
      @progids_view.insertItem(0,[id])
    end
  end

  def construct
    move 10,40,600,480

    self.caption="Object Browser - ver.#{VER}"

    addControl(VRListview ,"progids_view","progids_view" ,0  ,0  ,250,450  ,WStyle::WS_BORDER)
    addControl(VRListview ,"methods_view","methods_view" ,250,0  ,330,200,WStyle::WS_VSCROLL)
    addControl(VRListview ,"params_view" ,"params_view"  ,250,210,340,240,WStyle::WS_VSCROLL)

    @progids_view.insertColumn(0,"progids",230)
    @methods_view.insertColumn(0,"methods",310)
    @params_view.insertColumn(0,"inout"   ,40)
    @params_view.insertColumn(1,"name"    ,100)
    @params_view.insertColumn(2,"default" ,100)
    @params_view.insertColumn(3,"type"    ,95)
    setprogids
  end

  def progids_view_itemchanged(index,state)
    if state == 0
      begin
        @methods_view.clearItems
        @params_view.clearItems

        progid = @progids_view.getItemTextOf(index)
        app = WIN32OLE.new(progid)
        methods = app.ole_methods
        methods.sort!{|a,b| b.to_s <=> a.to_s}
        for method in methods
          @methods_view.insertItem(0 , [method])
        end
      rescue => e
        puts e
        @methods_view.clearItems
        @methods_view.insertItem(0 , [e.message]) 
        @methods_view.insertItem(0 , ["error!!"])
      end
    end 
  end

  def methods_view_itemchanged(index , state)
    if state == 0
      begin 
        @params_view.clearItems
        @progids_view.eachSelectedItems {|progids_index|
          progid = @progids_view.getItemTextOf(progids_index)
          method = @methods_view.getItemTextOf(index)
          puts "progid=#{progid} metho=#{method}"
          app = WIN32OLE.new(progid)
          app.ole_method(method).params.reverse.each{|param|
            info = Array.new
            info.push("in")       if param.input?
            info.push("out")      if param.output?
            info.push("optional") if param.optional?
            info.push("retval")   if param.retval?
            info.push(param.name)
            info.push(param.default)
            info.push(param.ole_type)

            @params_view.insertItem(0, info);
          }
        }
      rescue => e
        puts e
        @params_view.clearItems
        @params_view.insertItem(0, [e.message]);
        @params_view.insertItem(0, ["error!!"]);
      end
    end
  end
end

VRLocalScreen.showForm(MyForm)
VRLocalScreen.messageloop

これを rubyscript2exe で exe ファイルに変換

> ruby rubyscript2exe.rb object-browser.rb --rubyscript2exe-rubyw

(*) --rubyscript2exe-rubyw はDOSプロンプト画面を出さないためのおまじない


ここに exe 化したファイルを置いておきます。
http://www3.pf-x.net/~spider-man/cgi-bin/hiki/hiki.cgi?Object+Browser