Date: 08-09-2010 Subject: PATCH RELEASE 9.4C Runtime Files These release notes pertain to the following programs or files: PLBCLICON 9.4C 09 Aug 2010 9,4,3,500 PLBCLIENT 9.4C 09 Aug 2010 9,4,3,500 PLBCLINET 9.4C 09 Aug 2010 9,4,3,500 PLBCON 9.4C 09 Aug 2010 9,4,3,500 PLBCONET 9.4C 09 Aug 2010 9,4,3,500 PLBCLI 9.4C 09 Aug 2010 9,4,3,600 PLBDSIGN 9.4C 09 Aug 2010 9,4,3,500 (Depricated) PLBRUN 9.4C 09 Aug 2010 9,4,3,600 PLBNET 9.4C 09 Aug 2010 9,4,3,500 PLBSERVE 9.4C 09 Aug 2010 9,4,3,500 PLBSERVET 9.4C 09 Aug 2010 9,4,3,500 (Threaded Server) PLBWIN 9.4C 09 Aug 2010 9,4,3,500 PLBNETSUP.DLL 9.4C 09 Aug 2010 9,4,3,500 Required for PLBNET PLBWSEC.DLL 9.4C 09 Aug 2010 9,4,3,500 Req'd PLBWIN/PLBNET DBEXPLORER.PLC 9.4C 09 Aug 2010 DESIGNER.PLC 9.4C 09 Aug 2010 EDITOR.PLC 9.4C 09 Aug 2010 PLBCMP.PLC 9.4C 09 Aug 2010 PROFILER.PLC 9.4C 09 Aug 2010 SCHEMAEDITOR.PLC 9.4C 09 Aug 2010 SUNIDE.PLC 9.4C 09 Aug 2010 SUNCS21.OCX 9.4C 09 Aug 2010 ADMEQU.INC 9.4C 09 Aug 2010 PLBEQU.INC 9.4C 09 Aug 2010 PLBMETH.INC 9.4C 09 Aug 2010 ACLOCK.PLS Updated Demo Program ANSWER.PLS Updated Demo Program AUTOEXP.PLS Updated Demo Program CAL.PLS Updated Demo Program COMFLCLI.PLS Replaces COMREAD/COMWRITE COMFLSRV.PLS Replaces COMREAD/COMWRITE EDITTEXT.PLS Updated Demo Program GETINFO.PLS Updated Demo Program LVSORT.PLS Updated Demo Program MASTER.PLS Updated Demo Program *============================================================================== Notes for DOCUMENTATION: - To support MAILSEND changes, a new M19 error has been added that identifies that an error using the *SUNDM keyword has occurred. In addition, new subcode error values have been added as follows: 89 - Unable to logon to a Data Manager. 90 - Invalid Data Manager response to the MAILSEND execution. 91 - MAILSEND instruction timed out while waiting for instruction execution a Data Manager. The maximum timeout is 180 seconds. 92 - The Data Manager does not support the MAILSEND instruction. 93 - The or parameter substitution failed. - Change the RESIZE Property description as follows: Change the basic description: "The RESIZE property is used to enable/disable the automatic resizing capability that can be applied to a PICT object." Change the Note (2.) as follows: Value Keyword The picture behavior affected... 0 $OFF the automatic picture resizing is disabled. 1 $ON the automatic picture resizing is enabled. (default) Add the Note (3.) as follows: 3. The mode for automatically resizing a picture is controlled by the AUTOSCALE property setting. If the RESIZE property is set to $OFF, the automatic resizing of a picture is disabled. - Change the AUTOZOOM Property description as follows: Change the Note (2.) as follows: 2. When the AUTOZOOM property is set to $ON, this enables a mode for the picture that allows an end-user to cause the picture to be zoomed using mouse click actions. If the end-user double clicks in the bounds of a picture, this causes a zooming action for the picture. If the end-user does a mouse down/hold action to draw a rectangle in the picture and then double clicks the newly drawn rectangle, this causes the zooming action to show the contents in the bounds of the rectangle for the picture. - Change the basic description for the LISTVIEW SetColResizeFlag method to read as follows: "The SetColResizeFlag method stores a value that indicates whether a specified column in a LISTVIEW object can be resized by an end-user's sizing action." - Change the EDITTYPE description for the $DECIMAL type to read as follows: Value Keyword Input is... 3 $DECIMAL restricted to numeric digits ( 0 through 9 ), minus sign (-) and decimal point (.). When this edit type is being used and the PLB_LOCALE is ON, any decimal point (.) is translated to the locale decimal point as data is moved into an EDITTEXT. Likewise, any locale decimal point is translated to a decimal point (.) as data is extracted from an EDITTEXT. - In the PL/B Language Reference manual under the note (4.) for the ADMGETINFO instruction, change the following description: "$ADMITEMSRVCHILDCNT Current number of licenses in use at the server." *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBDSIGN - The old style PLBDSIGN is no longer being updated. No new features, methods, properties or objects will be added to this product. Major bugs will be corrected as we are able. Consideration should be made to migrate to the new style DESIGNER if you have not already done so. ------------------------------------------------------------------------------- PLBSERVE - The Application Server has been modified to support HTTP capabilities that allow GPF information to be posted to a Web Server. When transferring the GPF information, this data is compressed and encrypted to provide secure communications with the target Web Server. In addition, the Sunbelt CGI utility named 'suncgi' must be installed at the target Web Server to process the HTTP communications data as received from the Application Server. In addition, a new command line option named '-ht' has been added for the Application Server. When the '-ht' command line option is executed, a test HTTP message is posted to Web Server configured for the Application Server. In this case, a file named 'test.txt' is transferred to the Web Server. This command line option is used to verify that the HTTP communications is working as expected. The ADMIN_SRVNAME keyword string is placed in the 'test.txt' file along with a date and time to give an accord identification for the test data. The following keywords are optional. When used, they can be placed in the [Environment] section of the Application Server '.ini' configuration file. These keywords can be used to configure for situations that may require special setup to access a Web Server that is used to collect the GPF data using the HTTP interface. ADMIN_HTTP_ADDR={i/p address}[:{port}] This keyword is optional. If it is not specified, the default 'www.sunbelt-plb.com' URL is used to access the Web Server. This keyword is only needed to specify the URL/IP address for special configurations where the default URL can not be used. For example, this keyword may be required when a proxy server is used by an end-user. The default port number is 80. However, the optional {port} can be specified with a ':' character delimiter to set a port number other than the default. ADMIN_HTTP_COMMAND={command} This keyword is optional. If this keyword is not specified, the default command 'http://www.sunbelt-plb.com/cgi-bin/suncgi.exe' is used to access the Web Server for transferring the GPF data. Normally, this keyword is not required to access the Sunbelt Web Server. This keyword is only need for special situations where the default command can not be used. ADMIN_REPORT_GPF=[ON|OFF] This keyword is used to enable the GPF logging support. If this keyword is not specified, the default is the same as OFF. Example of PLBSERVE INI entries: [Environment] ADMIN_REPORT_GPF=ON ADMIN_HTTP_ADDR=192.168.0.102 ADMIN_HTTP_COMMAND=/suncgi.exe - The Application Server has been modified to allow administrative email messages to be sent for specialized events that occur during the execution of the server. This capability has been implemented in the ADMIN support services to provide maximum flexibility and usage in the Sunbelt products. The end-user can enable the ADMIN email functionality by setting keywords in the Application Server configuration file. Appropriate entries are logged in the server log file that reflect actions executed by the server for email event processing. In addition, a new command line option named '-mt' has been added for the Application Server. When the '-mt' command line option is executed, the Application Server mail parameters are reloaded and a test email message is sent if the email configuration is valid. The following ADMIN mail keywords can be put in the [Environment] section of the Application Server '.ini' configuration file. ***Required Keywords*** ADMIN_MAIL={on|off} ;Required This keyword is required to enable/disable the administrative email services. If the keyword is not specified, the default action is the same as being set to 'off'. ADMIN_MAIL_OUT={out} ;Required This keyword is required to allow an administrative email to be sent for a Application Server. The {out} string for this keyword specifies the SMTP outgoing mail server name (URL) or IP address. ADMIN_MAIL_TO={to} ;Required This keyword is required to allow an administrative email to be sent for a Application Server. The {to} string for this keyword specifies the email address(es) of the recipients. ADMIN_MAIL_FROM={from} ;Required This keyword is required to allow an administrative email to be sent for a Application Server. The {from} string for this keyword specifies a single email address of the sender. ***Optional Email Event Keywords*** ADMIN_MAIL_MAXUSERS=[off] ;Configurable email Event By default this administrative email event is enabled for the Application Server. If this keyword is set to 'off', this email event is disabled. When this email event is enabled, an email is sent that identifies when the maximum number of user connections has been exceeded. ADMIN_MAIL_STARTUP=[on] ;Configurable email Event By default this administrative email event is disabled for the Application Server. If this keyword is set to 'on', this email event is enabled. When this email event is enabled, an email is sent that identifies when the Application Server enters the startup phase that accepts user logons. ADMIN_MAIL_SHUTDOWN=[on] ;Configurable email Event By default this administrative email event is disabled for the Application Server. If this keyword is set to 'on', this email event is enabled. When this email event is enabled, an email is sent that identifies when the Application Server main logon process is terminated. ***Optional Keywords*** ADMIN_MAIL_SUBJECT={subject} ;Optional If this keyword is not specified, a default email subject is sent as follows: "SunDm Administrator Message" When the ADMIN_MAIL_SUBJECT keyword is specified, the {subject} string is sent as the subject for the email message. The {subject} string length is limited to 200 bytes. If the {subject} string contains a '%s' substitution parameter, the '%s' is replaced with the body text being sent for the message. The intended use of the '%s' is to allow the subject for the email to give the specific reason for the server event without having to open the email body. ADMIN_MAIL_BCC={bcc} ;Optional This optional keyword specifies the email address or addresses of the Blind Copy recipients. The {bcc} string may contain one or more recipient addresses. If more than one email recipient is specified, a comma separates the email addresses. ADMIN_MAIL_CC={cc} ;Optional This optional keyword specifies the email address or addresses of the Copy recipients. The {cc} string may contain one or more recipient addresses. If more than one email recipient is specified, a comma separates the email addresses. ADMIN_MAIL_USER={user} ;Optional This optional keyword specifies the username used for the login to the {out} email server specified by the ADMIN_MAIL_OUT keyword. ADMIN_MAIL_PASSWORD={password} ;Optional This optional keyword specifies the password for the login to the {out} email server specified by the ADMIN_MAIL_OUT keyword. ADMIN_MAIL_PORT={port} ;Optional This optional keyword specifies the port number used when logging on to the {out} email server specified by the ADMIN_MAIL_OUT keyword. If this keyword is not specified, the default port number of twenty-five (25) is used. The {port} string must be specified as decimal digits that identify the email server port number to be used. ADMIN_MAIL_SSL={on|off} ;Optional This optional keyword enables the SSL ( Secure Sockets Layer ) support if the OpenSSL libraries have been installed on the system where the Application Server is executing. ADMIN_MAIL_TIMEOUT={timeout} ;Optional This optional keyword specifies the timeout value used when communicating with the {out} email server specified by the ADMIN_MAIL_OUT keyword. If this keyword is not specified, the default timeout of sixty (60) seconds is used. There are no restrictions placed on the value specified. The {timeout} string must be specified as decimal digits that identify the timeout value to be used. ADMIN_MAIL_TRACE={trace} ;Optional This optional keyword specifies the file name created to store all data messages sent and received when communicating with the {out} email server specified by the ADMIN_MAIL_OUT keyword. Note that a trace file is overwritten for a each email that is sent. This keyword is normally only needed to provide debug information when email problems are being researched. Otherwise, this keyword should not be used. The ADMIN_MAIL_TRACE keyword takes precedence over the ADMIN_MAIL_TRACEAPPEND keyword if both keywords are specified in the configuration file. ADMIN_MAIL_TRACEAPPEND={traceappend} ;Optional This optional keyword allows the trace data to be appended to an existing trace log file. This keyword is normally only needed to provide debug information when email problems are being researched. Otherwise, this keyword should not be used. The ADMIN_MAIL_TRACE keyword takes precedence over the ADMIN_MAIL_TRACEAPPEND keyword if both keywords are specified in the configuration file. ADMIN_MAIL_DSNRECEIPT={dsn} ;Optional This optional keyword specifies that this email requires a Delivery Service Notification as specified by the {dsn} string. The {dsn} string can be specified as follows: DSNRECEIPT=Never or DSNRECEIPT=Success,Failure,Delay Where: Never No return receipts are returned. This string option cannot be combined with other options. Success There will a notification on the successful delivery of message. This option can be combined with Failure/Delay. Failure There will be a notification when a delivery failure occurs. This option can be combined with Success/Delay. Delay This will be a notification when the delivery of a message is delayed. This option can be combined with Success/Failure. When combining options in the {dsn} string, the options are separated with a comma delimiter. ADMIN_MAIL_MDNRECEIPT={on|off} ;Optional This optional keyword requests that a client program receipt will be returned when the recipient reads this email. ADMIN_MAIL_RETURN={return} ;Optional This optional keyword is only valid when the DSNRECEIPT keyword is used. This keyword specifies the recommended format of the return receipt that is being requested by the DSNRECEIPT keyword. The {return} string can be specified as follows: RETURN=Full or RETURN=Hdrs Where: Full The full message will be returned with the receipt. This option is not combined with the other option. Hdrs The returned receipt should only contain the message headers. The options Full and Hdrs are mutually exclusive. ADMIN_MAIL_REPLYTO={replyto} ;Optional This optional keyword specifies the email address that a recipient is to send a reply to when responding to this email. Example PLBSERVE INI entries for EMAIL Setup: [Environment] ADMIN_MAIL=ON ADMIN_MAIL_MAXUSERS=ON ADMIN_MAIL_STARTUP=ON ADMIN_MAIL_SHUTDOWN=ON # ADMIN_MAIL_OUT=mail.server.com ADMIN_MAIL_TO=user@somemail.com ADMIN_MAIL_FROM=userSundm@somemail.com # ADMIN_MAIL_SUBJECT=Sundm Server: '%s' # ADMIN_MAIL_PORT=465 ADMIN_MAIL_USER=userSundm@somemail.com ADMIN_MAIL_PASSWORD=userPassword ADMIN_MAIL_SSL=ON ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - Modified GETFILE instruction to support a new keyword named QUERYCOLUMNS. The 'QUERYCOLUMNS={svar}' keyword is the same as the QUERYCOLNAMES keyword except the delimiter character for the QUERYCOLUMNS keyword is a ';' character. The QUERYCOLUMNS keyword is implemented to avoid a delimiter conflict when an SQL select statement includes a function. Example SQL Statement: select col1,col2,round(col3,1),col4 from table; In this case, the GETFILE QUERYCOLUMNS keyword returns a string as follows: "col1;col2;round(col3,);col4" - Modified the GETFILE instruction to support a new keyword named QUERYCOLTYPES. The 'QUERYCOLTYPES={svar}' keyword retrieves the column types that are included in the last query result set when using a SQLite database. When there is no last query result set, a null {svar} variable is returned. The file variable for the GETFILE instruction can be a DBFILE or DBSTATEMENT reference. The column types are returned in the {svar} variable as comma delimited types. The SQLite datatypes values are defined as follows: SQLITE_INTEGER 1 SQLITE_FLOAT 2 SQLITE_TEXT 3 SQLITE_BLOB 4 SQLITE_NULL 5 Note: 1. The QUERYCOLTYPES should be executed before the last row of data is retrieved using a DBFETCH instruction. If all of the rows of data are retrieved before the QUERYCOLTYPES is executed, the column types are all returned with the SQLITE_NULL column type. - Added a new keyword named 'RUNTIMEPATH={svar}' for the GETMODE instruction. This keyword returns the fully qualified path and name of the runtime that is currently being used to execute a PLB program. The maximum length of the fully qualified path and runtime name is 255 bytes. - Added a new keyword named 'MODULEPATH={svar}' for the GETMODE instruction. This keyword returns the fully qualified path and name of the PLC module that is currently executing the GETMODE *MODULEPATH instruction. The maximum length of the fully qualified path and plc name is 255 bytes. - A new keyword named '*SUNDM={url/ip}' has been added for the MAILSEND instruction. The {url/ip} parameter is a character string or literal that identifies the Data Manager to be used when sending an email. The format of the {url/ip} string can include a TCP/IP address or a URL plus a port number. When the *SUNDM keyword is being used, the parameters for the MAILSEND instruction have been enhanced to support two tags specified as '' or ''. The '' tag is used to specify an environment variable name that exists in the SUNDM CFG file that contains the data to be used for the MAILSEND parameter. The '' tag is used to specify a name for a file located at the Data Manager that contains the data to be used for a given MAILSEND keyword. The support for these embedded tags have been implemented to maximize the configurability of the MAILSEND operations when using the Data Manager. When the '' or '' tags are used, they must be specified as the first data in keyword data string. Note: 1. The '' tag must be followed by a keyname that is appended to a prefix named 'MAIL_'. A full keyword named 'MAIL_keyname' is used to find the keyword in the SUNDM CFG file. The data specified by the 'MAIL_keyname' keyword is retrieved and used for the given MAILSEND parameter that includes the 'keyname' tag. The 'MAIL_keyname' keywords must be placed in the 'environment' section of the SUNDM CFG file. 2. The '' tag must be followed by a name that identifies a file whose data is to be read and substituted for the MAILSEND parameter that includes the 'filename' tag. The filename supports the normal PLB $Macro and Datapoint style name formats the same as a PLB OPEN instruction. The file identified by the filename must be located at the Data Manager server. 3. The '' or '' tag substitution can be used for any of the MAILSEND parameters that have a {svarslit} parameter data type. 4. Example of '' and '' tag substitution for MAILSEND: [Environment] ( SUNDM CFG file ) MAIL_UserX=myemail@some.net MAIL_PassX=userpassword Sample MAILSEND using & tag substitution: MAILSEND "mail.server.com": "yourmail@server.com": "mymail@server.com": "Testing SUNDM MAILSEND": "c:\temp\message.txt": *user="userX": *Password="passX": *OPENSSL: *PORT=465: *SUNDM="192.168.0.100": *Trace="mail.log" In this example, the '' tags are being used to retrieve the *USER and *PASSWORD parameters from the SUNDM CFG file. The '' tag is being used to retrieve the message body from the data file named 'message.txt'. - Modified the compiler interface to report an error to the compiler if a required parameter is not specified for a PLB GUI object method during the compilation of a program. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE - Modified the PRINT instruction to support a default print device/file name format that allows a Windows print device. The default print device/file name can be specified in the runtime screen definition file or it can be set using the SETMODE *DEFPRT keyword. The new device name format that allows the Windows device to be specified is as follows: Default Print Device Name Format Format: '[:[{mode}:]]{prtname}' Where: {mode} - The {mode} is optional. The {mode} can be specified as a single character that is specified as 'A', 'R', or 'W'. If a {mode} character is specified, the access to the Windows printer device is defined as follows: W or w A Window's printer device name is being supplied in {prtname}. This is the default Windows printer device behavior if the {mode} is not specified. A or a A Window's printer device name is being supplied in {prtname}. In addition, the device is opened in a manner to allow absolute pass through mode. In this mode, data is passed to the printer device without the data being affected by the operating system. R or r A Window's printer device name is being supplied in {prtname}. In addition, the device is opened in raw data output mode. This mode may be used for printer drivers that don't support the absolute pass through mode (A). {prtname} - The {prtname} is required. The {prtname} is is a current Windows printer device name that has been installed on the system where the runtime is executing. Examples: Case I ( Default Windows print device ) ':HP Deskjet 720C' Case II ( Default Windows print device using 'R' printer mode ) ':r:HP Deskjet 720C' ':R:HP Deskjet 720C' ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Added a new keyword named 'KEYSTATE={nvar}' for the GETMODE instruction. This keyword retrieves the current states for special keyboard keys and returns them in the {nvar} variable. The current states of the keys are determined at the time when the GETMODE instruction is executed. The {nvar} key state bit mask value is defined as follows: Value State Virtual Key 0x00000001 ALT key depressed. (VK_MENU) 0x00000002 CTRL key depressed. (VK_CONTROL) 0x00000004 SHIFT key depressed. (VK_SHIFT) 0x00000008 Caps key is locked. (VK_CAPITOL) 0x00000010 Num lock key is locked. (VK_NUMLOCK) 0x00000020 Scroll lock key is locked. (VK_SCROLL) - Added a new keyword named 'KEYSTATE={nvar}' to the EVENTINFO instruction. When an event is generated and placed on the PLB event stack, the current states for special keyboard keys are saved with the event. When the EVENTINFO is executed with the KEYSTATE keyword specified, the saved special key state values are returned to the PLB application as a single bit mask value. The intent for this instruction is to preserve the state of the special keys at the time when the event was generated. This helps to reduce the possibility of mistaking the true state of the keys. The {nvar} key state mask value is defined as follows: Value State Virtual Key 0x00000001 ALT key depressed. (VK_MENU) 0x00000002 CTRL key depressed. (VK_CONTROL) 0x00000004 SHIFT key depressed. (VK_SHIFT) 0x00000008 Caps key is locked. (VK_CAPITOL) 0x00000010 Num lock key is locked. (VK_NUMLOCK) 0x00000020 Scroll lock key is locked. (VK_SCROLL) - Modified to increase the number of GUI objects that can be inserted into a COLLECTION from 501 to 4001 objects. This change is needed to support PLB Designer requirements. - Added a new keyword named 'OBJECT={object}' to the EVENTINFO instruction. The {object} parameter for the OBJECT keyword must be an OBJECT variable which is a generic object pointer. The intended use of this keyword is to retrieve a pointer to the GUI object that generated an event. Example: Event_FNC FUNCTION ENTRY . pObj OBJECT ^ ....... . EVENTINFO 0,OBJECT=pObj ;Pointer to object for current event! GETPROP pObj, RUNNAME=S$CMDLIN . ... . FUNCTIONEND - Added a new method named 'SetForegroundWindow' for the WINDOW object. This method executes the Windows OS SetForegroundWindow API with the Microsoft documented behavior as follows: "The SetForegroundWindow function puts the thread that created the specified window into the foreground and activates the window. Keyboard input is directed to the window, and various visual cues are changed for the user." ------------------------------------------------------------------------- . SetForeGroundWindow Method for WINDOW object . The SetForeGroundWindow method makes a WINDOW object visible. The method uses the following format: [label] {object}.SetForeGroundWindow [GIVING {return}] Where: label Optional. A Program Execution Label. object Required. A WINDOW object that is activated. return Optional. A Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. For improved performance in the Application Server environment, do not specify the optional return value unless needed. 4. The {return} for this method is always set to be zero. 5. If the {object} has not be set to a visible/activated state, this method is ignore. 6. If the {object} has a WINTYPE of $MDICHILD, a message is sent to the MDI client window to activate the MDI child window. - Modified the SETPROP MDILIST property to allow a change to take affect immediately while the VISIBLE property is set to a TRUE state for a MENU object. Prior to this change the MDILIST property would only take affect when a MENU object was activated. - Modified the {jobname} string size for a PRTOPEN to allow up to 100 characters. Prior to this change the maximum size was 50 characters. - Added a new method named 'SetLVFlags' for the LISTVIEW object. This method can be used to set or clear state flags to invoke specialized behaviors for the LISTVIEW object. ------------------------------------------------------------------------- . SetLvFlags Method for LISTVIEW object . The SetLvFlags method sets and clears state flags that control specialized behaviors for a LISTVIEW object. [label] {object}.SetLVFlags [GIVING {return}]: [USING [*FLAGS=]{flags}[: [*MODE=]{mode}]] Where: label Optional. A Program Execution Label. object Required. A LISTVIEW object that is activated. return Optional. A Numeric Variable whose value is the current LISTVIEW state value after the SetLVFlags operation. flags Required. A Numeric Variable or decimal value that is a bitmask value from 0x00 to 0xFF. Each bit it the bitmask value defines a specialized behavior for a LISTVIEW object. mode Required. A Numeric Variable or decimal value the specifies the mode of operation for the SetLVFlags method. If the {mode} value is zero, the state flags defined by the {flags} value are cleared for the LISTVIEW object. If the {mode} value is non-zero, the state flags defined by the {flags} value are set to take affect for the LISTVIEW object. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. {flags} is a {dnumnvar} value to be used. 0x00 - When the {flags} value is zero, the {return} value is user state flags that are currently being used for the LISTVIEW object. 0x01 - Enable behavior that allows a MouseWheel event for a LISTVIEW to be posted to its container when the LISTVIEW does not have any scrollbars present. 0x02 - If this behavioral bit is set, a CLICK or double CLICK event is always generated when a mouse click is executed within the bounds of a LISTVIEW. If this behavioral bit is cleared, a CLICK or double CLICK event is only generated when a LISTVIEW item (i.e. row) is currently selected or has the focus. 4. {mode} is a {dnumnvar} value to be used. 0 - Clear the LISTVIEW object behavior flags specified in the {flags} value. 1 - Set the LISTVIEW object behavior flags specified in the {flags} values. - The MouseWheel support for the LISTVIEW object has been modified to allow a Windows OS MouseWheel event to be posted to the container of a LISTVIEW when there are no LISTVIEW scrollbars present and the SetLVFlags method state flag 0x01 has been set for the LISTVIEW object. - Modified the LISTVIEW object default action to always generate a CLICK or double CLICK event when the mouse is clicked in a LISTVIEW object. Note: 1. The new default event behavior for a LISTVIEW object causes a CLICK or double CLICK event to always be generated when a mouse click is executed any where in the client area of the LISTVIEW object. If the mouse click action is over an existing row of the LISTVIEW, the CLICK result value is a zero based number that is the row number where the click occurred. If the mouse click action is not over an existing row, the CLICK result value is a 0xFFFFFFFF value. 2. The old event behavior for a LISTVIEW would only generate a CLICK or double CLICK event when a row was selected/highlighted or an unselected row still had focus at the time when the mouse was clicked. This old event behavior caused unexpected results when the LISTVIEW checkbox style was being used. 3. The 'SETMODE *LVCLICKEVENTMODE={dnumnvar}' can be used to set the default click event behavior for a LISTVIEW object. If the *LVCLICKEVENTMODE is set to a value of 0, the default CLICK event behavior is the same a described in note (1.). This is the default behavior for a LISTVIEW CLICK event if the *LVCLICKEVENTMODE has never been set in a PLB program. If the *LVCLICKEVENTMODE is set to a value of 1, the default CLICK event behavior is the same as described in note (2.). 4. When a LISTVIEW object is created, the current existing default CLICK event behavior is defined for the LISTVIEW. The created click event behavior continues to persist for the LISTVIEW view object unless it is changed using the behavior is changed using the 'SetLVFlags' method of a LISTVIEW. - Modified the AUTOSCALE property for the PICT object to support two new modes to control the scaling for a picture. The scaling modes values are defined as follows: Value Keyword Picture scaling behavior 5 $SCALEFULL The picture is automatically scaled to fill the rectangle defined by the TOP, BOTTOM, HEIGHT, and WIDTH properties of the PICT object. In this case, the SCALE property is not used to change the picture scaling. 6 $SCALEMANUAL This mode disables the automatic scaling for the picture. In this mode, the end-user application must set the SCALE property to cause the picture to be scaled. - Added a new method named 'SetTBFlags' for the TOOLBAR object. This method can be used to set or clear state flags to invoke specialized behaviors for the TOOLBAR object. ------------------------------------------------------------------------- . SetTbFlags Method for TOOLBAR object . The SetTbFlags method sets and clears state flags that control specialized behaviors for a TOOLBAR object. [label] {object}.SetTbFlags [GIVING {return}]: [USING [*FLAGS=]{flags}[: [*MODE=]{mode}]] Where: label Optional. A Program Execution Label. object Required. A TOOLBAR object that is activated. return Optional. A Numeric Variable whose value is the current TOOLBAR state value after the SetTBFlags operation. flags Required. A Numeric Variable or decimal value that is a bitmask value from 0x00 to 0xFF. Each bit it the bitmask value defines a specialized behavior for a TOOLBAR object. mode Required. A Numeric Variable or decimal value the specifies the mode of operation for the SetTBFlags method. If the {mode} value is zero, the state flags defined by the {flags} value are cleared for the TOOLBAR object. If the {mode} value is non-zero, the state flags defined by the {flags} value are set to take affect for the TOOLBAR object. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. {flags} is a {dnumnvar} value to be used. 0x00 - When the {flags} value is zero, the {return} value is user state flags that are currently being used for the TOOLBAR object. 0x01 - When this bit is set to 1, this enables the old style tooltips for the TOOLBAR object. When this bit is set to 0, this enables new style tooltips for the TOOLBAR object. When a TOOLBAR is created, the tooltip style defaults to the new style. The end-user behavior for old style versus new style tooltips of a TOOLBAR is that the new style allows tooltips to be presented over TOOLBUTTONs when the application window is inactive. 4. {mode} is a {dnumnvar} value to be used. 0 - Clear the LISTVIEW object behavior flags specified in the {flags} value. 1 - Set the TOOLBAR object behavior flags specified in the {flags} values. - Added a new property named 'TABSTYLE={dnumnvar}' for the TABCONTROL object. This property can be used in the CREATE or GETPROP instructions. This property is used to set the orientation style to be applied to the TABCONTROL tabs when the control is created. By default the tabs exist horizontally along the top of a TABCONTROL object. This property can be used to put the tabs along any the sides of the TABCONTROL when it is created. The following styles are available for this property. PLBEQU.INC Value Expected Behavior $TC_TOP 0 The tabs are horizontal along the top. (Default) $TC_BOTTOM 1 The tabs are horizontal along the bottom side. $TC_LEFT 2 The tabs are vertical along the left side. $TC_RIGHT 3 The tabs are vertical along the right side. Notes: 1. When the '&' hot ALT-Key sequence is specified in the tab label string, the Windows OS normally detects the '&' character and forces an underlined character in the output. However, when the $TC_LEFT or $TC_RIGHT styles are used, the Windows OS does not force an underlined character in the output when the '&' is specified. 2. There are Windows OS behaviors that occur when the MULTILINE property is applied for a TABCONTROL. A. If a TABCONTROL is created with a TABSTYLE of $TC_LEFT or $TC_RIGHT, the MULTIROW property does not take affect. The MULTILINE works as expected when the $TC_TOP or $TC_BOTTOM styles are used. B. If a TABCONTROL is create with a TABSTYLE of $TC_RIGHT, a SETPROP MULTIROW=0 causes the tabcontrol labels to disappear. If a SETPROP MULTIROW=1 causes the tabcontrol labels to re-appear. 3. The $TCS_MULTILINE style for the SetStyle method has the same Windows OS behaviors as described for the MULTILINE property. - Added new methods for a TABCONTROL object to support imagelists and additional styles. SetImageList - Set an imagelist for a TABCONTROL. RemoveImageList - Remove an imagelist from a TABCONTROL. GetTabImage - Retrieve an image index from a TABCONTRL tab. SetTabImage - Set/clear an image index for a TABCONTROL tab. GetStyle - Retrieve the current Windows OS style for a TABCONTROL. SetStyle - Set specialized styles for a TABCONTROL. GetTabCount - Retrieve the number of tabs for a TABCONTROL. InsertTab - Insert a tab with label and/or image for a TABCONTROL. SetTab - Set the label and/or image index for a TABCONTROL. DeleteTab - Delete a tab for a TABCONTROL. GetTabParam - Get tab user data parameter. SetTabParam - Set tab user data parameter. ------------------------------------------------------------------------- . SetImageList Method for TABCONTROL object . The SetImageList method can be used to set or replace an imagelist for a TABCONTROL object. [label] {object}.SetImageList [GIVING {return}]: USING [*IMAGELIST=]{imagelist} Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. return Optional. A Numeric Variable whose value indicates whether a previous imagelist was replaced or not by the execution of this method. imagelist Required. A previously created IMAGELIST object that contains the images that can be assigned to the tabs in a TABCONTROL. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. If the execution of the SetImageList method replaced a previously existing imagelist in the TABCONTROL, the {return} value is non-zero. If the TABCONTROL did not have an existing imagelist when the SetImageList method was executed, the {return} value is zero. 2. The OVER Condition Flag is set if the {return} value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). 4. The SetImageList method can not be used to remove an imagelist from a TABCONTROL object. ------------------------------------------------------------------------- . RemoveImageList Method for TABCONTROL object . The RemoveImageList method is used to remove an imagelist from a TABCONTROL object. [label] {object}.RemoveImageList [GIVING {return}] Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. return Optional. A Numeric Variable whose value indicates the success or failure of this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. If the execution of the RemoveImageList method successfully removes an imagelist from the TABCONTROL, the {return} value is 1. If the method does not remove an imagelist, the {return} value is 0. 2. The OVER Condition Flag is set if the {return} value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). ------------------------------------------------------------------------- . GetTabImage Method for TABCONTROL object . The GetTabImage method can be used to retrieve the current image index that is assigned to a tab for a TABCONTROL object. [label] {object}.GetTabImage [GIVING {return}]: USING [*INDEX=]{index} Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. return Optional. A Numeric Variable whose value is the image index value that is assigned to a tab in the TABCONTROL. index Required. A decimal number or Numeric Variable whose value identifies the tab to be accessed for a TABCONTROL. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. If the execution of the GetTabImage method is unsuccessful, the {return} value is 0xFFFFFFFE. If the execution of the GetTabImage method is successful, the {return} value is the index value of an image in the imagelist that is set for the TABCONTROL object. If there no image index set for the tab specified by the {index}, the {return} value is 0xFFFFFFFF. 2. The OVER Condition Flag is set if the {return} value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). 4. The {index} is a zero relative numeric value that identifies the TABCONTROL tab to be used for the execution of this method. ------------------------------------------------------------------------- . SetTabImage Method for TABCONTROL object . The SetTabImage method can be used to set, replace, or remove an image for a tab in a TABCONTROL object. [label] {object}.SetTabImage [GIVING {return}]: USING [*INDEX=]{index}: [*IMAGE=]{image} Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. return Optional. A Numeric Variable whose value indicates the success or failure for the execution of this method. index Required. A decimal number or Numeric Variable whose value identifies the tab to be accessed for a TABCONTROL. image Required. A decimal number or Number Variable whose value identifies the image index into the imagelist that has been set for the TABCONTROL. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. If the execution of the SetTabImage method is successful, the {return} value is non-zero. If the method fails, the {return} value is zero. 2. The OVER Condition Flag is set if the {return} value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). 4. The {index} is a zero relative numeric value that identifies the TABCONTROL tab to be used for the execution of this method. 5. The {image} is a zero relative numeric value that specifies the image from the TABCONTROL imagelist to be set for the tab. If the {image} is a value of 0xFFFFFFFF, the image is removed from the TABCONTROL tab. ------------------------------------------------------------------------- . GetStyle Method for TABCONTROL object . The GetStyle method is used to retrieve the current style bit mask value from the Windows OS that is being used for the TABCONTROL. [label] {object}.GetStyle [GIVING {style}] Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. style Optional. A Numeric Variable into which the current TABCONTROL style bit mask value is stored. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. 2. The OVER Condition Flag is set if the returned value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). 4. The bit mask value that is stored in the {style} variable is described in the Microsoft MSDN documentation for a tabcontrol object. The following TABCONTROL style definitions can be used/set using a SetStyle method. TABCONTROL Style Style Bit Mask Value $TCS_FLATBUTTONS 0x00000008 $TCS_FORCEICONLEFT 0x00000010 $TCS_FORCELABELLEFT 0x00000020 $TCS_HOTTRACK 0x00000040 $TCS_BUTTONS 0x00000100 $TCS_MULTILINE 0x00000200 $TCS_FIXEDWIDTH 0x00000400 $TCS_RAGGEDRIGHT 0x00000800 ------------------------------------------------------------------------- . SetStyle Method for TABCONTROL object . The SetStyle method can be used to set or clear style control bits for a for a TABCONTROL object. [label] {object}.SetStyle [GIVING {return}]: USING [*STYLE=]{style}: [*MODE=]{mode} Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. return Optional. A Numeric Variable whose returned value is the current style bit mask that is being used for the TABCONTROL object. style Required. A numeric bit mask value to be applied to the TABCONTROL style control. mode Required. A numeric value that identifies whether the bit mask value in the {style] is to be set or cleared for the TABCONTROL object. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. The {return} value is the current TABCONTROL object style bit mask that is being used. 2. The OVER Condition Flag is set if the {return} value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). 4. The {style} is a bit mask value that identifies the TABCONTROL style definitions to be changed. Only certain TABCONTROL styles can be changed after the object has been created. The following style bit definitions can be set or cleared for the TABCONTROL. TABCONTROL Style Style Bit Mask Value $TCS_FLATBUTTONS 0x00000008 Selected tabs for the TABCONTROL appear as being indented into the background while other tabs appear as being on the same plane as the background. This style only affects tab controls with the TCS_BUTTONS style. $TCS_FORCEICONLEFT 0x00000010 The TABCONTROL imagelist images are aligned with the left edge of each fixed-width tab. This style can only be used with the TCS_FIXEDWIDTH style. $TCS_FORCELABELLEFT 0x00000020 Text for the tabs are aligned with the left edge of each fixed-width tab. The label is displayed immediately to the right of the tab image instead of being centered. This style can only be used with the TCS_FIXEDWIDTH style. It also implies the TCS_FORCEICONLEFT style. $TCS_HOTTRACK 0x00000040 Tabs under the mouse pointer are automatically highlighted. This style may or may not be enabled for a Windows OS system. $TCS_BUTTONS 0x00000100 Tabs appear as buttons and no border is drawn around the display area. $TCS_MULTILINE 0x00000200 Multiple rows of tabs are displayed, if necessary, so all tabs are visible at once. $TCS_FIXEDWIDTH 0x00000400 All tabs are the same width. This style cannot be combined with the TCS_RIGHTJUSTIFY style. $TCS_RAGGEDRIGHT 0x00000800 Rows of tabs will not be stretched to fill the entire width of the control when the TCS_MULTILINE style is used. This style is the default. Warning: Setting the $TCS_MULTILINE style bit to an off state causes the TABCONTROL tabs to disappear when the TABSTYLE property is set to be $TC_RIGHT. This interaction of styles is a Windows OS behavior that the runtime can not change. Also, note that the MULTILINE property for a TABCONTROL has this same interaction. 5. The {mode} value indicates whether the style control bits are to be set or cleared for the TABCONTROL object. If the {mode} value is non-zero, the style control bits are set for the TABCONTROL. If the {mode} value is zero, the style control bits are cleared. 6. The behavior/presentation that occurs when using the SetStyle method depends solely on the Windows OS system/version that is being used. The PLB runtime does not interpret nor attempt to change the behavior as applied by the Windows OS when a TABCONTROL style is applied using the SetStyle method. ------------------------------------------------------------------------- . GetTabCount Method for TABCONTROL object . The GetTabCount method is used to retrieve the current number of tabs that exist for a TABCONTROL. [label] {object}.GetTabCount [GIVING {count}] Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. count Optional. A Numeric Variable into which the current number of tabs is stored. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. 2. The OVER Condition Flag is set if the returned value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). ------------------------------------------------------------------------- . InsertTab Method for TABCONTROL object . The InsertTab method is used to add/insert a tab to a TABCONTROL object. [label] {object}.InsertTab [GIVING {return}][: USING [*INDEX=]{index}[: [*LABEL=]{labstring}][: [*IMAGE=]{image}] Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. return Optional. A Numeric Variable whose value indicates the success or failure of this method. index Required. A decimal number or Numeric Variable whose value identifies the position of the tab to be inserted for a TABCONTROL. The {index} is a zero relative value for the position of the new tab in the TABCONTROL. labstring Optional. A Character Variable or literal that is the label that is to be set for the tab that is being inserted. image Optional. A decimal number or Number Variable whose value identifies the image index in the imagelist that is to be set for the tab that is being inserted. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. The {return} value is the index position of tab when it was successfully inserted. If the InsertTab method fails, the {return} value is 0xFFFFFFFF. 2. The OVER Condition Flag is set if the {return} value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). 4. If both the {labstring} and {image} parameters are not provided, this method does nothing. ------------------------------------------------------------------------- . SetTab Method for TABCONTROL object . The SetTab method is used to set/change the label and/or image for an existing tab in a TABCONTROL object. [label] {object}.SetTab [GIVING {return}][: USING [*INDEX=]{index}[: [*LABEL=]{labstring}][: [*IMAGE=]{image}] Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. return Optional. A Numeric Variable whose value indicates the success or failure of this method. index Required. A decimal number or Numeric Variable whose value identifies the index to the tab in the TABCONTROL that is being accessed. labstring Optional. A Character Variable or literal that is the label that is to be set for the tab that is being changed. image Optional. A decimal number or Number Variable whose value identifies the image index in the imagelist that is to be set for the tab that is being changed. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. If the SetTab executes successfully, the {return} value is non-zero. If the SetTab method fails, the {return} value is zero. 2. The OVER Condition Flag is set if the {return} value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). 4. If both the {labstring} and {image} parameters are not provided, this method does nothing ------------------------------------------------------------------------- . DeleteTab Method for TABCONTROL object . The DeleteTab method is used to remove a tab from a TABCONTROL. [label] {object}.DeleteTab [GIVING {return}]: USING [*INDEX=]{index} Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. return Optional. A Numeric Variable whose value indicates the success or failure of this method. index Required. A decimal number or Numeric Variable whose value identifies the tab to be deleted for a TABCONTROL. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. If the DeleteTab method is successful, the {return} value is non-zero. If the method fails, the {return} value is zero. 2. The OVER Condition Flag is set if the {return} value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). 4. The {index} is a zero relative numeric value that identifies the TABCONTROL tab to be used for the execution of this method. ------------------------------------------------------------------------- . GetTabParam Method for TABCONTROL object . The GetTabParam method is used to retrieve the current user data parameter that is assigned to a tab for a TABCONTROL object. [label] {object}.GetTabParam [GIVING {return}]: USING [*INDEX=]{index} Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. return Optional. A Numeric Variable whose value is the user data parameter value that has been previous set to a tab for the TABCONTROL. index Required. A decimal number or Numeric Variable whose value identifies the tab to be accessed for a TABCONTROL. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. If the execution of the GetTabParam method is unsuccessful, the {return} value is 0. If the execution of the GetTabParam method is successful, the {return} value is the current user data parameter that is assigned to the tab for the TABCONTROL. If a user data parameter has never been set for a tab, the {return} value is expected to be 0. 2. The OVER Condition Flag is set if the {return} value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). 4. The {index} is a zero relative numeric value that identifies the TABCONTROL tab to be used for the execution of this method. ------------------------------------------------------------------------- . SetTabParam Method for TABCONTROL object . The SetTabParam method is used to set the user data parameter for a tab that exists for a TABCONTROL object. [label] {object}.SetTabParam [GIVING {return}]: USING [*INDEX=]{index}: [*PARAM=}{param} Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that is activated. return Optional. A Numeric Variable whose value indicates the success or failure for the execution of this method. index Required. A decimal number or Numeric Variable whose value identifies the tab to be accessed for a TABCONTROL. param Required. A decimal number or Number Variable whose value identifies the parameter value that is to be set for a tab that exists for the TABCONTROL. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). Otherwise, the ZERO flag is cleared. If the execution of the SetTabParam method is successful, the {return} value is non-zero. For the method fails, the {return} value is zero. 2. The OVER Condition Flag is set if the {return} value is too large to be stored without truncation. Otherwise, the OVER flag is cleared. 3. The EOS Condition Flag are always cleared (FALSE). 4. The {index} is a zero relative numeric value that identifies the TABCONTROL tab to be used for the execution of this method. 5. The {param} value is limited to a 32 bit value from 0 to 0xFFFFFFFF. - Corrected a problem where the resize of a WINDOW object that affected the size of a PICT object would cause the PICT object scale to be reset to 100% as the window resizing action was occurring. The problem would occur when the AUTOSCALE was set to be $SCALEBEST, $SCALEHORZ, or $SCALEVERT. The corrective action is to allow the picture scale to remain unchanged while a window resizing action is being processed. - Corrected a problem where static GUI objects with a transparent background might not be erased. This could cause these static GUI objects to be painted incorrectly when they existed in a WINDOW or PANEL container. - Corrected a problem where a MREGION object might not be erased. This could cause the MREGION to be painted incorrectly. This problem was caused by changes in 9.4B to reduce flickering when a WINDOW was resized. - Corrected a problem where a GUI Window with a very large number of GUI objects was taking a longer period of time to activate and/or deactivate the objects. This problem was caused by a change in 9.4B to reduce flickering. - Corrected a problem where GUI objects on top of a TABCONTROL object might be missing some of the objects presentation. This problem was identified and corrected for STATTEXT objects that where missing data from the expected presentation. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Added a new keyword named '*HELPWINDOW={modal}' to a SETMODE instruction. The *HELPWINDOW keyword can be used instead of the *HDIALOG keyword to allow a user generated modal WINDOW object to be used for a user help help dialog. The {modal} parameter must be a WINDOW object with a MODAL window type or the user help menu is ignored. Note: 1. The *HDIALOG and *HELPWINDOW keywords are mutually exclusive. Each of these keywords overrides the other keyword when executed in a PLB program. - Modified the *FLAGS parameter for the GetObjectAsPointer method for a WINDOW object to initialize an OBJECT variable to point to a MDI child window. The {flags} parameter bit masked has been changed to support the following bit value: 0x00000002 - Retrieve the MDI WINDOW objects that are children to a MDI client WINDOW. - Added a new method named GetMdiChildCount for a WINDOW object. This method returns the number of MDI child WINDOW objects that are current children windows to a MDI client WINDOW. ------------------------------------------------------------------------- . GetMdiChildCount Method for WINDOW object . The GetMdiChildCount method returns the number of MDI child WINDOW objects that are current child windows to a MDI client WINDOW. The method uses the following format: [label] {object}.GetMdiChildCount [GIVING {return}] Where: label Optional. A Program Execution Label. object Required. A MDI client WINDOW object that is activated. return Optional. A Numeric Variable that indicates the number of MDI child objects. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). The return value is a count of current MDI child WINDOWS whose parent is a MDI client WINDOW. 2. The OVER and EOS Condition Flags are always cleared (FALSE). - Modified the tooltips of TOOLBUTTONs to be registered with a tooltip control that is created for the parent of the TOOLBAR container. This change is being made to allow a default behavior for a tooltip where it can be displayed over a TOOLBUTTON even when the WINDOW containing a TOOLBAR is an inactive window. Additionally, this change allows the TOOLBAR tooltip behavior to be consistent with the behavior for other PLB GUI objects. Note: 1. The tooltips for a TOOLBAR can be enabled to execute as an old style tooltip or to execute as a new style tooltip. The new style tooltips allow a tooltip to appear over a TOOLBUTTON when a window containing the TOOLBAR is inactive. The old style tooltips do not allow this behavior for an inactive window. 2. The end-user application can cause the default tooltip behavior for any TOOLBAR to be set when the TOOLBAR is created by executing a SETMODE *TBTOOLTIPMODE keyword before a TOOLBAR is created. 3. After a TOOLBAR has been created, the tooltip behavior can only be changed by executing the TOOLBAR method named SetTBFlags. This method can be used to change the current tooltip behavior to be a new or old style. - Added a new keyword named '*TBTOOLTIPMODE={dnumnvar}' for the GETMODE and SETMODE instructions. This keyword can be used to set the default tooltip mode that is to be used when a TOOLBAR is created. When the *TBTOOLTIPMODE is set to 0, a TOOLBAR is created to use new style tooltips. This mode is the default setting. When the *TBTOOLTIPMODE is set to 1, the TOOLBAR is created to used old style tooltips. Note: 1. The new style tooltips allow a tooltip to appear over a TOOLBUTTON when a window containing the TOOLBAR is inactive. The old style tooltips do not allow this behavior for an inactive window. The new style tooltips are implemented to be consistent with other PLB GUI objects. The old style tooltips are implemented to use tooltips that are customized for a TOOLBAR object. - Added a new keyword named '*LVCLICKEVENTMODE={dnumnvar}' for the GETMODE and SETMODE instructions. This keyword can be used to set the default click event behavior for a LISTVIEW object. If the *LVCLICKEVENTMODE is set to a value of 0, this causes a new CLICK event behavior that is described in note (1.). This is the default behavior for a LISTVIEW CLICK event if the *LVCLICKEVENTMODE has never been set in a PLB program. If the *LVCLICKEVENTMODE is set to a value of 1, this causes an old CLICK event behavior that is described in note (2.). Note: 1. The new default event behavior for a LISTVIEW object causes a CLICK or double CLICK event to always be generated when a mouse click is executed any where in the client area of the LISTVIEW object. If the mouse click action is over an existing row of the LISTVIEW, the CLICK result value is a zero based number that is the row number where the click occurred. If the mouse click action is not over an existing row, the CLICK result value is a 0xFFFFFFFF value. 2. The old event behavior for a LISTVIEW would only generate a CLICK or double CLICK event when a row was selected/highlighted or an unselected row still had focus at the time when the mouse was clicked. This old event behavior caused unexpected results when the LISTVIEW checkbox style was being used. 3. The *LVCLICKEVENTMODE keyword only sets the default mode that is applied to a LISTVIEW object when is created. After a LISTVIEW object has been created, the CLICK event behavior can only be changed using the LISTVIEW SetLVFlags method. - Modified the creation of a COMBOBOX object to send a CB_SETMINVISIBLE message to the Windows OS when the ROWSVISIBLE property is being used. This message is being used to force the behavior for the ROWSVISIBLE property to be the same whether a manifest is being used or not. This change only applies when using a Windows OS version XP and later. - Modified the TABCONTROL to support the IMAGELIST property. An imagelist can be set for a TABCONTROL either by using the IMAGELIST property or by using the SetImageList method. Images from the TABCONTROL imagelist can be set for individual tabs using the SetTabImage method. To remove an imagelist from a TABCONTROL, the IMAGELIST property can be set to an IMAGELIST object that has not been created. Also, the method named RemoveImageList method can be used to remove an imagelist from a TABCONTROL. - Modified the LISTVIEW method operations to allow the SetColumnWidth method to change the column width after the SetColResizeFlag method has been executed to prevent a resize of a specified column. This change is intended to allow a column width to be changed under program control while the column width can not be changed by a user's actions. - Made a modification for EDITTEXT objects to optimize the border redrawing process when the CLIPSIB property is being used. This change only applies to an EDITTEXT that is created as following: 1. The EDITTEXT does not use the 3D style. 2. The EDITTEXT does have a border. 3. The EDITTEXT CLIPSIB property is set to be ON. The CLIPSIB property is ON by default. With this change, the clipping action for the EDITTEXT object is only performed when it intersects/overlaps with another GUI object. - Modified the EDITTYPE property for EDITTEXT objects to support a new edit type with a value of 6 ($NUMERIC). This new edit type restricts the type of characters to numeric digits ( 0 through 9 ), minus sign (-), a locale decimal point, and a locale thousand when the characters are entered by an end-user. In addition, there is no locale translation of any characters when data is moved in or out of an EDITTEXT using a GETITEM, GETPROP, SETITEM, or SETPROP instruction. Also, it is possible to move non- restricted characters into an EDITTEXT using a SETITEM/SETPROP instruction. There is no control to force any order or format for any data entered into an EDITTYPE using the $NUMERIC edit type. Value Keyword Input is... 6 $NUMERIC restricted to numeric digits ( 0 through 9 ), minus sign (-), locale decimal point, and locale thousand characters. Note: 1. See the runtime keywords PLB_LOCALE, PLB_DECIMAL, and PLB_THOUSAND for more details for controlling locale decimal point and locale thousand settings. - Corrected a problem where the scaling for a COMBOBOX was not being adjusted when items were being added to the COMBOBOX. - Corrected a GPF error that would occur when using the AUTOMATION class 'WinHttp.WinHttpRequest.5.1' and executing the 'Send' method. - Corrected a GPF error that could occur when setting any text property with a size larger than 40960 bytes. This GPF error was detected when a 'SETPROP RICHEDITTEXT *TEXT=DIM' was executed where the data in the DIM contained more than 40960 bytes. - Corrected a GPF error that could occur when a FLOATMENU had a PANEL as its parent and a WINDOW was being destroyed when a program was going through the shutdown cleanup processing. The GPF would occur if the PANEL was destroyed before the FLOATMENU. ------------------------------------------------------------------------------- PLBCMP - Modified GETFILE instruction to support a new keyword named QUERYCOLUMNS. - Modified GETFILE instruction to support a new keyword named QUERYCOLTYPES. - Added a new keyword named 'OBJECT={object}' to the EVENTINFO instruction. - Added a new keyword named 'KEYSTATE={nvar}' to the EVENTINFO instruction. - Added a new keyword named 'KEYSTATE={nvar}' to the GETMODE instruction. - Added a new keyword named 'RUNTIMEPATH={svar}' to the GETMODE instruction. - Added a new keyword named 'MODULEPATH={svar}' to the GETMODE instruction. - Added two new keywords named 'LVCLICKEVENTMODE={dnumnvar}' and 'TBTOOLTIPMODE={dnumnvar}' for the GETMODE and SETMODE instructions. - Modified to allow the IMAGELIST property to be supported for the TABCONTROL object. - Added a new TABSTYLE property for a TABCONTROL object. - Modified to give a warning when a comment for an internal runtime method can not be clearly identified. - Corrected a problem where a LOWERCASE/UPPERCASE with an array parameter would generate invalid program code if the LOWERCASE/UPPERCASE was compiled after a FOR or another enhanced array instruction. This invalid program code would cause an U51 error when this invalid program code was being loaded. This problem was caused by a change to the 9.4B compiler. Note: 1. Prior to release 9.4B, a LOWERCASE/UPPERCASE instruction with an array parameter was only affecting the first element of the array. 2. In release 9.4B, a change was made to allow all of the elements of an array to be affected by allowing the LOWERCASE/UPPERCASE instructions to support enhanced array processing. Example of problem: Array DIM 5(2) . UPPERCASE Array LOWERCASE Array ;Caused a U51 error! - Corrected a problem where an unexpected compilation error was being given for a READKS instruction using column named IO when the READKS instruction followed another IO instruction that did not use column named IO. - Modified to give a better compiler error description when a print error occurs. ------------------------------------------------------------------------------- ADMEQU.INC - Added the following definition to support GUID licensing used for the Application Server. $ADMITEMSRVALLCHILDCOUNT EQU 130 $ADMITEMSRVALLCHILDHIGH EQU 131 - Added the following definitions to support email and HTTP functions. $ADMCMDSETMAILMASK EQU 11 $ADMCMDSETHTTPMASK EQU 12 $ADMITEMSRVMAILMASK EQU 132 $ADMITEMSRVHTTPMASK EQU 133 ------------------------------------------------------------------------------- PLBEQU.INC - Modified for TABCONTROL changes. - Added $NUMERIC equate for EDITTYPE property. - Added the following definitions to support email and HTTP functions. $ADMITEMSRVMAILMASK EQU 132 $ADMITEMSRVHTTPMASK EQU 133 $ADMCMDSETMAILMASK EQU 11 $ADMCMDSETHTTPMASK EQU 12 ------------------------------------------------------------------------------- PLBMETH.INC - Modified for TABCONTROL changes. - Modified for LISTVIEW changes. ------------------------------------------------------------------------------- ADMIN - The Administrative Services has been modified to provide email and HTTP communications services to support the Sunbelt products. The current implementation has been integrated into the Application Server and the Data Manager products. See the PLBSERVE and SUNDM readme descriptions for the information on this support. - Two new commands have been added for the PLB ADMCOMMAND instruction. The new commands are used to control the Administrative Services for the email and HTTP support. These specific details of these commands are documented as follows: Value Label The action is to... 11 $ADMCMDSETMAILMASK set a bit mask to enable/disable certain server mail messages. The bit mask {value} must be numeric and the bit definitions are as follows: Bit Mask Value 0x00000001 - Send Data Manager replication errors via an email. 0x00000002 - Send email to indicate when users can not logon because the maximum licensed user count has been exceeded for a Data Manager or Application Server. 0x00000004 - Send email when a Data Manager or Application Server has started. 0x00000008 - Send email when a Data Manager or Application Server has shutdown. 12 $ADMCMDSETHTTPMASK set a bit mask to enable/disable certain server HTTP behaviors. The bit mask {value} must be numeric and the bit definitions are as follows: Bit Mask Value 0x00000001 - send GPF data to a Web Server that has been configured for a Data Manager or Application Server. - In patch release 9.4B, two new data types were added for the PLB ADMGETINFO instruction. The new data types are used to retrieve current user count information regarding the total number of threads/tasks that are used for users that are logged on to an Application Server. Value Keyword Returns... 130 $ADMITEMSRVALLCHILDCOUNT Current total number of threads/tasks existing for all of the current users logged on to the Application Server. 131 $ADMITEMSRVALLCHILDHIGH Highest number of threads/tasks every used for all of the users logged on to an Application Server. - Two new data types have been added for the PLB ADMGETINFO instruction. The new data types are used to retrieve the current bit mask values for the email and HTTP support of the Administrative Services. Value Keyword Returns... 132 $ADMITEMSRVMAILMASK a bit mask value that controls if email messages are to be sent for server events. The bit mask definitions are defined as follows: Bit Mask Value 0x00000001 - Send Data Manager replication errors via an email. 0x00000002 - Send email to indicate when users can not logon because the maximum licensed user count has been exceeded for a Data Manager or Application Server. 0x00000004 - Send email when a Data Manager or Application Server has started. 0x00000008 - Send email when a Data Manager or Application Server has shutdown. 133 $ADMITEMSRVHTTPMASK a bit mask value that controls behaviors for the HTTP support of a server. The bit mask definitions are defined as follows: Bit Mask Value 0x00000001 - send GPF data to a Web Server that has been configured for a Data Manager or Application Server. ------------------------------------------------------------------------------- SUNIDE.PLC - Added DBExplorer and Schema Editor to the tools menu. - Corrected a screen redraw problem after the REMOVEPROGRAM entry point was called from a user tool. - Fixed up case sensitivity issues. - Corrected a bug load source listings without a cross reference could show incorrect line numbers for lines containing errors or warnings. - Corrected a bug that was introduced in 9.4B where if an include was missing, it would not display the name correctly in the source map. ------------------------------------------------------------------------------- EDITOR.PLC - Modified to not put a sizegrip on the status bar for dbexplorer - Corrected an O126 error that can occur when a config file is missing. - Many designer specific enhancements for improved functionality and performance. ------------------------------------------------------------------------------- SUNCS21.OCX - Modified margin click so you can select lines that are also a scope start or end buy clicking in the right edge of the left margin. ------------------------------------------------------------------------------- PROFILER.PLC - Corrected a bug were the loading dialog may not hide itself if an error occurs while loading. - Corrected initial tab on startup. ------------------------------------------------------------------------------- DBEXPLORER.PLC - Removed the experimental increment_vacuum pragma. - Added logic to deal with read-only databases. - Now displays the correct shortcut menu for view and trigger items in the treeview. ------------------------------------------------------------------------------- SCHEMAEDITOR.PLC - Added logic to deal with read-only databases. ------------------------------------------------------------------------------- DESIGNER.PLC - Corrected an issue with tabpanel naming while the property window was in category mode. - Redesigned the header section of the code window. - Modified the properties window display. - Corrected an issue with displaying the quick help event info in the property window. - Enhanced the handling of the item movement buttons in the various special editors. - Modified the Topmost property definition to support the Above All value. - Corrected object name function to update event names in the object tree window. - Redesigned the object selection and movement logic to use transparent panels above the actual objects. This permits object that do not support mouse events or only support mouse event in some areas of the object to be moved and selected just as normal objects. - Corrected an issue when opening a file defined on the command line. - Now categorizes .Net events properly. - Added logic to ensure the selected tool is used during drawing. - Now allows selection of parent items in the shortcut menus. - Added support for imagelist objects on tabcontrols and image selection for tabpanels. - Optimized functions for improved performance when modifying forms with a large number of controls or a large amount of code. This improves performance in all cases, but is most noticable with forms using a large number of objects. - Removed support of the obsolete designer Load property. - Removed the LinkHScroll and LinkVScroll properties since their use in a design environment is not applicable. - Added psuedo property support for the TabStyle TabTabcontrol methods. - Added support for the new $NUMERIC EditType property. -------------------------------------------------------------------------------