diff --git a/collects/html/main.ss b/collects/html/main.ss new file mode 100644 index 0000000000..8e716a8ae2 --- /dev/null +++ b/collects/html/main.ss @@ -0,0 +1,9 @@ +#lang scheme/base + +(require "html.ss") +(provide (except-out (all-from-out "html.ss") + link struct:link make-link link?) + (rename-out [link alink] + [struct:link struct:alink] + [make-link make-alink] + [link? alink?])) diff --git a/collects/mysterx/info.ss b/collects/mysterx/info.ss index 8534498745..f0de1b75d4 100644 --- a/collects/mysterx/info.ss +++ b/collects/mysterx/info.ss @@ -2,4 +2,4 @@ (define post-install-collection "installer.ss") -(define scribblings '(("mysterx.scrbl" (multi-page)))) +(define scribblings '(("scribblings/mysterx.scrbl" (multi-page)))) diff --git a/collects/mysterx/mysterx.ss b/collects/mysterx/mysterx.ss index 4403486daa..df4a06c7fc 100644 --- a/collects/mysterx/mysterx.ss +++ b/collects/mysterx/mysterx.ss @@ -24,6 +24,8 @@ (provide mx-browser% mx-element% + mx-document<%> + mx-event<%> mx-version block-while-browsers com-invoke @@ -2292,6 +2294,8 @@ (define y (lambda () (mxprims:event-y event))) (super-make-object))) + (define mx-event<%> (class->interface mx-event%)) + (define mx-browser% (class object% (init (label "MysterX") (width 'default) @@ -2590,6 +2594,8 @@ (super-make-object))) + (define mx-document<%> (class->interface mx-document%)) + (thread (lambda () (let loop () diff --git a/collects/mysterx/scribblings/browsers.scrbl b/collects/mysterx/scribblings/browsers.scrbl new file mode 100644 index 0000000000..4af476b755 --- /dev/null +++ b/collects/mysterx/scribblings/browsers.scrbl @@ -0,0 +1,126 @@ +#lang scribble/doc +@(require "common.ss") + +@title[#:tag "browsers"]{Browsers} + + A MysterX application consists of one or more browsers, which are + instances of the class @scheme[mx-browser%]. + +@defproc[(block-while-browsers) void?]{ + + Blocks until all browser windows have been closed or hidden, using + the show method of @scheme[mx-browser%]. This is useful when a + MysterX program file is run as a script, to prevent @exec{mzscheme} + or @exec{mred} from closing prematurely.} + +@defclass[mx-browser% object% ()]{ + +@defconstructor[([label string? "MysterX"] + [width (or/c exact-nonnegative-integer? (one-of/c 'default)) 'default] + [height (or/c exact-nonnegative-integer? (one-of/c 'default)) 'default] + [x (or/c exact-integer? (one-of/c 'default)) 'default] + [y (or/c exact-integer? (one-of/c 'default)) 'default] + [style (listof (any-of/c 'iconize 'maximize 'no-system-menu + 'no-thick-border 'scrollbars))])]{ + + Creates an instance of a MysterX browser. The @scheme[label] + argument is a string for the document caption, with default . The + @scheme[width], @scheme[height], @scheme[x], and @scheme[y] give the + size and placement of the browser window on the desktop, with + defaults provided by Windows. When @scheme[style-list] includes + @scheme['scrollbars], the vertical scrollbar is disabled if + scrolling is unnecessary, and the horizontal scrollbar disappears if + scrolling is unnecessary. + + Although the browser window cannot be hidden initially, it can be + iconized. The @method[mx-browser% restore] method can be used to + restore an iconized browser to an ordinary window.} + +@defmethod[(current-document) (is-a?/c mx-document<%>)]{ + + Returns the current document in the browser.} + +@defmethod[(print-document) void?]{ + + Prints the document displayed by the browser to the default + printer. As an unintentional side-effect, the browser + window is minimized.} + +@defmethod[(show [show? any/c]) void?]{ + + If @scheme[show?] is @scheme[#f], the browser window is hidden. + Otherwise, the window is shown.} + +@defmethod[(navigate [url string?]) string?]{ + + Navigates the browser to the URL given by @scheme[url]. + Any DHTML changes to the page associated with the URL + are not shown. Returns a string that is the actual URL + navigated to.} + +@defmethod[(navigate/status [url string?]) + (list/c string? (or/c false/c integer? (one-of/c 'no-status)))]{ + + Navigates the browser to the URL given by @scheme[url]. + Any DHTML changes to the page associated with the URL + are not shown. Returns a list, whose first element string that + is the actual URL navigated to, and whose second element is + a status code, one of: @scheme[#f], indicating no status could be + obtained; a number, such as @scheme[200] or @scheme[404], indicating the + http status; or @scheme['no-status], indicating that @scheme[url] does not + denote a URL with the ``http'' scheme.} + +@defmethod[(go-back) string?]{ + + Navigates the browser back to a URL within its history list. + Any DHTML changes to the page associated with the URL + are not shown. Returns a string that is the actual URL + navigated to.} + +@defmethod[(go-forward) string?]{ + + Navigates the browser forward to a URL within its history list. + Any DHTML changes to the page associated with the URL are + not shown. Returns a string that is the actual URL + navigated to.} + +@defmethod[(refresh) boolean?]{ + + Refreshes the document in the browser. Returns @scheme[#t] + if the refresh is successful, @scheme[#f] otherwise.} + +@defmethod[(iconize) void?]{ + + Iconizes the browser window.} + +@defmethod[(restore) void?]{ + + Restores the browser window, if it has been iconized.} + +@defmethod[(current-url) string?]{ + + Returns a string indicating the currently displayed URL. } + +@defmethod[(register-event-handler [elem (is-a?/c mx-element%)] + [f ((is-a?/c mx-event<%>) . -> . any)]) + void?]{ + + Registers an event handler for the HTML element @scheme[elem]. + The result of @scheme[f] is discarded.} + +@defmethod[(unregister-event-handler [elem (is-a?/c mx-element%)]) void?]{ + + Unregisters an event handler for an HTML element + in the browser.} + +@defmethod[(handle-events) void?]{ + + Creates a thread to handle events using the registered event + handlers.} + +@defmethod[(stop-handling-events) void?]{ + + Kills the thread currently handling events for + the browser.} + +} diff --git a/collects/mysterx/scribblings/com-types.scrbl b/collects/mysterx/scribblings/com-types.scrbl new file mode 100644 index 0000000000..f57d6b2a24 --- /dev/null +++ b/collects/mysterx/scribblings/com-types.scrbl @@ -0,0 +1,14 @@ +#lang scribble/doc +@(require "common.ss") + +@title[#:tag "com-types"]{COM Types} + +@defproc[(com-object-type [obj com-object?]) com-type?]{ + + Returns a type for a COM object.} + +@defproc[(com-is-a? [obj com-object?] [type com-type?]) boolean?]{ + + Return @scheme[#t] if @scheme[obj] is of the + type @scheme[type].} + diff --git a/collects/mysterx/scribblings/com.scrbl b/collects/mysterx/scribblings/com.scrbl new file mode 100644 index 0000000000..4fd79b9e0f --- /dev/null +++ b/collects/mysterx/scribblings/com.scrbl @@ -0,0 +1,164 @@ +#lang scribble/doc +@(require "common.ss") + +@title[#:tag "com"]{COM Methods and Properties} + + MysterX allows scripting of most COM components from Scheme. A COM + component can be scripted in MysterX if it supports OLE Automation + via the @tt{IDispatch} interface, and if it publishes type + information using the @tt{ITypeInfo} interface. + +@defproc[(com-all-coclasses) (listof string?)]{ + + Returns a list of strings for all COM classes + registered on a system.} + +@defproc[(com-all-controls) (listof string?)]{ + + Returns a list of strings for all COM classes + registered on a system that have the @scheme["Control"] + subkey.} + +@deftogether[( +@defproc[(cocreate-instance-from-coclass [coclass string?] + [where (or/c (one-of/c 'local 'remote) string?) 'local]) + com-object?] +@defproc[(cci/coclass [coclass string?] + [where (or/c (one-of/c 'local 'remote) string?) 'local]) + com-object?] +)]{ + + Returns an instance of @scheme[coclass]. This is useful for COM + classes without a visual representation, or when a visual + representation is not needed. + + The optional argument @scheme[where] indicates a for running the + instance, and may be @scheme['local], @scheme['remote], or a string + indicating a machine name. See @secref["remote"] for more + information.} + +@deftogether[( +@defproc[(cocreate-instance-from-progid [progid string?] + [where (or/c (one-of/c 'local 'remote) string?) 'local]) + com-object?] +@defproc[(cci/progid [progid string?] + [where (or/c (one-of/c 'local 'remote) string?) 'local]) + com-object?] +)]{ + +Like @scheme[cocreate-instance-from-coclass], but using a ProgID.} + + +@defproc[(coclass [obj com-object?]) string?]{ + + Returns a string that is the name of the COM class instantiated by + @scheme[obj], or raises an error if the COM class is not known.} + +@defproc[(progid [obj com-object?]) string?]{ + + Returns a string that is the name of the ProgID instantiated by + @scheme[obj], or raises an error if the COM class is not known.} + +@defproc[(set-coclass! [obj com-object?] [coclass string?]) void?]{ + + Sets the COM class for @scheme[obj] to @scheme[coclass]. This is + useful when MysterX COM event-handling procedures can obtain only + ambiguous information about the object's COM class.} + +@defproc[(set-coclass-from-progid! [obj com-object?] [progid string?]) void?]{ + + Like @scheme[set-coclass!], but using a ProgID.} + +@defproc[(com-methods [obj/type (or/c com-object? com-type?)]) + (listof string?)]{ + + Returns a list of strings indicating the names of methods on + @scheme[obj/type].} + +@defproc[(com-method-type [obj/type (or/c com-object? com-type?)] + [method-name string?]) + (listof symbol?)]{ + + Returns a list of symbols indicating the type of the specified + method in @scheme[obj/type].} + +@defproc[(com-invoke [obj com-object?] [method-name string?] [v any/c]) + any/c]{ + + Invokes @scheme[method-name] on @scheme[obj] with @scheme[v]s as the + arguments. The special value @scheme[com-omit] may be used for + optional arguments, which useful when values are supplied for + arguments after the omitted argument(s).} + +@defproc[(com-get-properties [obj/type (or/c com-object? com-type?)]) + (listof string?)]{ + + Returns a list of strings indicating the names of readable + properties in @scheme[obj/type].} + +@defproc[(com-get-property-type [obj/type (or/c com-object? com-type?)] + [property-name string?]) + (listof symbol?)]{ + + Returns a list of symbols indicating the type of the specified + property in @scheme[obj/type].} + +@defproc[(com-get-property [obj com-object?] [property string?] ...+) + any/c]{ + + Returns the value of the final property by following the indicated + path of @scheme[property]s, where each intermediate property is a + COM object.} + +@defproc[(com-set-properties [obj/type (or/c com-object? com-type?)]) + (listof string?)]{ + + Returns a list of strings indicating the names of writeable + properties in @scheme[obj/type].} + +@defproc[(com-set-property-type [obj/type (or/c com-object? com-type?)] + [property-name strig?]) + (listof symbol?)]{ + + Returns a list of symbols indicating the type of the specified + property in @scheme[obj/type].} + +@defproc[(com-set-property! [obj com-object?] + [string? property] ...+ + [v any/c]) + void?]{ + + Sets the value of the final property in @scheme[obj] to @scheme[v] + by following the @scheme[property]s, where the value of each + intermediate property is a COM object.} + +@defproc[(com-help [obj/type (or/c com-object? com-type?)] + [topic string? ""]) + void?]{ + + Starts the Window Help system with help about the COM object or COM + type. The optional @scheme[topic] is typically a method or property + name.} + +@defproc[(com-object-eq? [obj1 com-object?] [obj2 com-object?]) + boolean?]{ + + Returns @scheme[#t] if the two COM objects are the same, + @scheme[#f] otherwise.} + +@defproc[(com-object? [obj com-object?]) boolean?]{ + + Returns @scheme[#t] if the argument is a COM object, @scheme[#f] + otherwise.} + +@defproc[(com-add-ref [obj com-object?]) void?]{ + + Increments the reference count for @scheme[obj]. + This procedure should only be called when system-level + errors occur due to a mismanaged COM object. Ordinarily, + MysterX handles all COM reference-counting automatically.} + +@defproc[(com-ref-count [obj com-object?]) exact-nonnegative-integer?]{ + + Returns a number indicating the current reference count + for a COM object.} diff --git a/collects/mysterx/scribblings/common.ss b/collects/mysterx/scribblings/common.ss new file mode 100644 index 0000000000..fd97ef2c2c --- /dev/null +++ b/collects/mysterx/scribblings/common.ss @@ -0,0 +1,13 @@ +#lang scheme/base + +(require scribble/manual + (for-label mysterx + scheme/class + scheme/base + scheme/contract)) + +(provide (all-from-out scribble/manual) + (for-label (all-from-out mysterx + scheme/class + scheme/base + scheme/contract))) diff --git a/collects/mysterx/scribblings/dcom.scrbl b/collects/mysterx/scribblings/dcom.scrbl new file mode 100644 index 0000000000..bc913cb06d --- /dev/null +++ b/collects/mysterx/scribblings/dcom.scrbl @@ -0,0 +1,34 @@ +#lang scribble/doc +@(require "common.ss" + scribble/bnf) + +@title[#:tag "remote"]{Remote COM servers (DCOM)} + +For the MysterX procedures @scheme[cocreate-instance-from-coclass] and +@scheme[cocreate-instance-from-progid], the optional @scheme[_where] +argument can be @scheme['remote]. In that case, the server instance +is run at the location given by the Registry key + +@centerline{@tt{HKEY_CLASSES_ROOT\AppID\@nonterm{CLSID}\RemoteServerName}} + +where @nonterm{CLSID} is the CLSID of the application. This key may +be set using the @exec{dcomcnfg} utility. From @exec{dcomcnfg}, pick +the application to be run on the @onscreen{Applications} tab, then +click on the @onscreen{Properties} button. On the @onscreen{Location} +tab, choose @onscreen{Run application on the following computer}, and +enter the machine name. + +In order to run a COM remote server, the registry on the client +machine must contain an entry at + +@centerline{@tt{HKEY_CLASSES_ROOT\CLSID\@nonterm{CLSID}}} + +where @nonterm{CLSID} is the CLSID for the server. The server +application itself need not be installed on the client machine. + +There are a number of configuration issues relating to DCOM, which +MysterX uses to invoke remote COM servers. The Web page + +@centerline{@link["http://www.distribucon.com/dcom95.html"]{http://www.distribucon.com/dcom95.html}} + +discusses how to setup client and server machines for DCOM. diff --git a/collects/mysterx/scribblings/documents.scrbl b/collects/mysterx/scribblings/documents.scrbl new file mode 100644 index 0000000000..7851bc42f9 --- /dev/null +++ b/collects/mysterx/scribblings/documents.scrbl @@ -0,0 +1,115 @@ +#lang scribble/doc +@(require "common.ss") + +@title[#:tag "documents"]{Documents} + + A browser contains one document at a time. If + hyperlinks are clicked, or the navigation methods + (navigate, go-forward, go-back) are used, the + document changes. + +@definterface[mx-document<%> ()]{ + +@defmethod[(insert-html [html string?]) void?]{ + + Inserts the specified HTML string at the + beginning of the document.} + +@defmethod[(append-html [html string?]) void?]{ + + Appends the specified HTML string at the end of + the document.} + +@defmethod[(replace-html [html string?]) void?]{ + + Replace the current HTML in the document with + the specified HTML string.} + +@defmethod[(objects) (listof com-object?)]{ + + Returns a list of COM objects, including ActiveX + controls, that occur in the document. The order + of the objects is the same as in the document.} + +@defmethod[(insert-object-from-coclass [coclass string?] + [width exact-integer?] + [height exact-integer?] + [size (one-of/c 'pixels 'percent) 'pixels]) + com-object?]{ + + Inserts a COM object with class @scheme[coclass] at the beginning of + the document. The optional @scheme[size] argument gives an + interpretation for the width and height, where @scheme['percent] + indicates that the width and height are a fixed percentage of the + document window size.} + +@defmethod[(insert-object-from-progid [progid string?] + [width exact-integer?] + [height exact-integer?] + [size (one-of/c 'pixels 'percent) 'pixels]) + com-object?]{ + + Like @method[mx-document<%> insert-object-from-coclass], but with a + ProgID instead of a COM class.} + +@defmethod[(append-object-from-coclass [coclass string?] + [width exact-integer?] + [height exact-integer?] + [size (one-of/c 'pixels 'percent) 'pixels]) + com-object?]{ + + Like @method[mx-document<%> insert-object-from-coclass], but adds to the + end of the document.} + + +@defmethod[(append-object-from-progid [progid string?] + [width exact-integer?] + [height exact-integer?] + [size (one-of/c 'pixels 'percent) 'pixels]) + com-object?]{ + + Like @method[mx-document<%> insert-object-from-progid], but adds to the + end of the document.} + +@defmethod[(title) string?]{ + + Returns a string indicating the document's title, that is, + the text that appears within HTML TITLE tags. If the document + has no title, the empty string is returned.} + +@defmethod[(find-element [tag string?] + [id string?] + [index exact-nonnegative-integer? 0]) + (is-a?/c mx-element%)]{ + + Returns an object that encapsulates an HTML element, where + @scheme[tag] names an HTML tag, and @scheme[id] names the @scheme["id"] + attribute of the HTML element. The @scheme[index] is a nonnegative + integer indicating the zero-based index of the element among all + elements with the same @scheme[tag] and @scheme[id]. The ordering + of elements is defined by Internet Explorer. The requested element + must be within the document's @scheme["body"] tags or the + @scheme["body"] element itself.} + +@defmethod[(find-element-by-id-or-name + [id string?] + [index exact-nonnegative-integer? 0]) + (is-a?/c mx-element%)]{ + + Returns an object that encapsulates an HTML element, where + @scheme[id] names either the @scheme["id"] or @scheme["name"] + attribute of the HTML element. The @scheme[index] is a nonnegative + integer indicating the zero-based index of the element among all + elements with the same @scheme["id"] or @scheme["name"]. The ordering + of elements is defined by Internet Explorer. The requested element + must be within the document's @scheme["body"] tags or the + @scheme["body"] element itself.} + +@defmethod[(elements-with-tag [tag string?]) + (listof (is-a?/c mx-element%))]{ + + Returns a list of elements with the HTML tag given by @scheme[tag]. + The requested elements must be within the document's @scheme["body"] + tags or the @scheme["body"] element itself.} + +} diff --git a/collects/mysterx/scribblings/html-events.scrbl b/collects/mysterx/scribblings/html-events.scrbl new file mode 100644 index 0000000000..7ed8493a1c --- /dev/null +++ b/collects/mysterx/scribblings/html-events.scrbl @@ -0,0 +1,98 @@ +#lang scribble/doc +@(require "common.ss") + +@title[#:tag "html-events"]{HTML Events} + + MysterX HTML events are generated by mouse and + keyboard interaction with HTML elements in a + document. + +@definterface[mx-event<%> ()]{ + +@defmethod*[ +([(keypress?) boolean?] + [(keydown?) boolean?] + [(keyup?) boolean?] + [(mousedown?) boolean?] + [(mousemove?) boolean?] + [(mouseover?) boolean?] + [(mouseout?) boolean?] + [(mouseup?) boolean?] + [(click?) boolean?] + [(dblclick?) boolean?] + [(error?) boolean?])]{ + + Exactly one of these methods returns @scheme[#t] to indicate the type + of a given event, and the others return @scheme[#f] for the event.} + +@defmethod[(alt-key) boolean?]{ + + Returns @scheme[#t] if the Alt key was pressed when the + event was generated, @scheme[#f] otherwise.} + +@defmethod[(ctrl-key) boolean?]{ + + Returns @scheme[#t] if the Ctrl key was pressed when the + event was generated, @scheme[#f] otherwise. } + +@defmethod[(from-tag) string?]{ + + Returns a string indicating the tag of the HTML element where the + mouse is being moved from. The return value is valid only for + events for which @method[mx-event<%> mouseover?] or @method[mx-event<%> + mouseout?] produces @scheme[#t].} + +@defmethod[(from-id) string?]{ + + Returns a string indicating the identifier of the HTML element where + the mouse is being moved from. Return value is valid only for + events for which @method[mx-event<%> mouseover?] or @method[mx-event<%> + mouseout?] produces @scheme[#t].} + +@defmethod[(id) string?]{ + + Returns a string indicating the identifier of + the HTML element where the event occurred.} + +@defmethod[(keycode) exact-integer?]{ + + Returns a number indicating the keycode for the key that generated + the event. Return value is valid only for events for which + @method[mx-event<%> keypress?], @method[mx-event<%> keydown?], or + @method[mx-event<%> keyup?] produces @scheme[#t].} + +@defmethod[(shift-key) boolean?]{ + + Returns @scheme[#t] if the Shift key was pressed when the + event was generated, @scheme[#f] otherwise.} + +@defmethod[(tag) string?]{ + + Returns a string indicating the HTML tag of the + element where the event occurred.} + +@defmethod[(to-tag) string?]{ + + Returns a string indicating the tag of the target HTML element where + the mouse is being moved to. Return value is valid only for events + for which @method[mx-event<%> mouseover?] or @method[mx-event<%> + mouseout?] produces @scheme[#t].} + +@defmethod[(to-id) boolean?]{ + + Returns a string indicating the identifier of the target HTML + element where the mouse is being moved from. Return value is valid + only for events for which @method[mx-event<%> mouseover?] or + @method[mx-event<%> mouseout?] produces @scheme[#t].} + +@defmethod[(x) exact-integer?]{ + + Returns an integer indicating the x-coordinate + within the document where the event occurred.} + +@defmethod[(y) exact-integer?]{ + + Returns an integer indicating the y-coordinate + within the document where the event occurred.} + +} diff --git a/collects/mysterx/mysterx.scrbl b/collects/mysterx/scribblings/mysterx.scrbl similarity index 77% rename from collects/mysterx/mysterx.scrbl rename to collects/mysterx/scribblings/mysterx.scrbl index 7fac2003b1..0ec07a3906 100644 --- a/collects/mysterx/mysterx.scrbl +++ b/collects/mysterx/scribblings/mysterx.scrbl @@ -1,9 +1,5 @@ #lang scribble/doc -@(require scribble/manual - (for-label mysterx - scheme/class - scheme/base - scheme/contract)) +@(require "common.ss") @title{@bold{MysterX}: Using Windows COM Objects in Scheme} @@ -15,674 +11,20 @@ Distributed COM (DCOM) for your version of Windows is also required. Recent versions of Windows come with DCOM; DCOM packages for Windows 95 and 98 are made available separately. -@table-of-contents[] - -@section{Installation} - -Two Windows DLLs support low-level operations in MysterX: -@filepath{myspage.dll} and @filepath{myssink.dll}. Both are installed -in the registry (using @exec{regsvr32.exe}) when Setup PLT runs the -the MysterX post-installer. If you move the location of your PLT -installation, you may need to re-run Setup PLT to make MysterX -work. Neither of these DLLs is specific to a PLT Scheme version, so -it's ok for one version of PLT Scheme to use the DLLs registered by -another. - -@margin-note{Prior to version 369.4, @filepath{myssink.dll} was -version-specific. Its GUID was changed when it was made -version-independent.} - -If you build a stand-alone executable that uses MysterX, you need to -specifically include @filepath{myspage.dll} and @filepath{myssink.dll} -with your distribution, and the DLLs will need to be registered on the -end user's machine. One way to do that is to include the following -little setup program (as an executable) in your distribution: - -@schemeblock[ - (module setup scheme/base - (require mzlib/runtime-path - mzlib/process) - - (code:comment #, @t{Ensure that DLLs are included with the distribution:}) - (define-runtime-path myspage-dll '(so "myspage")) - (define-runtime-path myssink-dll '(so "myssink")) - - (code:comment #, @t{Register the DLLs:}) - (define regsvr32 - (path->string (find-executable-path "regsvr32.exe" #f))) - (system* regsvr32 (path->string myspage-dll)) - (system* regsvr32 (path->string myssink-dll))) -] - - -@section{Running a Demo} - -Try - -@schemeblock[ - (require mysterx/mxdemo) -] - -The demo requires the MSCal Calendar control. The calendar control is -normally installed with Microsoft Office, but it can also be -downloaded from elsewhere; look for @filepath{mscal.ocx}. - - -@section{Loading} - -Load the MysterX module with - -@schemeblock[ - (require mysterx) -] - -Because some MysterX code relies on the @schememodname[scheme/class] -class system, you may also need - -@schemeblock[ - (require mzlib/class) -] - -Several MysterX procedures take HTML strings as input. The -@schememodname[xml] library provides procedures that convert Scheme -syntax into XML strings. You may find using these procedures useful -in creating HTML strings for use by MysterX. - -@; ---------------------------------------------------------------------- - -@section[#:style 'toc]{Functions and Classes} - @defmodule[mysterx] -@local-table-of-contents[] - -@; ---------------------------------------- - -@subsection{Version} - -@defproc[(mx-version) string?]{ - - Returns a string indicating the version of MysterX.} - -@; ---------------------------------------- -@subsection{Browsers} - - A MysterX application consists of one or more browsers, which are - instances of the class @scheme[mx-browser%]. - -@defproc[(block-while-browsers) void?]{ - - Blocks until all browser windows have been closed or hidden, using - the show method of @scheme[mx-browser%]. This is useful when a - MysterX program file is run as a script, to prevent @exec{mzscheme} - or @exec{mred} from closing prematurely.} - -@defclass[mx-browser% object% ()]{ - -@defconstructor[([label string? "MysterX"] - [width (or/c exact-nonnegative-integer? (one-of/c 'default)) 'default] - [height (or/c exact-nonnegative-integer? (one-of/c 'default)) 'default] - [x (or/c exact-integer? (one-of/c 'default)) 'default] - [y (or/c exact-integer? (one-of/c 'default)) 'default] - [style (listof (any-of/c 'iconize 'maximize 'no-system-menu - 'no-thick-border 'scrollbars))])]{ - - Creates an instance of a MysterX browser. The @scheme[label] - argument is a string for the document caption, with default . The - @scheme[width], @scheme[height], @scheme[x], and @scheme[y] give the - size and placement of the browser window on the desktop, with - defaults provided by Windows. When @scheme[style-list] includes - @scheme['scrollbars], the vertical scrollbar is disabled if - scrolling is unnecessary, and the horizontal scrollbar disappears if - scrolling is unnecessary. - - Although the browser window cannot be hidden initially, it can be - iconized. The @method[mx-browser% restore] method can be used to - restore an iconized browser to an ordinary window.} - -@defmethod[(current-document) (is-a?/c mx-document%)]{ - - Returns the current document in the browser.} - -@defmethod[(print-document) void?]{ - - Prints the document displayed by the browser to the default - printer. As an unintentional side-effect, the browser - window is minimized.} - -@defmethod[(show [show? any/c]) void?]{ - - If @scheme[show?] is @scheme[#f], the browser window is hidden. - Otherwise, the window is shown.} - -@defmethod[(navigate [url string?]) string?]{ - - Navigates the browser to the URL given by @scheme[url]. - Any DHTML changes to the page associated with the URL - are not shown. Returns a string that is the actual URL - navigated to.} - -@defmethod[(navigate/status [url string?]) - (list/c string? (or/c false/c integer? (one-of/c 'no-status)))]{ - - Navigates the browser to the URL given by @scheme[url]. - Any DHTML changes to the page associated with the URL - are not shown. Returns a list, whose first element string that - is the actual URL navigated to, and whose second element is - a status code, one of: @scheme[#f], indicating no status could be - obtained; a number, such as @scheme[200] or @scheme[404], indicating the - http status; or @scheme['no-status], indicating that @scheme[url] does not - denote a URL with the ``http'' scheme.} - -@defmethod[(go-back) string?]{ - - Navigates the browser back to a URL within its history list. - Any DHTML changes to the page associated with the URL - are not shown. Returns a string that is the actual URL - navigated to.} - -@defmethod[(go-forward) string?]{ - - Navigates the browser forward to a URL within its history list. - Any DHTML changes to the page associated with the URL are - not shown. Returns a string that is the actual URL - navigated to.} - -@defmethod[(refresh) boolean?]{ - - Refreshes the document in the browser. Returns @scheme[#t] - if the refresh is successful, @scheme[#f] otherwise.} - -@defmethod[(iconize) void?]{ - - Iconizes the browser window.} - -@defmethod[(restore) void?]{ - - Restores the browser window, if it has been iconized.} - -@defmethod[(current-url) string?]{ - - Returns a string indicating the currently displayed URL. } - -@defmethod[(register-event-handler [elem (is-a?/c mx-element%)] - [f ((is-a?/c mx-event%) . -> . any)]) - void?]{ - - Registers an event handler for the HTML element @scheme[elem]. - The result of @scheme[f] is discarded.} - -@defmethod[(unregister-event-handler [elem (is-a?/c mx-element%)]) void?]{ - - Unregisters an event handler for an HTML element - in the browser.} - -@defmethod[(handle-events) void?]{ - - Creates a thread to handle events using the registered event - handlers.} - -@defmethod[(stop-handling-events) void?]{ - - Kills the thread currently handling events for - the browser.} - -} - -@; ---------------------------------------- - -@subsection{Documents} - - A browser contains one document at a time. If - hyperlinks are clicked, or the navigation methods - (navigate, go-forward, go-back) are used, the - document changes. - -@defclass[mx-document% object% ()]{ - -@defmethod[(insert-html [html string?]) void?]{ - - Inserts the specified HTML string at the - beginning of the document.} - -@defmethod[(append-html [html string?]) void?]{ - - Appends the specified HTML string at the end of - the document.} - -@defmethod[(replace-html [html string?]) void?]{ - - Replace the current HTML in the document with - the specified HTML string.} - -@defmethod[(objects) (listof (is-a?/c com-object%))]{ - - Returns a list of COM objects, including ActiveX - controls, that occur in the document. The order - of the objects is the same as in the document.} - -@defmethod[(insert-object-from-coclass [coclass string?] - [width exact-integer?] - [height exact-integer?] - [size (one-of/c 'pixels 'percent) 'pixels]) - com-object%]{ - - Inserts a COM object with class @scheme[coclass] at the beginning of - the document. The optional @scheme[size] argument gives an - interpretation for the width and height, where @scheme['percent] - indicates that the width and height are a fixed percentage of the - document window size. An instance of is returned.} - -@defmethod[(insert-object-from-progid [progid string?] - [width exact-integer?] - [height exact-integer?] - [size (one-of/c 'pixels 'percent) 'pixels]) - com-object%]{ - - Like @method[mx-document% insert-object-from-coclass], but with a - ProgID instead of a COM class.} - -@defmethod[(append-object-from-coclass [coclass string?] - [width exact-integer?] - [height exact-integer?] - [size (one-of/c 'pixels 'percent) 'pixels]) - com-object%]{ - - Like @method[mx-document% insert-object-from-coclass], but adds to the - end of the document.} - - -@defmethod[(append-object-from-progid [progid string?] - [width exact-integer?] - [height exact-integer?] - [size (one-of/c 'pixels 'percent) 'pixels]) - com-object%]{ - - Like @method[mx-document% insert-object-from-progid], but adds to the - end of the document.} - -@defmethod[(title) string?]{ - - Returns a string indicating the document's title, that is, - the text that appears within HTML TITLE tags. If the document - has no title, the empty string is returned.} - -@defmethod[(find-element [tag string?] - [id string?] - [index exact-nonnegative-integer? 0]) - (is-a?/c mx-element%)]{ - - Returns an object that encapsulates an HTML element, where - @scheme[tag] names an HTML tag, and @scheme[id] names the @scheme["id"] - attribute of the HTML element. The @scheme[index] is a nonnegative - integer indicating the zero-based index of the element among all - elements with the same @scheme[tag] and @scheme[id]. The ordering - of elements is defined by Internet Explorer. The requested element - must be within the document's @scheme["body"] tags or the - @scheme["body"] element itself.} - -@defmethod[(find-element-by-id-or-name - [id string?] - [index exact-nonnegative-integer? 0]) - (is-a?/c mx-element%)]{ - - Returns an object that encapsulates an HTML element, where - @scheme[id] names either the @scheme["id"] or @scheme["name"] - attribute of the HTML element. The @scheme[index] is a nonnegative - integer indicating the zero-based index of the element among all - elements with the same @scheme["id"] or @scheme["name"]. The ordering - of elements is defined by Internet Explorer. The requested element - must be within the document's @scheme["body"] tags or the - @scheme["body"] element itself.} - -@defmethod[(elements-with-tag [tag string?]) - (listof (is-a?/c mx-element%))]{ - - Returns a list of elements with the HTML tag given by @scheme[tag]. - The requested elements must be within the document's @scheme["body"] - tags or the @scheme["body"] element itself.} - -} +@table-of-contents[] + +@include-section["overview.scrbl"] +@include-section["version.scrbl"] +@include-section["browsers.scrbl"] +@include-section["documents.scrbl"] +@include-section["html-events.scrbl"] +@include-section["com-types.scrbl"] +@include-section["com.scrbl"] +@include-section["dcom.scrbl"] @;{ - - HTML events - ----------- - - MysterX HTML events are generated by mouse and - keyboard interaction with HTML elements in a - document. HTML events are instances of the - class mx-event%. The action that generated an - event can be determined by the following - predicates, only one of which may hold: - -> keypress? :: (send an-mx-event keypress?) -> keydown? :: (send an-mx-event event-keydown?) -> keyup? :: (send an-mx-event keyup?) -> mousedown? :: (send an-mx-event mousedown?) -> mousemove? :: (send an-mx-event mousemove?) -> mouseover? :: (send an-mx-event mouseover?) -> mouseout? :: (send an-mx-event mouseout?) -> mouseup? :: (send an-mx-event mouseup?) -> click? :: (send an-mx-event click?) -> dblclick? :: (send an-mx-event dblclick?) -> error? :: (send an-mx-event error?) - - Events have attributes that give detail about - the event. - -> alt-key :: (send an-mx-event alt-key) - - Returns #t if the Alt key was pressed when the - event was generated, #f otherwise. - -> ctrl-key :: (send an-mx-event ctrl-key) - - Returns #t if the Ctrl key was pressed when the - event was generated, #f otherwise. - -> from-tag :: (send an-mx-event from-tag) - - Returns a string indicating the tag of the HTML - element where the mouse is being moved from. - Return value is valid only for events for which - `mouseover?' or `mouseout?' hold. - -> from-id :: (send an-mx-event from-id) - - Returns a string indicating the identifier of - the HTML element where the mouse is being moved - from. Return value is valid only for events for - which `mouseover?' or `mouseout?' hold. - -> id :: (send an-mx-event id) - - Returns a string indicating the identifier of - the HTML element where the event occurred. - -> keycode :: (send an-mx-event keycode) - - Returns a number indicating the keycode for the - key that generated the event. Return value is - valid only for events for which `keypress?', - `keydown', or `keyup?' hold. - -> shift-key :: (send an-mx-event shift-key) - - Returns #t if the Shift key was pressed when the - event was generated, #f otherwise. - -> tag :: (send an-mx-event tag) - - Returns a string indicating the HTML tag of the - element where the event occurred. - -> to-tag :: (send an-mx-event to-tag) - - Returns a string indicating the tag of the - target HTML element where the mouse is being - moved to. Return value is valid only for events - for which `mouseover?' or `mouseout?' hold. - -> to-id :: (send an-mx-event to-id) - - Returns a string indicating the identifier of - the target HTML element where the mouse is being - moved from. Return value is valid only for - events for which `mouseover?' or `mouseout?' hold. - -> x :: (send an-mx-event x) - - Returns an integer indicating the x-coordinate - within the document where the event occurred. - -> y :: (send an-mx-event y) - - Returns an integer indicating the y-coordinate - within the document where the event occurred. - - COM types - --------- - -> (com-object-type a-com-object) - - Returns a value for `a-com-object', a . - -> (com-is-a? a-com-object a-com-type) - - Return #t if `a-com-object', a , is of the - type `a-com-type', a . - - COM methods and properties - -------------------------- - - MysterX allows scripting of most COM components - from Scheme. A COM component can be scripted in - MysterX if 1) it supports OLE Automation, that - is, the IDispatch interface, and 2) publishes - type information using the ITypeInfo interface. - -> (com-all-coclasses) - - Returns a list of strings for all COM classes - registered on a system. - -> (com-all-controls) - - Returns a list of strings for all COM classes - registered on a system that have the "Control" - subkey. - -> (cocreate-instance-from-coclass a-coclass [where]) -> (cci/coclass a-coclass [where]) - - `a-coclass` is the name of a COM class. Returns - an instance of the class, of type . - Useful for COM classes without a visual - representation, or when a visual representation - is not needed. - - The optional argument `where' indicates a for - running the instance, and may be 'local (the - default), 'remote, or a string indicating a - machine name. See "Running remote COM servers", - below, for more information. - -> (cocreate-instance-from-progid a-progid [where]) -> (cci/progid a-progid [where]) - - `a-progid` is the ProgID for a COM class. - Returns an instance of the class, of type - . Useful for COM classes without a - visual representation, or when a visual - representation is not needed. - - The optional argument `where' indicates a for - running the instance, and may be 'local (the - default), 'remote, or a string indicating a - machine name. See "Running remote COM servers", - below, for more information. - -> (coclass a-com-object) - - Given a , returns a string that is - the name of the COM class instantiated by the - object. Raises an error if the COM class is not - known. - -> (progid a-com-object) - - Given a , returns a string that is - the ProgID for the COM class instantiated by the - object. Raises an error if the COM class is not - known. - -> (set-coclass! a-com-object coclass) - - Sets the COM class for a to be - `coclass', a string. This is useful when - MysterX COM event-handling procedures can only - obtain ambiguous information about the object's - COM class. - -> (set-coclass-from-progid! a-com-object progid) - - Sets the COM class for a to be the - class denoted by `progid', a string. This is - useful when MysterX COM event-handling - procedures can only obtain ambiguous information - about the object's COM class. - -> (com-methods a-com-object) -> (com-methods a-com-type) - - `a-com-object' is a . `a-com-type' - is a . Returns a list of strings - indicating the names of methods. - -> (com-method-type a-com-object method-name) -> (com-method-type a-com-type method-name) - - `a-com-object' is a . `a-com-type' - is a . `method-name' is a string. - Returns a list of symbols indicating the type of - the specified method. - -> (com-invoke a-com-object method-name ...) - - `a-com-object' is a , and - `method-name' is a string. Invokes the - requested method using the arguments given. The - special value `com-omit' may be used for - optional arguments, useful when values are - supplied for arguments to the right of the - omitted argument(s). - -> (com-get-properties a-com-object) -> (com-get-properties a-com-type) - - `a-com-object' has type . - `a-com-type' is a . Returns a list of - strings indicating the names of readable - properties in the object. - -> (com-get-property-type a-com-object property-name) -> (com-get-property-type a-com-type property-name) - - `a-com-object' is a , `a-com-type' - is a , and `property-name' is a - string. Returns a list of symbols indicating - the type of the specified property. - -> (com-get-property a-com-object property property ...) - - `a-com-object' is a , and each - `property' is a string, or a list whose first element is a string, - and whose remaining elements are Scheme values (an "indexed" - property). Returns the value of the final property - by following the indicated path of properties, where each - intermediate property is a . - -> (com-set-properties a-com-object) -> (com-set-properties a-com-type) - - `a-com-object' has type . - `a-com-type' is a . Returns a list of - strings indicating the names of writable - properties in the object. - -> (com-set-property-type a-com-object pptyroperty-name) -> (com-set-property-type a-com-type property-name) - - `a-com-object' is a , `a-com-type' - is a , and `property-name' is a - string. Returns a list of symbols indicating - the type of the specified property. - -> (com-set-property! a-com-object property property ... val) - - `a-com-object' is a , each `property' is a - string, or a list whose first element is a string and whose - remaining elements are Scheme values (indicating an "indexed" - property); `val' is a Scheme value. Sets the value of the final - property by following the indicated path of properties, where - each intermediate property is a . - -> (com-help a-com-object [topic]) -> (com-help a-com-type [topic]) - - Starts the Window Help system with help about - the COM object or COM type. `a-com-object' is a - , `a-com-type' is a , and - `topic' is an optional string, typically a - method or property name. - -> (com-object-eq? a-com-object a-com-object) - - Returns #t if the two COM objects are the same, - #f otherwise. - -> (com-object? a-com-object) - - Returns #t if the argument is a COM object, #f - otherwise. - -> (com-add-ref a-com-object) - - Increments the reference count for a COM object. - This procedure should only be called when system-level - errors occur due to a mismanaged COM object. Ordinarily, - MysterX handles all COM reference-counting automatically. - See also `com-ref-count'. - -> (com-ref-count a-com-object) - - Returns a number indicating the current reference count - for a COM object. See also `com-add-ref'. - -_DCOM_ -====== -_Remote COM servers_ -==================== - - Running remote COM servers - -------------------------- - - For the MysterX procedures - cocreate-instance-from-coclass and - cocreate-instance-from-progid, the optional - `where' argument may be 'remote. In that case, - the server instance is run at the location given - by the Registry key - - HKEY_CLASSES_ROOT\AppID\\RemoteServerName - - where is the CLSID of the application. - This key may be set using the DCOMCNFG utility. - From DCOMCNFG, pick the application to be run on - the Applications tab, then click on the - Properties button. On the Location tab, choose - "Run application on the following computer", and - enter the machine name. - - In order to run a COM remote server, the Registry on the - client machine must contain an entry at - - HKEY_CLASSES_ROOT\CLSID\ - - where is the CLSID for the server. The server - application itself need not be installed on the client - machine. - - There are a number of configuration issues relating to - DCOM, which MysterX uses to invoke remote COM servers. - The Web page - - http://www.distribucon.com/dcom95.html - - discusses how to setup client and server machines for - DCOM. - COM events ----------- @@ -693,8 +35,8 @@ _Remote COM servers_ programmer to write handlers for both stock and custom events. -> (com-events a-com-object) -> (com-events a-com-type) +> (com-events [obj com-object?]) +> (com-events [type com-type?]) Returns a list of strings naming the events supported by the COM object `a-com-object' or @@ -705,12 +47,12 @@ _Remote COM servers_ `set-coclass-from-progid!', then retry the procedure. -> (com-event-type a-com-object ev) -> (com-event-type a-com-type ev) +> (com-event-type [obj com-object?] ev) +> (com-event-type [type com-type?] ev) Returns the type of an event handler for the event ev, a string, generated by the particular - COM object `a-com-object', or by COM objects + COM object `[obj com-object?]', or by COM objects that have type `a-com-type'. The return type of all COM event handlers is void. If calling this procedure results in an error indicating that @@ -719,7 +61,7 @@ _Remote COM servers_ `set-coclass-from-progid!', then retry the procedure. -> (com-register-event-handler a-com-object ev fn) +> (com-register-event-handler [obj com-object?] ev fn) Registers the event handler fn, a procedure, to handle the event ev, a string, when generated by @@ -732,7 +74,7 @@ _Remote COM servers_ `set-coclass!' or `set-coclass-from-progid', then retry the procedure. -> (com-unregister-event-handler a-com-object ev) +> (com-unregister-event-handler [obj com-object?] ev) Unregisters any event handler for the event ev, a string, that is generated by the COM object @@ -749,7 +91,7 @@ _Remote COM servers_ > boolean A boolean. When a boolean is required in - argument position, MysterX will interpret #f as + argument position, MysterX will interpret @scheme[#f] as false, and any other value as true. > short-int @@ -762,7 +104,7 @@ _Remote COM servers_ > (com-currency? a-val) - Returns #t if `a-val' has type com-currency, #f otherwise. + Returns @scheme[#t] if `a-val' has type com-currency, @scheme[#f] otherwise. > (com-currency->number a-com-curr) @@ -782,13 +124,13 @@ _Remote COM servers_ > (com-date? a-val) - Returns #t if `a-val' has type com-date, #f otherwise. + Returns @scheme[#t] if `a-val' has type com-date, @scheme[#f] otherwise. > (com-date->date a-com-date) Returns an instance of the date structure, given `a-com-date', a com-date. In the returned structure, the dst? field is - always #f and the time-zone-offset field is 0. + always @scheme[#f] and the time-zone-offset field is 0. > (date->com-date a-date) @@ -801,7 +143,7 @@ _Remote COM servers_ > (com-scode? a-val) - Returns #t if `a-val' has type com-scode, #f otherwise. + Returns @scheme[#t] if `a-val' has type com-scode, @scheme[#f] otherwise. > (com-scode->number an-scode) @@ -822,14 +164,14 @@ _Remote COM servers_ > (com-iunknown? a-val) - Returns #t if `a-val' has type com-iunknown, #f otherwise. + Returns @scheme[#t] if `a-val' has type com-iunknown, @scheme[#f] otherwise. > mx-any A method or property requiring a value of mx-any will accept values of any of these Scheme types: char, int, float, real, and string, as well as - the values #t and #f, as well as values of the + the values @scheme[#t] and @scheme[#f], as well as values of the COM-specific types , , , and . @@ -923,7 +265,7 @@ _Remote COM servers_ A-F). The first two digits are for the red component of the color, the middle two for the green component, and the last two for the blue - component. For example, "#FFFFFF" is white, + component. For example, "@scheme[#f]FFFFF" is white, "#000000" is black, and "#00FF00" is green. There are also predefined color names. The @@ -987,7 +329,7 @@ _Remote COM servers_ Replaces the HTML in the element with the string `html'. You must use the `find-element' or `find-element-by-id-or-name' methods of - mx-document% to retrieve the updated element. + mx-document<%> to retrieve the updated element. > insert-text :: (send an-mx-element insert-text txt) @@ -1061,7 +403,7 @@ _Remote COM servers_ Sets the attribute named by the string `attr'. The new value `val' has a type that depends on the attribute, - but must be either a string, an integer, a float, #t, or #f. + but must be either a string, an integer, a float, @scheme[#t], or @scheme[#f]. > click :: (send an-mx-element click) @@ -2234,7 +1576,7 @@ _Remote COM servers_ > set-text-decoration-none! :: (send an-mx-element set-text-decoration-none! tdn) Sets the element's CSS text-decoration-none - using `tdn'. If `tdn' is #f, the value is + using `tdn'. If `tdn' is @scheme[#f], the value is false, otherwise it is considered true. > text-decoration-underline :: (send an-mx-element text-decoration-underline) @@ -2245,7 +1587,7 @@ _Remote COM servers_ > set-text-decoration-underline! :: (send an-mx-element set-text-decoration-underline! tdu) Sets the element's CSS text-decoration-underline - using `tdu'. If `tdn' is #f, the value is + using `tdu'. If `tdn' is @scheme[#f], the value is false, otherwise it is considered true. > text-decoration-overline :: (send an-mx-element text-decoration-overline) @@ -2256,7 +1598,7 @@ _Remote COM servers_ > set-text-decoration-overline! :: (send an-mx-element set-text-decoration-overline! tdo) Sets the element's CSS text-decoration-overline - using `tdo'. If `tdn' is #f, the value is + using `tdo'. If `tdn' is @scheme[#f], the value is false, otherwise it is considered true. > text-decoration-linethrough :: (send an-mx-element text-decoration-linethrough) @@ -2268,7 +1610,7 @@ _Remote COM servers_ Sets the element's CSS text-decoration-linethrough using `tdlt'. If - `tdn' is #f, the value is false, otherwise it is + `tdn' is @scheme[#f], the value is false, otherwise it is considered true. > text-decoration-blink :: (send an-mx-element text-decoration-blink) @@ -2279,7 +1621,7 @@ _Remote COM servers_ > set-text-decoration-blink! :: (send an-mx-element set-text-decoration-blink! bl) Sets the element's CSS text-decoration-blink - using `bl'. If `tdn' is #f, the value is false, + using `bl'. If `tdn' is @scheme[#f], the value is false, otherwise it is considered true. > pixel-top :: (send an-mx-element pixel-top) diff --git a/collects/mysterx/scribblings/overview.scrbl b/collects/mysterx/scribblings/overview.scrbl new file mode 100644 index 0000000000..ba1fc36335 --- /dev/null +++ b/collects/mysterx/scribblings/overview.scrbl @@ -0,0 +1,74 @@ +#lang scribble/doc +@(require "common.ss") + +@title[#:tag "overview"]{Overview} + +@section{Installation} + +Two Windows DLLs support low-level operations in MysterX: +@filepath{myspage.dll} and @filepath{myssink.dll}. Both are installed +in the registry (using @exec{regsvr32.exe}) when Setup PLT runs the +the MysterX post-installer. If you move the location of your PLT +installation, you may need to re-run Setup PLT to make MysterX +work. Neither of these DLLs is specific to a PLT Scheme version, so +it's ok for one version of PLT Scheme to use the DLLs registered by +another. + +@margin-note{Prior to version 369.4, @filepath{myssink.dll} was +version-specific. Its GUID was changed when it was made +version-independent.} + +If you build a stand-alone executable that uses MysterX, you need to +specifically include @filepath{myspage.dll} and @filepath{myssink.dll} +with your distribution, and the DLLs will need to be registered on the +end user's machine. One way to do that is to include the following +little setup program (as an executable) in your distribution: + +@schemeblock[ + (module setup scheme/base + (require mzlib/runtime-path + mzlib/process) + + (code:comment #, @t{Ensure that DLLs are included with the distribution:}) + (define-runtime-path myspage-dll '(so "myspage")) + (define-runtime-path myssink-dll '(so "myssink")) + + (code:comment #, @t{Register the DLLs:}) + (define regsvr32 + (path->string (find-executable-path "regsvr32.exe" #f))) + (system* regsvr32 (path->string myspage-dll)) + (system* regsvr32 (path->string myssink-dll))) +] + +@section{Running a Demo} + +Try + +@schemeblock[ + (require mysterx/mxdemo) +] + +The demo requires the MSCal Calendar control. The calendar control is +normally installed with Microsoft Office, but it can also be +downloaded from elsewhere; look for @filepath{mscal.ocx}. + + +@section{Loading} + +Load the MysterX module with + +@schemeblock[ + (require mysterx) +] + +Because some MysterX code relies on the @schememodname[scheme/class] +class system, you may also need + +@schemeblock[ + (require mzlib/class) +] + +Several MysterX procedures take HTML strings as input. The +@schememodname[xml] library provides procedures that convert Scheme +syntax into XML strings. You may find using these procedures useful +in creating HTML strings for use by MysterX. diff --git a/collects/mysterx/scribblings/version.scrbl b/collects/mysterx/scribblings/version.scrbl new file mode 100644 index 0000000000..54213ba003 --- /dev/null +++ b/collects/mysterx/scribblings/version.scrbl @@ -0,0 +1,9 @@ +#lang scribble/doc +@(require "common.ss") + +@title[#:tag "version"]{Version} + +@defproc[(mx-version) string?]{ + + Returns a string indicating the version of MysterX.} +