Date: 06-25-2008 Subject: PATCH RELEASE 9.2D Runtime Files These release notes pertain to the following programs or files: PLBCLI 9.2D 25 Jun 2008 9,2,4,500 New PLBCLIENT 9.2D 25 Jun 2008 9,2,4,500 PLBCLINET 9.2D 25 Jun 2008 9,2,4,500 PLBCON 9.2D 25 Jun 2008 9,2,4,500 PLBDSIGN 9.2D 25 Jun 2008 9,2,4,500 PLBNET 9.2D 25 Jun 2008 9,2,4,500 PLBRUN 9.2D 25 Jun 2008 9,2,4,500 New PLBSERVE 9.2D 25 Jun 2008 9,2,4,500 PLBWIN 9.2D 25 Jun 2008 9,2,4,500 SUNAAMDX 9.2D 25 Jun 2008 9,2,4,500 SUNINDEX 9.2D 25 Jun 2008 9,2,4,500 SUNSORT 9.2D 25 Jun 2008 9,2,4,500 ODSBAC32.DLL 9.2C 25 Jun 2008 SA_DLL32.DLL 9.2D 25 Jun 2008 9,2,4,500 PLBCMP 9.2D 25 Jun 2008 PLBEQU.INC 9.2D 25 Jun 2008 SUNED.PLC 9.2D 25 Jun 2008 PLCINFO.PLC 9.2D 25 Jun 2008 *============================================================================== Notes for some NEW Items: - Added two new products referenced as 'Plbrun' and 'Plbcli'. These are libraries that are intended to be linked with .NET objects that are required to be linked directly into the calling program. *============================================================================== Notes for WARNINGS: - When the PLBWIN/PLBNET runtimes are used with a 'plbwin.exe.manifest' or 'plbnet.exe.manifest', then the ANIMATE may not be repainted by the Windows OS. This issue is caused by the manifest usage beyond the control of these runtimes. - The processing for a FORMLOAD of an Objects-Only PLF has been modified to generate a LOAD event as implemented for the PLB Designer. *============================================================================== Notes for DOCUMENTATION: - In the PL/B Language Reference manual, change the note number (11.) in the 'Functions' section to read as follows: Notes: 11. The TRAP and TRAPCLR instructions can be compiled and executed within a FUNCTION. However, the destination label for the TRAP instruction CANNOT be a label that is local within a FUNCTION. Also, notice that a EXCEPTSET event always takes precedent over a TRAP event. - In the PL/B Language Reference manual, remove the TRAP and TRAPCLR instructions from the note number (12.) for the 'Functions' section. - In the PL/B Language Reference Manual for the RADIO object descriptions. The Note (5.) needs to be changed as follows: Note 5. "The runtime will only perform the default action of changing the state of an individual RADIO if there is no user code associated with the object during activation. If a RADIO is a member of a radio set, the runtime performs the state change action if the $GOTFOCUS event is not registered using the EVENTREGISTER instruction." *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBRUN Solution - The PLBRUN product is released as a Microsoft Visual Studio 2005 solution named 'plbrun.sln' that includes a PLBNET library and the required source modules that can be used to create a PLBNET runtime. The PLBRUN solution requires the Microsoft Visual Studio 2005 or later to allow a PLBNET runtime to be compiled by an end user. Note: 1. Licensing is the responsibility of any Assembly that is loaded by the runtime. The runtime has implemented licensing as defined for a License Manager/Provider using standard Microsoft guidelines. Using these guidelines the following simplifies the expected process: 1a. The .NET Assembly provides the required licensing data when the Assembly is loaded in design mode. A .NET Assembly is load in the PLB Designer in a design mode. 1b. The PLB Designer/runtime stores the license information in a PLF form file. 1c. As the PLF form file is compiled into a PLC program, the licensing information is saved into the PLC program. 1d. When a PLF form is loaded by a PLC program, the .NET Assembly is loaded in a runtime mode. As the .NET Assembly is loaded, the Assembly is expected to retrieve the licensing data as it was stored into the PLF. At this time, the .NET Assembly can validate the licensing information. 2. The Licensing process as described in step (1.) is implemented by the majority of third party Assemblies. However, there are some third party assemblies that shortcut the normal Microsoft guidelines and require direct access to License data that is imbedded into the execution module of an application that loads the Assembly. This shortcut approach by some third party Assemblies requires that the Licensing data must be imbedded into the 'plbrun.exe' runtime. The PLBRUN solution is being provided to allow the Licensing data to be imbedded into a 'plbrun.exe' runtime because a .NET third party Assembly uses the shortcut approach to access the Licensing data as an imbedded license resource. 3. Compiling the PLBRUN Solution without a license: 3a. Install the PLBRUN files into any target directory using the Sunbelt Plbrun Installation procedure. 3b. Start the Microsoft Visual Studio 2005. 3c. Open the 'plbrun.sln' solution from the target directory. 3d. Enter one of the following build/rebuild 'plbrun.sln': (1) 'F7' to build the 'plbrun.sln' solution. or (2) 'Ctrl+Alt+F7' to rebuild the 'plbrun.sln' solution. 3e. The final execution module named 'plbrun.exe' can be found in the 'release' sub-directory in the target directory. The final execution module is named 'plbrun.exe'. 4. Compiling the PLBRUN Solution with a third party .NET assembly license. 4a. Install the PLBRUN files into any target directory using the Sunbelt Plbrun Installation procedure. 4b. Start the Microsoft Visual Studio 2005. 4c. Open the 'plbrun.sln' solution from the target directory. 4d. In the Visual Studio, under the Menu\Project entry, select the 'plbrun properties'. 4e. Select 'Common Properties\References'. 4f. Select the 'Add New Reference' followed by the 'Browse' tab. 4g. Select the third party .NET Assembly to be referenced when building the 'plbrun.sln' solution. 4h. Exit the 'plbrun properties'. 4i. In the Visual Studio, under the Menu\Project entry, select the 'Add existing item' entry. Select the license '.licx' file that provides the license information required for the third party .NET Assembly that was referenced in step (4g.). 4j. Enter one of the following build/rebuild 'plbrun.sln': (1) 'F7' to build the 'plbrun.sln' solution. or (2) 'Ctrl+Alt+F7' to rebuild the 'plbrun.sln' solution. 4k. The final execution module named 'plbrun.exe' can be found in the 'release' sub-directory in the target directory. The final execution module is named 'plbrun.exe'. ------------------------------------------------------------------------------- PLBCLI Solution - The PLBCLI product is released as a Microsoft Visual Studio 2005 solution named 'plbcli.sln' that includes a PLBCLINET library and the required source modules that can be used to create a PLBCLINET client. The PLBCLI solution requires the Microsoft Visual Studio 2005 or later to allow a PLBCLI client to be compiled by an end user. Note: 1. The description and procedures as provided for the PLBRUN solution are the same as required for the PBLCLI solution. See the PLBRUN solution section. 2. The PLBCLI solution can be used to create a 'plbcli.exe' that is a 'plbclinet.exe' client that has imbedded licensing data. ------------------------------------------------------------------------------- PLBSERVE - Updated the help options usage screen. - Corrected a problem where a GUI object was not being returned from a FUNCTION under PLBSERVE. - Corrected a problem where a CREATE for a NETOBJECT would fail if the size of the message data for any parameters required the message buffers to be reallocated to a larger size. The failing symptom for this problem would cause the PLBCLINET client to terminate prematurely. ------------------------------------------------------------------------------- PLBCLIENT, PLBCLINET - Modified the Windows client modules to detect a 9.2D or later PLBSERVE Unix runtime that has the PLB_ANSI_OEM keyword being used. In the case, the client module performs the ANSI to OEM translation for a KEYIN instruction when input translation is required. This change is being done because ANSI to OEM translation is not available on a Unix platform. ------------------------------------------------------------------------------- PLBSERVE, PLBCLIENT, PLBCLICON, PLBCLINET - Modified the application server messages to allow the default runnames for the PLF form objects to be sent from the PLBSERVE server and loaded by the client modules. This modification corrects a problem where the default PLF object names could not be retrieved using the RUNNAME property. Note: 1. The modifications for this problem can only take affect when a 9.2D or later version of both the PLBSERVE server and client is used. ------------------------------------------------------------------------------- PLB(UNIX), PLBSERVE(UNIX) - Modified the FINDFILE instruction to execute more efficiently when the input search file does not contain any wildcard characters. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Corrected a problem where the 'PLB_ANSI_OEM=CONSOLE' keyword did not work for a KEYIN under the PLBWIN/PLBNET runtimes. - Corrected a problem where the PATH EXIST was giving an OVER error when the last character of a valid directory name was a path delimiter. This problem was caused by changes in the 9.2 release. - Made a change to work around a Windows OS problem that could cause a single line of invalid pixel data to appear at the top of a TOOLBAR in the PLB Designer. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - The PL/B runtimes have been modified to include a set of operation counters that will be incremented when an operation is executed. The counters are 64 bit values that continual increment as operations are executed. If the counter overflows, then the counter value roll over to a zero value and continue incrementing. As a program executes, then given counters is always greater than or equal to the last value unless there is a rollover condition. The counters have been added to specific PL/B instructions or other runtime operations that provide useful information. The GETMODE instruction has been modified to support three new keywords as follows: ALLCOUNTERS={svar} When this keyword is executed, then the current runtime counter values are returned in the {svar} variable. ONECOUNTER={svar} This keyword can be used to retrieve one or more runtime counters. In this case, the user program must specify the runtime counter(s) in a comma-delimited string when the keyword is executed. The input delimited string is overwritten with the results for the runtime counters requested. MAXCOUNTERS={nvar} This keyword returns the maximum number of runtime counters supported by the runtime. The {nvar} value in this case identifies the maximum number of runtime counters that are returned by the ALLCOUNTERS keyword. The SETMODE instruction has been modified to support a new keyword as follows: CLEARCOUNTERS When this keyword is executed in a SETMODE instruction, then all of the runtime counters are immediately reset to a value of zero. ------------------------------------------------------------------------- The GETMODE instruction has been changed to support a new keyword named 'ALLCOUNTERS={svar}' that returns all of the counters in a DIM variable Format: GETMODE *ALLCOUNTERS={svar} Where: {svar} - DIM variable that is used to return the runtime counter values. Flags: EOS Note: 1. The EOS flag is set if the runtime counter data is too large to fit into the {svar} variable and results in truncated or lost data. 2. The counter data stored into the {svar} variable is comma delimited counter values that includes a counter name/counter value combination with a comma character ',' used as a delimiter. The format of the {svar} data is a follows: CounterName={dnum}[,CounterName1={dnum}...] Example of Returned Data: "OPENI=100,READI=10,EXECUTE=1000,FILEPI=50000..." 3. The end user application can use the GETMODE *ALLCOUNTERS keyword to retrieve the counters at any time during the execution of a program. 4. The runtime counters are implemented for each PL/B program instance that is executed. The runtime does not count operations for multiple processes and place the results into a single counter. Since the 'fork' causes a separate process to be invoked, the end user program can use the 'SETMODE *CLEARCOUNTERS' keyword to optionally zero the counters for a 'fork' process. A 'fork' process has runtime counters separate from the parent process and therefore does not cause a conflict. 5. The end user application is responsible for retrieving, saving, and analyzing the runtime counter values. 6. The end user program can use the EXPLODE instruction to extract the counter data from the {svar} data stream. 7. WARNING: The end user application MUST write a generic routine to extract the counter data because order of the counter Name/Value combinations may change for later releases. 8. For a 64 bit counter value, the largest required FORM variable size for any given counter value is 20 characters. 9. The runtime counters are always active and can not be disabled. However, the 'SETMODE *CLEARCOUNTERS' keyword can be used to zero all of the runtime counters at any point within an end user application. 10. The counters that are maintained by the runtime are as follows: Counter Name Operation Comments BATCH INSTRUCTION CLOSE CLOSE FILE CLOSEI CLOSE IFILE CLOSEA CLOSE AFILE DELETE DELETE FILE DELETEI DELETE IFILE DELETEDI DELETED IFILE DELETEDKI DELETEDK IFILE DELETEKI DELETEK IFILE DELETEA DELETE AFILE DELETEKA DELETEK AFILE ERASE INSTRUCTION EXECUTE INSTRUCTION FILEPI INSTRUCTION FINDDIR INSTRUCTION FINDFILE INSTRUCTION FLUSH INSTRUCTION FPOSIT FPOSIT FILE/AFILE/IFILE FPOSITA FPOSITA AFILE INSERTI INSERT IFILE INSERTA INSERT AFILE OPEN OPEN FILE OPENI OPEN IFILE OPENA OPEN AFILE OPENF OPEN FILELIST POSITEOF POSITEOF FILE/AFILE/IFILE PREPARE PREPARE FILE PREPAREI PREPARE IFILE PREPAREA PREPARE AFILE READ READ FILE READLK READLK FILE READI READ IFILE READKEY READKEY IFILE READKP READKP IFILE READKPLK READKPLK IFILE READKSLK READKSLK IFILE READKS READKS IFILE READLKI READLK IFILE READA READ AFILE READLKA READLK AFILE READKG READKG AFILE READKGLK READKGLK AFILE READKGP READKGP AFILE READKGPLK READKGPLK AFILE RENAME INSTRUCTION REPOSIT REPOSIT FILE REPOSITA REPOSITA AFILE UNLOCK INSTRUCTION UPDATE UPDATE FILE UPDATETAB UPDATETAB FILE UPDATEI UPDATE IFILE UPDATEA UPDATE AFILE WEOF WEOF FILE WRITE WRITE FILE WRITETAB WRITETAB FILE WRITEI WRITE IFILE WRITEA WRITE AFILE CHAIN CHAIN INSTRUCTION FORK FORK INSTRUCTION ROLLOUT ROLLOUT INSTRUCTION SPLOPEN SPLOPEN INSTRUCTION SPLOPENPF SPLOPEN PFILE SPLCLOSEPF SPLCLOSE PFILE SPLCLOSE INSTRUCTION PRINTPF PRINT PFILE PRINTSPL PRINT (SPLOPEN) PRINT PRINT RELJOB RELJOB INSTRUCTION RELEASE RELEASE INSTRUCTION ------------------------------------------------------------------------- The GETMODE instruction has been changed to support a new keyword named 'ONECOUNTER={svar}' that return returns one or more runtime counters. This keyword requires that the input {svar} variable must contain the name of the runtime counter or more than one runtime counter in a comma-delimited format. The current value of the specified runtime counter(s) is returned in the {svar} variable. Format: GETMODE *ONECOUNTER={svar} Where: {svar} - DIM variable that is used to return the runtime counter value(s). Flags: EOS Note: 1. The EOS flag is set if the runtime counter data is too large to fit into the {svar} variable and results in truncated or lost data. 2. The {svar} variable must contain the name or names of the runtime counters that are to be retrieved and returned. The format the input counter names is as follows: "CounterName[,CounterName1[...]]" 3. All of the notes as documented for the 'ALLCOUNTERS' keyword apply to the 'ONECOUNTER' keyword. ------------------------------------------------------------------------- The GETMODE instruction has been modified to support the MAXCOUNTERS keyword. This keyword returns the number of runtime counters that are implemented. Format: GETMODE *MAXCOUNTERS={nvar} Where: {nvar} - Numeric variable (FORM or INTEGER) that receives the maximum number of counters that is returned by the ALLCOUNTERS keyword. Flags: ZERO, OVER Note: 1. The number of counters implemented by the runtime may change for later runtime releases. 2. The MAXCOUNTERS value can be used to calculate the size of the DIM required to store all of the counters with a maximum 64-bit value. The DIM size can be calculated as follows: DIMSIZE = ( maxcount * 42 ) 20 byte Counter Name Maximum 20 byte Counter Value Maximum 1 byte equal sign character 1 byte comma delimiter character 3. The MAXCOUNTERS value can be used to determine the number of loops to be executed to extract all of the counters from the ALLCOUNTERS data stream. ------------------------------------------------------------------------- The SETMODE instruction has been changed to support a new keyword named 'CLEARCOUNTERS'. When this SETMODE keyword is executed, the runtime counters are immediately reset to a value of zero. Format: SETMODE *CLEARCOUNTERS Note: 1. The CLEARCOUNTERS keyword can be executed at any point in a program. - Modified the runtimes to eliminate the restriction that prevented a trap event from being taken from within the scope of a PL/B FUNCTION. With this change, a trap event does occur when the offending event action is detected in a FUNCTION scope. - Modified the GETFILE XFILE instruction to support a new keyword named 'XMLSIZE='. The XMLSIZE keyword returns the xml data size required for a DIM variable to receive the data for the XMLDATA keyword. - Modified the GETFILE XFILE instruction to support a new keyword named 'SCHEMASIZE='. The SCHEMASIZE keyword returns the schema data size required for a DIM variable to receive the data for the SCHEMADATA keyword. - Corrected a problem that caused a M08/Subcode 39 error when an email server returned the login responses as multiple messages. - Corrected a GPF error that would occur for an OPEN XFILE after a previous OPEN XFILE error had occurred using the same XFILE variable. - Corrected a problem where a WRITE FILE operation could hang in an indefinite loop writing blanks that would fill up a disk. This problem could occur when multiple processes were writing to the same text file and one process attempts to extend the file after the other process has extended the file. - Corrected a problem where the CLOCK INI instruction was not truncating trailing blank characters for the data string returned for a specified keyword. - Modified the processing for writing a XML file to ignore element fields that are empty in records that are in sub-recordsets when the XmlDropEmptyFields open mode is being used. This corrects an I83 subcode 14 error that occurs for an empty XML tag reference. Example: RPTOPTS XFILE OBJECT XFILE option integer 4,"0x00000400" TEXT dim 30 SEQ FORM "-1" zero form "0" empty dim 10 PREP RPTOPTS,"text.xml","root",mode=option move "tag",TEXT WRITE RPTOPTS,SEQ;*LL,@TEXT=OBJECT; WRITE OBJECT,SEQ;*LL,Text=empty CLOSE RPTOPTS OPEN RPTOPTS,"text.xml" READ RPTOPTS,SEQ;@TEXT=OBJECT READ OBJECT,SEQ;Text=empty CLOSE RPTOPTS ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified the 'CLOCK SYSPORT' instruction to use an alternate methods to retrieve the MAC Address if the primary method fails. - Modified the LISTVIEW LoadCsvFile method to support back to back double quote characters as a means of forcing a single double quote character into the output column data string when double quote option mode is being used. - Corrected a problem where the height and/or width of an EDITTEXT or EDITNUMBER object could change when the following property state/action was set/performed: 1. The object used a flat fixed border. 2. The object was using the DOCK property. 3. The STYLE property was changed. - Corrected a problem where the EDITFOCUSBGCOLOR was not being reset by a kill focus when it was used for an EDITTEXT on a TABCONTROL object and a new tab selection was made. This change also applies to the EDITNUMBER and RICHEDITTEXT objects. - Corrected a problem where the IMAGELIST AddLoadImage and AddLoadIcon methods did not find the specified library/OCX. This caused the methods to return a error value of '2'. - Corrected a problem where a MENU object on a form was not using the ENABLED property during a CREATE operation. This problem was preventing a MENU object from being created with an initial disabled state. - Modified the drawing for a Progress object to prevent drawing a border when the object is too small to be visible. - Corrected a problem where the RemovePanel method for a STATUSBAR object might not remove the last panel text. - Corrected a problem where a GROUPBOX or STATTEXT with objects on top of them would not be refreshed properly. ------------------------------------------------------------------------------- PLBNET, PLBCLINET - Modified the ASSEMBLY property for the NETOBJECT and NETCONTROL objects to search for an assembly file when there is no path and the '.dll' extension is specified. In this case, the location of the assembly file is determined in the following sequence: 1. Directory where PLBNET/PLBCLINET is loaded. 2. The current directory. 3. The system directory. 4. The 16-bit system directory. 5. The Windows directory. 6. A directory as specified by the PATH environment variable. - Modified the .NET license processing to support the design and runtime modes. With this change, the licensing data can be properly stored and retrieved from a PLF form that is compiled into a PLC program for a third party Assembly. See the licensing description in the 'plbrun' solution. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to allow the TRAP and TRAPCLR instructions to be compiled in the scope between the FUNCTION and FUNCTIONEND instructions. **WARNING*** The destination label for the TRAP instruction CANNOT be a label that is local to the scope between the FUNCTION and FUNCTIONEND instructions. - Added the XMLSIZE and SCHEMASIZE keywords for the GETFILE XFILE instruction. - Corrected a problem where the %STOREPLF compiler directive was not storing PLF label in the expected output. - Corrected a problem where a SHUTDOWN instruction would give an invalid compilation error after a GUI object method was processed. This problem was caused by a change in release 9.2C. - Corrected a problem where the X option might prevent the ZH option from taking affect. - Corrected a problem where the GIVING variable for a method for a GUI object was generating invalid instruction code when a DIM variable with a length of 26 characters was used. ------------------------------------------------------------------------------- PLBDSIGN - Corrected a problem where the height and/or width of an EDITTEXT or EDITNUMBER object could change when the following property state/action was set/performed: 1. The object used a flat fixed border. 2. The object was using the DOCK property. 3. The BORDERSTYLE property was changed. - Modified the zorder processing sequence in the designer to work around a Windows OS problem that could cause a GUI object to appear under a window when it should have appeared on top. - Corrected a problem where an object was being misplaced when the object existed on a PANEL and a property was changed that required the object to be recreated. This problem was originally reported when an EDITTEXT objected on top of a PANEL and the ALIGNMENT property was changed. - Corrected a problem that was caused by a PICT object that overflowed a color table buffer as a PLF form was loaded. This overflow corrupted the property tables in the designer that would then cause indeterminate execution for all of the objects on the form. ------------------------------------------------------------------------------- SUNAAMDX, SUNINDEX, SUNSORT - Corrected a problem where the trailing blanks were not being truncated for the data string retrieved for a keyword in an INI file. This correction applies to SUNAAMDX, SUNINDEX, and SUNSORT when an INI file is used. ------------------------------------------------------------------------------- PLBEQU.INC - Added conditional compiler directives for $TRUE/$FALSE to eliminate duplicate errors with user equates. ------------------------------------------------------------------------------- ODSBAC32.DLL - Released due to changes in file IO subsystem. ------------------------------------------------------------------------------- SA_DLL32.DLL - Released due to changes in file IO subsystem. ------------------------------------------------------------------------------- SUNED.PLC - Modified to handle files larger 100000 records. ------------------------------------------------------------------------------- PLCINFO.PLC - New utility to scan a folder and optionally sub folders for all .PLC files and report various pieces of information, such as Compiled as Name, Compiled Date, Compiler Version, Code Size, Data Size, Common Size, Global Size, etc. ------------------------------------------------------------------------------- SUNIDE.PLC - Corrected an untrapped error that could occur when a "Find In Files" was done on a nested folder that contained more than 200 sub-folders or the nesting level reached more than 16 levels below the starting location. - Corrected an F04 bug that could occur when opening an empty project file. - Modify tab processing so window activation doesn't flicker. - Modified resize processing to reduce flicker. - Corrected a problem where selecting "New Designer" from the tools menu could cause an "Unable To Open" form error. ------------------------------------------------------------------------------- DBGIFACE.PLC - Corrected a bug where "Watch Variable" may not display a string with a single quote character property. - Modified to remember the variables in the watch window so they are restored the next time the program is debugged. - Corrected initial install problem where the colors could be wrong making it hard to see. - Corrected a performance issue where stepping may be slow when break points are set. ------------------------------------------------------------------------------- EDITOR.PLC - Corrected an unexpected error message while updating syntax help tooltip. - Corrected variable label select on double click problem that could occur on the variable declaration and if the variable contained special characters, ie: aaa$zzz. - Modified the unexpected error handling to send an email directly instead of asking the user to do it. Also added the call stack to the error report to aid in tracking the cause of an error. - Corrected a bug in the printing logic where the last line would not be printed. - Corrected an F04 error that could occur when a designer hot key was pressed while focus was in the code window. - Corrected a potential untrapped spool error that can occur if a print error happens on a page boundary. ------------------------------------------------------------------------------- DESIGNER.PLC - The designer no longer backs up the form during export operations. - Corrected the marking end of event routines during save. - Corrected an issue preventing problem replication file from being sent. - Corrected support of the Windows System Colors in the property window. - Corrected pasting of objects using the shortcut menus. - Corrected object selection logic for the repeat cut function. - Corrected an issue with multiple form opens and forms with TabPanels. - Corrected issues with pasting panels and child objects. - Corrected an issue with setting the Alignment property for EditNumber objects. - Corrected an issue with editing TabPanel properties. - The reporting function has been enhanced to allow snapshots to be generated at anytime using the F11 key. - Modified the tabpanel editor to display panels in the sequence defined by the TabControl's tablabel property. - Corrected issues with changing the order of TabPanels in a TabControl. - Corrected an issue of renaming a TabPanel using the ObjectTree and Properties window as opposed to the TabPanel Editor. - Improved the Open performance by reducing the calls to the DrawGrid function. - Modified the Fatal Error logic to allow the IDE to close the designer if running as a loadmod. - Added a check to prevent attempted modification of the height property for comboboxes with a ComboStyle property other than $Simple. - Added checks to prevent attempted modification of the top, left, height and width properties as appropriate for Docked objects. - Added the editor version information to the About form and the error report. - Modified the FormMove and FormResize functions to not change the selected object to the form. - Enhanced the checking of passed file names when called as a DLL from the IDE. - Corrected an occasional positioning error of the shortcut menu. - Modified the command line processing logic to be more informative. - Added the command line to the error report. - Added a Send Replication Package function to the Tools menu. - Corrected and enhanced the ApplyObjectPrefix function. - Corrected modification of tooltip text during tabid renumbering. - Modified Radio buttons to allow setting of the value property independent of any grouping. - Added special handling for the Checked property of an EditDateTime since it can only be modified if the ShowCheckbox property is enabled. - Added code to preserve the Checked property when the Text property is changed on an EditDateTime control. - Added DecimalImplied (DPI) property to EditNumber objects. - Corrected issues in adding tab panels to existing tab control with tab panels. - Modified the Tabpanel logic to open the form with the tabpanel visible during design as the first selected panel at runtime. - Corrected an issue regarding the renaming of tabpanels. - Corrected the ini file logic regarding .Net objects when running under plbwin. - Added logic to remove designer added tabcontrol change code for objects with tabpanels. - Corrected values reported in the error report. - Corrected an issue with loading events with external labels. - Corrected an issue regarding selection and moving of a panel parented by a tab panel. - Disabled EditFocusBGColor within the designer to prevent issues with GETPROP BGColor. - Corrected issue during initialization of listviews with more than nine columns. - Corrected an issue with the scroll size of the .Net toolbox. - Added a warning alert regarding the load event when saving objects-only forms and designer code is generated. - Added housekeeping code for designer.res work file. - Modified the storage of font sizes to support fractional sizes. - Corrected an issue regarding pasting objects between tabpanels. - Corrected the TabPanelInsert function. - Changed Test options to generate a complete listings instead of errors only. - Modified the Test function to perform a SaveAs when the form has been modified. - Corrected errors in the generation of code for TabPanels. - Modified the behavior to always allow saving regardless of the file modification status. - Modified Copy function to not copy event code.