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