names=default_event_sources
visibility=public
kind=defined

--- default_event_sources -> [WIN32OLE_TYPE]
型が持つソースインターフェイスを取得します。

default_event_sourcesメソッドは、selfがCoClass（コンポーネントクラス）
の場合、そのクラスがサポートするデフォルトのソースインターフェイス（イ
ベントの通知元となるインターフェイス）を返します。

@return デフォルトのソースインターフェイスを[[c:WIN32OLE_TYPE]]の配列と
        して返します。返すのは配列ですが、デフォルトのソースインターフェ
        イスは最大でも1インターフェイスです。ソースインターフェイスを持
        たない場合は空配列を返します。

   tobj = WIN32OLE_TYPE.new('Microsoft Excel 14.0 Object Library', 'Worksheet')
   tobj.default_event_sources.map {|intf| intf.name} #=> ["DocEvents"]

[[m:WIN32OLE_EVENT.new]]でインターフェイス名を指定しない場合は、ここで
返されたインターフェイスが選択されます。

次のサンプルは、IEのnaviaget2メソッドによってどのようなイベントが通知さ
れるかを、実際にメソッド呼び出し（=イベント通知）をトレースして調べるプ
ログラムです。イベントを受け付けるために、
[[m:WIN32OLE_EVENT.message_loop]]の呼び出しが必要な点に注意してください。
ここでは最終イベントのStatusTextChangeイベントのメッセージについては既
知としています。

 # coding : cp932
 require 'win32ole'
 
 type = WIN32OLE_TYPE.new('Microsoft Internet Controls', 'InternetExplorer')
 ctl = WIN32OLE.new(type.progid)
 source = type.default_event_sources[0]
 class WebEvent
   def initialize
     @completed = false
   end
   attr_reader :completed
 end
 source.ole_methods.each do |m|
   WebEvent.module_eval do
     define_method("on#{m.name}") do |*arg|
       if arg[0] == "ページが表示されました"
         @completed = true
       end
       puts "#{Time.now}: #{m.name} was called"
       p arg
     end
   end
 end
 evt = WIN32OLE_EVENT.new(ctl)
 evt.handler = WebEvent.new
 ctl.navigate2 'http://www.ruby-lang.org/'
 loop do
   break if evt.handler.completed
   WIN32OLE_EVENT.message_loop
 end
 ctl.Quit

このプログラムを実行するとWindows7のIE8環境では以下のような出力を得られ
ます。

 2010-10-06 22:33:54 +0900: PropertyChange was called
 ["{265b75c1-4158-11d0-90f6-00c04fd497ea}"]
 2010-10-06 22:33:54 +0900: BeforeNavigate2 was called
 [#<WIN32OLE:0x9d08f0>, "http://www.ruby-lang.org/", 0, "", nil, "", false]
 2010-10-06 22:33:54 +0900: DownloadBegin was called
 []
 2010-10-06 22:33:54 +0900: PropertyChange was called
 ["{D0FCA420-D3F5-11CF-B211-00AA004AE837}"]
 2010-10-06 22:33:54 +0900: CommandStateChange was called
 [2, false]
 2010-10-06 22:33:54 +0900: CommandStateChange was called
 [1, false]
 2010-10-06 22:33:54 +0900: StatusTextChange was called
 ["www.ruby-lang.org を検索しています"]
 2010-10-06 22:33:54 +0900: ProgressChange was called
 [100, 10000]
 2010-10-06 22:33:54 +0900: StatusTextChange was called
 ["サイト 221.186.184.68 に接続しています"]
 2010-10-06 22:33:54 +0900: StatusTextChange was called
 ["Web サイトが見つかりました。応答を待っています..."]
 ……
 2010-10-06 22:33:54 +0900: TitleChange was called
 ["オブジェクト指向スクリプト言語 Ruby"]
 2010-10-06 22:33:54 +0900: StatusTextChange was called
 ["待機中: http://www.ruby-lang.org/ja/ ..."]
 2010-10-06 22:33:54 +0900: ProgressChange was called
 [10000, 10000]
 2010-10-06 22:33:54 +0900: ProgressChange was called
 [-1, 10000]
 2010-10-06 22:33:54 +0900: DownloadComplete was called
 []
 2010-10-06 22:33:54 +0900: ProgressChange was called
 [10000, 10000]
 2010-10-06 22:33:54 +0900: DocumentComplete was called
 [#<WIN32OLE:0x438a2f8>, "http://www.ruby-lang.org/ja/"]
 2010-10-06 22:33:54 +0900: StatusTextChange was called
 ["ページが表示されました"]

@see [[m:WIN32OLE_TYPE.new]], [[m:WIN32OLE_TYPE#progid]],
     [[m:WIN32OLE_TYPE#ole_methods]], [[m:WIN32OLE_METHOD#name]],
     [[m:WIN32OLE_EVENT.new]], [[m:WIN32OLE_EVENT#handler=]],
     [[m:WIN32OLE_EVENT.message_loop]]

