{"id":2918,"date":"2016-07-20T15:06:41","date_gmt":"2016-07-20T14:06:41","guid":{"rendered":"http:\/\/www.frogsinspace.at\/?p=2918"},"modified":"2025-02-01T08:53:06","modified_gmt":"2025-02-01T07:53:06","slug":"mxseditor-v1-0-final-released","status":"publish","type":"post","link":"https:\/\/www.frogsinspace.at\/?p=2918","title":{"rendered":"MXSEditor V1.0 Final released&#8230;"},"content":{"rendered":"<p id=\"top\" \/>\n<p>I just released the first stable version of the Maxscript Editor control plugin MXSEditor.<\/p>\n\n\n\n<p>In short, it allows the Maxscript Editor to be controlled using maxscript and exposes the Editor&#8217;s internal SciTE API to maxscript. Addionally it lets you use the Maxscript Editor in an extended viewport and control several aspects of the Editor window. It allows for pretty advanced usage, but the extended viewport functionality might come handy for many casual scripters too<\/p>\n\n\n\n<p>Its important to read the comprehensive documentation below and in the ZIP package to unleash the plugins possibilities<br \/>To make use of the maxscript exposure of the SciTE interface,&nbsp; knowledge of the SciTE interal API is a plus. It&#8217;s important to read the accompanying documentation below, as well as the references to the SciTE online documentation.<\/p>\n\n\n\n<p><strong> FEATURES:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Maxscript Editor as Extended Viewport<\/li>\n\n\n\n<li>Extensive control over the Maxscript Editor via maxscript<\/li>\n\n\n\n<li>Access to the Scintilla\/SciTE internal command set (see <a href=\"http:\/\/www.scintilla.org\/ScintillaDoc.html\">Scintilla Docs<\/a> )<\/li>\n\n\n\n<li>Callback mechanism to get notified about changes and events occuring in the maxscript editor<\/li>\n<\/ul>\n\n\n<div class=\"sdm_download_item \"><div class=\"sdm_download_item_top\"><div class=\"sdm_download_thumbnail\"><img decoding=\"async\" class=\"sdm_download_thumbnail_image\" src=\"https:\/\/www.frogsinspace.at\/wp1\/wp-content\/uploads\/\/2012\/07\/mxseditor_screenshot_new.png\" alt = \"MXSEditor | 3ds Max Plugin\" \/><\/div><div class=\"sdm_download_title\">MXSEditor | 3ds Max Plugin<\/div><\/div><div style=\"clear:both;\"><\/div><div class=\"sdm_download_description\"><p><strong>MXSEditor &#8211; Maxscript Editor Exposure Plugin<br \/>\n<\/strong>3ds Max 2017 &#8211; 3ds Max 2027<\/p>\n<p>RECENT CHANGES:<\/p>\n<ul>\n<li>added 3ds Max 2025, 2026 and 2027 versions<\/li>\n<li>removed 3ds Max 2016 and earlier versions<\/li>\n<li>fixed possible exception on 3ds Max shutdown<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong>FEATURES:<\/strong><\/p>\n<ul>\n<li>Maxscript Editor as Extended Viewport<\/li>\n<li>Extensive control over the Maxscript Editor via maxscript<\/li>\n<li>Access to the Scintilla\/SciTE internal command set<\/li>\n<li>Callback mechanism for maxscript editor events<\/li>\n<li>Includes builds for 3ds Max 2017 up to 3ds Max 2027<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>And finally, to ensure future improvements and support my efforts, please consider a donation!<br \/>\nDonations: <a href=\"&quot;\/\/buymeacoffee.com\/frogsinspace&quot;&quot;\" target=\"&quot;&quot;_blank&quot;&quot;\" rel=\"&quot;&quot;noopener&quot;&quot;\"><strong>buymeacoffee.com<\/strong><\/a><\/p>\n<\/div><div class=\"sdm_download_version\"><span class=\"sdm_download_version_label\">Version: <\/span><span class=\"sdm_download_version_value\">1.2_DC20260331<\/span><\/div><div class=\"sdm_download_link\"><span class=\"sdm_download_button\"><form action=\"https:\/\/www.frogsinspace.at\/?sdm_process_download=1&#038;download_id=3849\" method=\"post\" class=\"sdm-g-recaptcha-form sdm-download-form\" target=&quot;_blank&quot;><div class=\"sdm-recaptcha-button\"><input type=\"hidden\" class=\"sdm-g-recaptcha-v3-response\" name=\"g-recaptcha-response\"\/><div class=\"sdm-termscond-checkbox\"><input type=\"checkbox\" class=\"agree_termscond\" value=\"1\"\/> I agree to the <a href=\"https:\/\/www.frogsinspace.at\/?page_id=3870\" target=\"_blank\">terms and conditions<\/a><\/div><a href=\"#\" class=\"sdm_download orange sdm_download_with_condition\">Download Now!<\/a><\/div><input type=\"hidden\" name=\"download_id\" value=\"3849\" \/><\/form><\/span><\/div><\/div><div class=\"sdm_clear_float\"><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Detailed Documentation:<\/h3>\n\n\n\n<p><strong>VERSION HISTORY:<\/strong><\/p>\n\n\n\n<p>Version V1.0, DC20160720<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Updated to unicode compatibility,<\/li>\n\n\n\n<li>Max 2008 to Max2017, x86 and x64 compatibility<\/li>\n\n\n\n<li>Callback functionality implementation<\/li>\n\n\n\n<li>Lots of other fixes and updates<\/li>\n\n\n\n<li>Documentation added<\/li>\n<\/ul>\n\n\n\n<p>Version V0.50 &#8211; Beta 1, DC20120214,<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>First public release<\/li>\n<\/ul>\n\n\n\n<p><strong>AUTHOR:<\/strong><\/p>\n\n\n\n<p>Josef Wienerroither aka &#8220;spacefrog&#8221;<br \/>Web: <a href=\"https:\/\/www.frogsinspace.at\/\">www.frogsinspace.at<br \/><\/a>Email: <a href=\"mailto:\/\/spacefrog@chello.at\">spacefrog@chello.at<\/a><\/p>\n\n\n\n<p><strong><br \/>DOWNLOAD &amp; INSTALL:<\/strong><\/p>\n\n\n\n<p>The most recent version can be downloaded here: <a href=\"https:\/\/www.frogsinspace.at\/?download=MXSEditor Global Utility Plugin\">3ds Max MXSEditor Plugin<\/a><\/p>\n\n\n\n<p>Copy the appropiate file according to your 3ds Max version to your plugins folder and restart 3ds Max. The plugin should now be operational. To check this, type &#8220;showinterface MXSEditor&#8221; in the listener and hit enter. If a list of public properties and functions appears, the plugin got loaded.<\/p>\n\n\n\n<p><strong><br \/>USAGE:<\/strong><\/p>\n\n\n\n<p>Most of the functionality is of advanced usage and accessable via the maxscript interfaces. Features for more general maxscript usage are documented below. For detailed documentation about the Scintilla\/SciTE related functionality, please refer to the official <a href=\"http:\/\/www.scintilla.org\/ScintillaDoc.html\">Scintilla Documentation<\/a>.<\/p>\n\n\n\n<p><strong>IMPORTANT:<\/strong><\/p>\n\n\n\n<p>The Scintilla\/SciTE version used for the 3ds Max maxscript editor is pretty outdated. Additionally it got heavily modified for the integration with 3ds Max. My investigation lead to the conclusion that it&#8217;s based on codebase<a href=\"http:\/\/prdownloads.sourceforge.net\/scintilla\/scite171.zip?download\"> version 1.71<\/a>, which was released back in August 2006. You may visit Scintilla&#8217;s <a href=\"http:\/\/www.scintilla.org\/ScintillaHistory.html\">history page<\/a> to read more about the progress made since then. 3ds Max 2008 was the first version which incorporated the new maxscript editor, thus this seems plausible.<\/p>\n\n\n\n<p>This is important to remember when accessing Scintilla\/SciTE related APIs when using this plugin. Many of today&#8217;s Scintilla\/SciTE features and documentation DO NOT apply to the maxscript editor. Only ever expect the featureset and API of V1.71. As today&#8217;s online documentation targets the newer versions only, it&#8217;s recommended to use the docs bundled with the <a href=\"http:\/\/prdownloads.sourceforge.net\/scintilla\/scite171.zip?download\">V1.71 distribution<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">MXSEditor Interface:<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Main maxscript interface to control the editor,<br \/>&#8220;<strong>showinterface mxseditor&#8221; <\/strong>reveals all available methods and properties<\/p>\n\n\n\n<p><strong>Properties:<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Property<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><tr><td>x, y, width, height<\/td><td>Maxscript editor window position and size (if not in extended viewport)<\/td><\/tr><tr><td>enableCallbacks<\/td><td>quickly disable or enable installed callbacks without removing them<\/td><\/tr><tr><td>isVisible<\/td><td>Toggle maxscript editor visibilty<\/td><\/tr><tr><td>verbose<\/td><td>Toggle Scintilla commands verbose listener output<\/td><\/tr><tr><td>isExtendedVP<\/td><td>Maxscript editor is currently in extended viewport (readonly)<\/td><\/tr><tr><td>mainWHND<\/td><td>Maxscript editor\u2018s window handle<\/td><\/tr><tr><td>editHWND<\/td><td>Maxscript editor edit component\u2018s window handle<\/td><\/tr><tr><td>documentCount<\/td><td>Number of currently opened documents (tabs) in the maxscript editor<\/td><\/tr><tr><td>currentDocument<\/td><td>Full path and filename of the currently active tab\u2018s document<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><strong>Methods:<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>Redraw()<\/code><br \/>Redraw the text content of the current visible tab<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>Show()<\/code><br \/>Opens the Maxscript editor window ( see .isVisible property to hide )<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>&lt;boolean&gt; EndExtendedVP()<\/code><br \/>Detaches the maxscript editor from an extended viewport and restores the original editor window. Returns true if the editor was in an extended viewport, false otherwise.<strong><br \/><\/strong><\/p>\n\n\n\n<p><code>ReloadOptions()<\/code><br \/>Reload Maxscript editor configuration files ( eg. after a setting got changed externally )<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>&lt;boolean&gt; EditFile &lt;filename&gt; quiet:&lt;boolean&gt;<\/code><br \/>Open file in editor, if quiet:true is passed as optional argument, the usual modal dialog prompt is suppressed in case the file does\u2018nt exists<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>&lt;string&gt; DocumentAtNumber &lt;index&gt;<\/code><br \/>Returns the full path of the file loaded in editor\u2018s tab # &lt;index&gt; ( 1 based )<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>&lt;boolean&gt; SetWindowPosition x y w h menuCommand<\/code><br \/>Set maxscript editor\u2018s position and size using only one call<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>MenuCommand &lt;string&gt;menuCode<\/code><br \/>Sends the passed SciTE menucode the maxscript editor to perform the corresponding SciTE action. For a quick list of available command codes, see ListMenucodes() below.<br \/>Note that the maxscript editor might not support all of those listed menucodes. For documentation of the SciTE menu codes, see the SciTE documentation <a href=\"http:\/\/www.scintilla.org\/CommandValues.html\">here<\/a>.<br \/><code>Examples:<br \/>\nmxseditor.menucommand \"IDM_FULLSCREEN\" --toggles fullscreen mode<br \/>\nmxseditor.menucommand \"IDM_TABSIZE\" --opens tabsize settings <\/code><\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>&lt;string&gt; GetConfigProperty &lt;name&gt;<\/code><\/p>\n\n\n\n<p>Returns the string based property &lt;name&gt; from the current editor configuration. Those properties get read from the various editor configuration files at 3ds Max startup ( eg. MXS_Editor.properties ). If the property does\u2018not exist, and empty string ( &#8220;&#8221; ) is returned.<\/p>\n\n\n\n<p>Example:<br \/>GetConfigProperty &#8220;font.base\u201c returns the configured base font as string value<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>&lt;int&gt; GetConfigIntProperty &lt;name&gt;<\/code><br \/>Returns the property &lt;name&gt; from the current editor configuration as integer. If the property is not an integer a value of 0 is returned. If the property does\u2018not exist -1 is returned.<\/p>\n\n\n\n<p>Example:<br \/>GetConfigIntProperty &#8220;caret.width&#8221; returns the cursor&#8217;s width in pixels<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>SetConfigProperty &lt;string&gt; &lt;string&gt;<\/code><br \/>Sets the property &lt;name&gt; from the current editor configuration to the passed string value. Please note that this is of limited use, as the new property value does not become active before 3ds Max is restarted. As the value does&#8217;nt get saved to the configuration file, it will be lost after a restart.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>ListFunctions()<\/code><br \/>Lists all SciTE internal commands which can be used to control the maxscript editor component. See the documentation or the MXSEFuncs Interface below. For a description of the individual SciTE keycommands, see the official online documentation <a href=\"http:\/\/www.scintilla.org\/CommandValues.html\">here<\/a> and <a href=\"http:\/\/www.scintilla.org\/PaneAPI.html\">here<\/a>.<\/p>\n\n\n\n<p>Note that not all commands might be implemented or supported in the maxscript editor.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>ListConstants()<\/code><br \/>Lists all SciTE internal constants and there corresponding integer value to be passed to the <strong>MXSFuncs<\/strong> and <strong>MXSProps<\/strong> interfaces. See the documentation for MXSEFuncs and MXSProps below. For a description of these constants see official Scintilla documentation<a href=\"http:\/\/www.scintilla.org\/ScintillaDoc.html\"> here<\/a>.<\/p>\n\n\n\n<p>Note that not all constants might apply or be supported in the maxscript editor.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>ListProperties()<\/code><br \/>Lists all SciTE internal properties and their signature available to query and change the current configuration and settings of the maxscript editor using the MXSProps interface. See the documentation for MXSProps below. For a description of those properties, see the official online documentation <a href=\"http:\/\/www.scintilla.org\/PaneAPI.html\">here<\/a>. Note that not all properties might apply or be supported in the maxscript editor.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>ListMenucodes()<\/code><br \/>Lists all available SciTE menu commands available which can be sent to the maxscript editor. See the documentation for the MenuCommand() method above. Note that the maxscript editor might not support all of those listed menu commands. For documentation of the SciTE menu commands, see the SciTE documentation <a href=\"http:\/\/www.scintilla.org\/CommandValues.html\">here<\/a>.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">MXSEFuncs struct<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Maxscript struct to access Scintilla&#8217;s editor functions. Entering &#8220;MXSEFuncs&#8221; in the listener reveals two public methods<\/p>\n\n\n\n<p><strong>Methods:<br \/><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>List()<\/code><br \/>Lists available SciTE internal editor commands and their parameter signature. For a description of the individual SciTE keycommands, see the official online documentation <a href=\"http:\/\/www.scintilla.org\/CommandValues.html\">here<\/a> and <a href=\"http:\/\/www.scintilla.org\/PaneAPI.html\">here<\/a>.Note that not all commands might be implemented or supported in the maxscript editor.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>Call()<\/code><br \/>Calls a SciTE internal editor keycommand. The first argument is the SciTE command name passed as string value. Addional arguments depend on the specific SciTE&#8217;s function signature. See MXSFuncs.List() below for the various command&#8217;s arguments and their data types. Command parameters and return values are past as their respective maxscript equivalents.<\/p>\n\n\n\n<p><strong>Example: <\/strong><br \/>To set the editor selected text&#8217;s background color we use MXSFuncs.List()or the <a href=\"http:\/\/www.scintilla.org\/PaneAPI.html\">SciTE online documentation<\/a> to find the command void SetSelBack(bool, color).<\/p>\n\n\n\n<p>Thus we use MXSFuncs.call() to actually execute the command in the listener:<br \/><code>mxsefuncs.call \"SetSelBack\" true new (color 100 200 30 128)<\/code><br \/>(see <a href=\"http:\/\/www.scintilla.org\/PaneAPI.html\">http:\/\/www.scintilla.org\/PaneAPI.html<\/a> for a description of the boolean parameter&#8230;)<\/p>\n\n\n\n<p>Maxscript variables can be passed by reference with commands that expect a variable to be filled with additional return data ( eg. the selected text)<\/p>\n\n\n\n<p>Example:<br \/>To receive the currently selected text we use the following mxsefuncs call<br \/><code>mxsefuncs.call \"GetSelText\" &amp;myText<\/code><br \/>The Maxscript variable myText now will contain the currently selected text<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&nbsp;<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">MXSEProps struct<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Maxscript struct to access Scintilla&#8217;s editor properties. Entering &#8220;mxseprops&#8221; in the listener reveals thw following public methods<\/p>\n\n\n\n<p><strong>Methods:<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>List()<\/code><br \/>Similar to mxsefuncs.list(), this one lists available SciTE config properties. They essentially represent the current internal settings and state of the editor component. t&#8217;s important to recognize that those are NOT properties defined in the external scintilla &#8220;options&#8221; files . See the official online documentation <a href=\"http:\/\/www.scintilla.org\/PaneAPI.html\">here<\/a>.Note that not all properties might be implemented or supported in the maxscript editor.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>Get &lt;propertynamestring&gt; [&lt;optional argument&gt;]<\/code><br \/>Returns the current value of the corresponding property. See mxseprops.List() for available properties, their return datatypes and the optional argument<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>Set &lt;propertynamestring&gt; &lt;value&gt; <\/code><br \/>Sets the current property value. See mxseprops.List() for available propertynames and their value type ( the leftmost column of the output ).<\/p>\n\n\n\n<p>Examples:<strong><br \/><\/strong>To change the current zoom level of the editor text ( default value is 0 )<br \/><code>mxseprops.set \"zoom\" 4<\/code><\/p>\n\n\n\n<p>Or to select the current editor tab&#8217;s text from character position 10 to position 150<br \/><code>mxseprops.set \"selectionstart\" 10<br \/>\nmxseprops.set \"selectionend\" 150<\/code><\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">MXSECallback struct<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Maxscript struct to access the callback framework. Callbacks hook into maxscript editor notifications. This includes events like text and editor input focus changes, autocomplete selections, mouse input events etc&#8230;<\/p>\n\n\n\n<p><strong>Methods:<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>Enable(), Disable()<\/code><br \/>Enable\/disable the callback notification functionality globally. Does not modify the list of registered callbacks, but provides a way to quickly enable and disable the whole callback mechanism.<strong><br \/><\/strong><\/p>\n\n\n\n<p><code>Set &lt;event id&gt; &lt;maxscript function&gt;<\/code><br \/>Registers the corresponding maxscript function to be called when respective notification is triggered. For a list of valid event ids, please see the List() method&#8217;s documentation below.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>Get &lt;event id&gt;<\/code><br \/>Get the maxscript function that is registered to be called by the the corresponding notification event.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>List()<\/code><br \/>List all available and supported SciTE notification event ids.<br \/>Removes the given event id from the list of registered notification events. The corresponding maxscript function will no longer be called when the notification event occurs.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>RemoveAll()<\/code><br \/>Removes all maxscript functions from the notification callbacks. Though the notification callback mechanism is essentially disabled, notification events are still processed internally. Should be followed by Disable() (see above ), to completely disable the notification callback mechanim.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>Show()<\/code><br \/>List current installed SciTE notification callback Ids and their respective maxscript function.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><code>GetCallbackData()<\/code><br \/>To be called inside a registered notification callback function. Returns an array holding 19 data elements which form a Scintilla SCNotification struct. For further documentation about this struct&#8217;s content and which fields hold valid data for a given callback, read the official documentation here. This includes exact documentation about which fields get used with which notification.<\/p>\n\n\n\n<p>The elements in the array, their corresponding SCNotification struct counterparts and the event ids which use those fields to pass data. This might be not complete, so it&#8217;s always good to experiment and check for other eventId\/valid field combos. It might be feasable to analyze the relevant SciTE source code ( SciteBase.cxx etc. ) to learn about addional callback data passing.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>idFrom: Integer, ControlID which sent the notification<\/li>\n\n\n\n<li>code: Integer, the raw SCN_* notification code ( see SCNotification struct documentation )<\/li>\n\n\n\n<li>position: Integer, character position value<br \/>used with: #StyleNeeded, #DoubleClick, #Modified, #DwellStart, #DwellEnd, #CallTipClick, #HotSpotClick, #HotSpotDoubleClick<\/li>\n\n\n\n<li>ch: Integer, character entered, used with: #CharAdded<\/li>\n\n\n\n<li>modifiers: Integer, modifiers flags, used with: #HotSpotClick, #HotSpotDoubleClick<\/li>\n\n\n\n<li>modificationType: Integer, type of modification, used with: #Modified<\/li>\n\n\n\n<li>text: Integer64, memory ADDRESS of textbuffer or undefined<br \/>for performance reasons, this field only holds the ADDRESS if there is actual text available with the notification or undefined otherwise. To retrieve the text, see GetCallbackText() below.<br \/>Used with: #Modified, #UserListSelection, #AutoCompleteSelection<\/li>\n\n\n\n<li>length: Integer, length value used by certain notifications, used with: #Modified<\/li>\n\n\n\n<li>linesAdded: Integer, number of lines added , used with: #Modified<\/li>\n\n\n\n<li>message: Integer, message code, used with: #MacroRecord<\/li>\n\n\n\n<li>wParam: Integer, wParam for message, used with: #MacroRecord<\/li>\n\n\n\n<li>lParam: Integer, lParam for message, used with: #MacroRecord<\/li>\n\n\n\n<li>line: Integer, used with: #Modified, #DoubleClick<\/li>\n\n\n\n<li>foldLevelNow: Integer, current foldlevel applied to the line, used with: #Modified<\/li>\n\n\n\n<li>foldLevelPrev: Integer, previous foldlevel for the line, used with: #Modified<\/li>\n\n\n\n<li>margin: Integer, id of the margin that was clicked on, used with: #MarginClick<\/li>\n\n\n\n<li>listType: Integer, listtype picked , used w.: #UserListSelection, #AutoCompleteSelection<\/li>\n\n\n\n<li>x: Integer, horizontal pixel position , used with: #DwellStart, #DwellEnd<\/li>\n\n\n\n<li>y: Integer, vertical pixel position, used with: #DwellStart, #DwellEnd<\/li>\n<\/ol>\n\n\n\n<p><code>GetCallbackText()<\/code><br \/>To be called inside a registered notification callback function. Retrieves and returns text passed by the current notification, if the notification supports that. Returns undefined in the other case.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I just released the first stable version of the Maxscript Editor control plugin MXSEditor. In short, it allows the Maxscript Editor to be controlled using maxscript and exposes the Editor&#8217;s internal SciTE API to maxscript. Addionally it lets you use&hellip; <\/p>\n","protected":false},"author":1,"featured_media":1282,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[24,10,6],"tags":[],"class_list":["post-2918","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-3ds-max-plugins","category-work_code","category-scriptsplugins"],"_links":{"self":[{"href":"https:\/\/www.frogsinspace.at\/index.php?rest_route=\/wp\/v2\/posts\/2918","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.frogsinspace.at\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.frogsinspace.at\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.frogsinspace.at\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.frogsinspace.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2918"}],"version-history":[{"count":42,"href":"https:\/\/www.frogsinspace.at\/index.php?rest_route=\/wp\/v2\/posts\/2918\/revisions"}],"predecessor-version":[{"id":3910,"href":"https:\/\/www.frogsinspace.at\/index.php?rest_route=\/wp\/v2\/posts\/2918\/revisions\/3910"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.frogsinspace.at\/index.php?rest_route=\/wp\/v2\/media\/1282"}],"wp:attachment":[{"href":"https:\/\/www.frogsinspace.at\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2918"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.frogsinspace.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2918"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.frogsinspace.at\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2918"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}