Class: WIN32OLE_EVENT
Relationships & Source Files | |
Inherits: | Object |
Defined in: | ext/win32ole/win32ole_event.c, ext/win32ole/win32ole_event.c |
Overview
WIN32OLE_EVENT
objects controls OLE event.
Class Method Summary
-
.message_loop
Translates and dispatches Windows message.
-
.new(ole, event) # = > WIN32OLE_EVENT object.))
constructor
Returns OLE event object.
Instance Attribute Summary
Instance Method Summary
-
#off_event([event])
removes the callback of event.
-
#on_event([event])
Defines the callback event.
-
#on_event_with_outargs([event])
Defines the callback of event.
-
#unadvise ⇒ nil
disconnects OLE server.
Constructor Details
.new(ole, event) # = > WIN32OLE_EVENT object.))
Returns OLE event object. The first argument specifies ::WIN32OLE
object. The second argument specifies OLE event name.
ie = WIN32OLE.new('InternetExplorer.Application')
ev = WIN32OLE_EVENT.new(ie, 'DWebBrowserEvents')
# File 'ext/win32ole/win32ole_event.c', line 985
static VALUE fev_initialize(int argc, VALUE *argv, VALUE self) { ev_advise(argc, argv, self); evs_push(self); rb_ivar_set(self, id_events, rb_ary_new()); fev_set_handler(self, Qnil); return self; }
Class Method Details
.message_loop
Translates and dispatches Windows message.
# File 'ext/win32ole/win32ole_event.c', line 1011
static VALUE fev_s_msg_loop(VALUE klass) { ole_msg_loop(); return Qnil; }
Instance Attribute Details
#handler (rw)
returns handler object.
# File 'ext/win32ole/win32ole_event.c', line 1254
static VALUE fev_get_handler(VALUE self) { return rb_ivar_get(self, rb_intern("handler")); }
#handler= (rw)
sets event handler object. If handler object has onXXX method according to XXX event, then onXXX method is called when XXX event occurs.
If handler object has method_missing and there is no method according to the event, then method_missing called and 1-st argument is event name.
If handler object has onXXX method and there is block defined by #on_event(‘XXX’){}, then block is executed but handler object method is not called when XXX event occurs.
class Handler
def onStatusTextChange(text)
puts "StatusTextChanged"
end
def onPropertyChange(prop)
puts "PropertyChanged"
end
def method_missing(ev, *arg)
puts "other event #{ev}"
end
end
handler = Handler.new
ie = WIN32OLE.new('InternetExplorer.Application')
ev = WIN32OLE_EVENT.new(ie)
ev.on_event("StatusTextChange") {|*args|
puts "this block executed."
puts "handler.onStatusTextChange method is not called."
}
ev.handler = handler
# File 'ext/win32ole/win32ole_event.c', line 1241
static VALUE fev_set_handler(VALUE self, VALUE val) { return rb_ivar_set(self, rb_intern("handler"), val); }
Instance Method Details
#off_event([event])
# File 'ext/win32ole/win32ole_event.c', line 1123
static VALUE fev_off_event(int argc, VALUE *argv, VALUE self) { VALUE event = Qnil; VALUE events; rb_scan_args(argc, argv, "01", &event); if(!NIL_P(event)) { if(!RB_TYPE_P(event, T_STRING) && !RB_TYPE_P(event, T_SYMBOL)) { rb_raise(rb_eTypeError, "wrong argument type (expected String or Symbol)"); } if (RB_TYPE_P(event, T_SYMBOL)) { event = rb_sym2str(event); } } events = rb_ivar_get(self, id_events); if (NIL_P(events)) { return Qnil; } ole_delete_event(events, event); return Qnil; }
#on_event([event])
Defines the callback event. If argument is omitted, this method defines the callback of all events. If you want to modify reference argument in callback, return hash in callback. If you want to return value to OLE server as result of callback use ‘return’ or :return
.
ie = WIN32OLE.new('InternetExplorer.Application')
ev = WIN32OLE_EVENT.new(ie)
ev.on_event("NavigateComplete") {|url| puts url}
ev.on_event() {|ev, *args| puts "#{ev} fired"}
ev.on_event("BeforeNavigate2") {|*args|
#...
# set true to BeforeNavigate reference argument `Cancel'.
# Cancel is 7-th argument of BeforeNavigate,
# so you can use 6 as key of hash instead of 'Cancel'.
# The argument is counted from 0.
# The hash key of 0 means first argument.)
{:Cancel => true} # or {'Cancel' => true} or {6 => true}
}
ev.on_event(...) {|*args|
{:return => 1, :xxx => yyy}
}
# File 'ext/win32ole/win32ole_event.c', line 1082
static VALUE fev_on_event(int argc, VALUE *argv, VALUE self) { return ev_on_event(argc, argv, self, Qfalse); }
#on_event_with_outargs([event])
# File 'ext/win32ole/win32ole_event.c', line 1102
static VALUE fev_on_event_with_outargs(int argc, VALUE *argv, VALUE self) { return ev_on_event(argc, argv, self, Qtrue); }
#unadvise ⇒ nil
disconnects OLE server. If this method called, then the WIN32OLE_EVENT
object does not receive the OLE server event any more. This method is trial implementation.
ie = WIN32OLE.new('InternetExplorer.Application')
ev = WIN32OLE_EVENT.new(ie)
ev.on_event() {...}
#...
ev.unadvise
# File 'ext/win32ole/win32ole_event.c', line 1161
static VALUE fev_unadvise(VALUE self) { struct oleeventdata *poleev; TypedData_Get_Struct(self, struct oleeventdata, &oleevent_datatype, poleev); if (poleev->pConnectionPoint) { ole_msg_loop(); evs_delete(poleev->event_id); poleev->pConnectionPoint->lpVtbl->Unadvise(poleev->pConnectionPoint, poleev->dwCookie); OLE_RELEASE(poleev->pConnectionPoint); poleev->pConnectionPoint = NULL; } OLE_FREE(poleev->pDispatch); return Qnil; }