Object Browser ver0.2
VisualuRuby の勉強がてら Object Browserを作成。
ここに exe 化したファイルを置いておきます。
http://www3.pf-x.net/~spider-man/cgi-bin/hiki/hiki.cgi?Object+Browser
画面を貼ってみる。
変更点 ver0.1 -> ver0.2
・オブジェクトIDの検索機能を追加 大文字小文字無視の正規表現で検索可能 ・メソッドの戻り値の型表示を追加
object-browser.rb
require 'vr/vrcontrol' require 'vr/vrcomctl' require 'vr/vrtooltip' require 'win32ole' # version情報 VER = 0.2 class MyForm < VRForm include VRMenuUseable include VRStatusbarDockable def setprogids(condition=nil) @progids_view.clearItems ids = WIN32OLE_TYPE.progids ids.sort!{|a,b| b <=> a} for id in ids # 条件指定があった場合 if condition if id =~ /#{condition}/i @progids_view.insertItem(0,[id]) end else @progids_view.insertItem(0,[id]) end end end def construct move 10,40,600,480 self.caption="Object Browser - ver.#{VER}" addControl(VREdit ,"search_text" ,"" ,0 ,0,210,25,WStyle::WS_BORDER) addControl(VRButton ,"search_button" ,"検索" ,210,0,40,25,WStyle::WS_BORDER) addControl(VRListview ,"progids_view" ,"progids_view" ,0 ,25,250,425,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,"method",180) @methods_view.insertColumn(1,"return type",130) @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 , method.return_type]) end rescue => e puts e if $DEBUG @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} method=#{method}" if $DEBUG 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 if $DEBUG @params_view.clearItems @params_view.insertItem(0, [e.message]); @params_view.insertItem(0, ["error!!"]); end end end def search_button_clicked setprogids(@search_text.text) end def search_text_entered search_button_clicked end end VRLocalScreen.showForm(MyForm) VRLocalScreen.messageloop