home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / vxcliser.zip / README.INF (.txt) next >
OS/2 Help File  |  1988-01-08  |  114KB  |  3,729 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Using online information ΓòÉΓòÉΓòÉ
  3.  
  4. The most up-to-date information on VX-REXX is available online in the VXΓêÖREXX 
  5. Programmer's Guide and and the VXΓêÖREXX Reference. The Errata section of this 
  6. document lists the differences between the online documentation and the printed 
  7. manual. 
  8.  
  9. In addition to online books, full context sensitive help is available within 
  10. the VX-REXX development environment. Simply activate the VX-REXX window by 
  11. clicking on it, and press the F1 key. A help window will appear, with general 
  12. information about the VX-REXX development environment. You can also access help 
  13. for VX-REXX from its Help menu. For more specific help  on any of VX-REXX's 
  14. menu choices use the cursor keys to choose a menu item, or hold down mouse 
  15. button 1 on the menu item, and press F1. 
  16.  
  17. The context help is linked to the full text of the VXΓêÖREXX Programmer's Guide 
  18. and VXΓêÖREXX Reference. To access help on an object, for example, click on the 
  19. object in the tool palette and press F1. A help window will open with a short 
  20. description of the object. Within the description the object name will appear 
  21. with special highlighting. Double click on this field to see the complete 
  22. reference entry for that object. 
  23.  
  24.  
  25. ΓòÉΓòÉΓòÉ 2. Workplace Shell Integration ΓòÉΓòÉΓòÉ
  26.  
  27.  Workplace Shell (WPS) Integration 
  28.  
  29.  o Create new projects by dragging and dropping 
  30.  o Edit VX-REXX objects using WPS techniques 
  31.  o Drag and drop programming 
  32.  o Assigning icons to your progrmas 
  33.  o Providing help for your programs 
  34.  o Multi-threaded programs 
  35.  o Shutdown and Window List messages 
  36.  o Presentation Manager windows 
  37.  
  38.  
  39. ΓòÉΓòÉΓòÉ <hidden> Create new projects by dragging and dropping a project template ΓòÉΓòÉΓòÉ
  40.  
  41. The Projects folder in the Watcom VX-REXX folder contains a VX-REXX Project 
  42. template. Drag and drop this template to create a new project folder. Open the 
  43. folder and double click on the Project.VRP icon to edit the project. You can 
  44. also open projects by dropping the project (VRP) file on the VX-REXX icon 
  45. contained in the Watcom VX-REXX folder. 
  46.  
  47. For information on developing VX-REXX projects, see Creating and running 
  48. projects in the Programmer's Guide. 
  49.  
  50.  
  51. ΓòÉΓòÉΓòÉ <hidden> Edit VX-REXX objects using Workplace Shell techniques ΓòÉΓòÉΓòÉ
  52.  
  53.  o Use mouse button 1 to select and resize objects. Both marquee and swipe 
  54.    selection are supported. 
  55.  
  56.  o Use mouse button 2 to move objects and to open their pop-up menus. 
  57.  
  58.  o Directly edit text objects by clicking mouse button 1 while pressing the Alt 
  59.    key. 
  60.  
  61.  o Directly modify objects using their property notebooks. You can open a 
  62.    property notebook either by using an object's pop-up menu or by double 
  63.    clicking on the object. 
  64.  
  65.  o Drag and drop fonts and colors from the Workplace Shell font and color 
  66.    palettes. You can drag fonts and colors from these palettes onto VX-REXX 
  67.    objects to set their font and color properties. 
  68.  
  69.    Note that to set the foreground color on an object, press and hold the Ctrl 
  70.    key while dragging and dropping the color,  otherwise the background color 
  71.    will be set. 
  72.  
  73.    For more information, please see Adding objects to a window and Changing 
  74.    object properties in the Programmer's Guide. 
  75.  
  76.  
  77. ΓòÉΓòÉΓòÉ <hidden> Write code using drag and drop programming ΓòÉΓòÉΓòÉ
  78.  
  79. Using the VX-REXX drag and drop programming feature entire programs can be 
  80. written without typing a line of code. For example, to create code to get the 
  81. value of an entry field you simply drag the entry field and drop it on the 
  82. editor where the code is to be inserted. Then you select the Value property 
  83. from a list, click OK, and the code is inserted, complete with the name of the 
  84. entry field. 
  85.  
  86. You can also insert code directly using the Insert code item in the section 
  87. editor's Edit menu, and you can configure VX-REXX to copy the generated code to 
  88. the OS/2 clipboard so you can use this feature with external editors. 
  89.  
  90. The A simple program chapter of the Programmer's Guide shows how to use the 
  91. drag and drop programming feature. 
  92.  
  93.  
  94. ΓòÉΓòÉΓòÉ <hidden> Assign icons to your programs ΓòÉΓòÉΓòÉ
  95.  
  96. Icons can be assigned to VX-REXX executables (EXE) programs using the General 
  97. page of the program's Settings notebook. You can also set the icon by placing 
  98. an icon (ICO) file with the same name as the program in the same directory as 
  99. the program. 
  100.  
  101. Once assigned, a program's icon is used within the Workplace Shell to represent 
  102. the program. It is also used when the program is running as the title bar icon, 
  103. and as the icon used to represent a minimized window. 
  104.  
  105.  
  106. ΓòÉΓòÉΓòÉ <hidden> Provide context sensitive help and status information ΓòÉΓòÉΓòÉ
  107.  
  108. VX-REXX objects include properties that you can use to provide help and status 
  109. information (hints) to your users. The help, either a simple text window or an 
  110. OS/2 Information Presentation Facility help panel, is automatically displayed 
  111. when your user presses F1. Hints are automatically displayed in the status area 
  112. whenever an object has the focus or the pointer is moved over an object. 
  113.  
  114. For more information, please see Adding help to a program in the Programmer's 
  115. Guide. 
  116.  
  117.  
  118. ΓòÉΓòÉΓòÉ <hidden> Create programs with multiple threads ΓòÉΓòÉΓòÉ
  119.  
  120. Every VX-REXX program contains multiple threads. This means your program will 
  121. not freeze the system while it performs long calculations. You can also create 
  122. and control threads within your own program so you can optimize your use of the 
  123. computer. 
  124.  
  125. For more information, please see the StartThread method in the Reference. 
  126.  
  127.  
  128. ΓòÉΓòÉΓòÉ <hidden> Respond to Window List and shutdown messages ΓòÉΓòÉΓòÉ
  129.  
  130. Your users can halt your programs using the OS/2 Window List or by shutting 
  131. down OS/2 -- even when your program is performing long calculations. You can 
  132. provide code to ensure your application shuts down gracefully when interrupted, 
  133. so for example, you can give your users a chance to save or discard their data 
  134. when OS/2 is shut down. 
  135.  
  136. For more information, please see the Halt routine in the Reference. 
  137.  
  138.  
  139. ΓòÉΓòÉΓòÉ <hidden> List, control, and send keys to PM windows ΓòÉΓòÉΓòÉ
  140.  
  141. You can write programs that list and control windows on the OS/2 desktop. You 
  142. can get and set their caption, position and size, and z-order, as well as 
  143. enable, disable, minimize, maximize, and restore them. For more information, 
  144. please see the Working with other programs chapter in the Reference. 
  145.  
  146.  
  147. ΓòÉΓòÉΓòÉ 3. Commonly Asked Questions ΓòÉΓòÉΓòÉ
  148.  
  149.  General 
  150.  
  151.  o Known limits and problems 
  152.  o What are the __TMP directories? 
  153.  o Recovering from system crashes 
  154.  o Running programs from VX-REXX 
  155.  o Modal vs. modeless windows 
  156.  o Common mistakes 
  157.  o Tab order 
  158.  o Using OS/2 file types 
  159.  o Making VX-REXX programs that do not require Presentation Manager 
  160.  o Installation problems 
  161.  
  162.  Objects 
  163.  
  164.  o The VX-REXX console 
  165.  o Using the ComboBox and DropDownComboBox objects 
  166.  o Using the GroupBox object 
  167.  o Object naming 
  168.  o Overlapping objects 
  169.  
  170.  REXX questions 
  171.  
  172.  o Common REXX coding errors 
  173.  o Opening and closing files 
  174.  o Reading and writing files 
  175.  o Returning multiple values 
  176.  
  177.  Compatibility issues 
  178.  
  179.  o Issues with the SOMObjects Toolkit 
  180.  o Issues with OS/2 2.0, Microsoft LAN Manager 
  181.  o Issues with Quercus System's Personal REXX 
  182.  
  183.  
  184. ΓòÉΓòÉΓòÉ <hidden> Known limits and problems ΓòÉΓòÉΓòÉ
  185.  
  186.  Presentation Manager restrictions: 
  187.  
  188.  o ListBox, ComboBox and DropDownComboBox objects can only hold a certain 
  189.    amount of data.  The exact number of lines depends on the length of the 
  190.    lines, but is commonly between 1500 and 2000 lines. 
  191.  o Placing several hundred objects on a Window can exhaust the Presentation 
  192.    Manager memory area, and you will not be able to create any more objects 
  193.    unless you delete some first.  There is usually no valid reason for having 
  194.    so many objects and you should consider splitting your window into two or 
  195.    more windows. 
  196.  
  197.  Video driver problems: 
  198.  
  199.  o Early versions of the Compaq QVision video driver caused problems with 
  200.    VX-REXX and other applications.  Contact Compaq for an updated driver if 
  201.    problems occur. 
  202.  o Problems with VX-REXX have been reported on machines running OS/2 2.11 and 
  203.    ATI video cards based on the MACH-32 chip.  These problems are under 
  204.    investigation. 
  205.  
  206.  Property notebook updating: 
  207.  
  208.  o Open property notebooks are not updated while open to show the results of 
  209.    drag and drop fonts and colors. To refresh the values on a page, turn to 
  210.    another page, then turn back to the first page. Closing and reopening a 
  211.    notebook also refreshes the values. 
  212.  
  213.  Loading files saved as text: 
  214.  
  215.  o Not all syntax errors in text-format (VRT) window files are reported. In 
  216.    these cases the file will load successfully, but the window will not appear. 
  217.    If this happens, fix the syntax errors in the text file and reload it. 
  218.  
  219.  Debugger restrictions: 
  220.  
  221.  o Because of the way the debugger handles breakpoints, it is impossible to 
  222.    break a program on the first instruction in a file. 
  223.  
  224.  o The current version of the interactive debugger supports only the main 
  225.    thread of a program. Use the standard REXX trace instruction with the 
  226.    VX-REXX console to debug multithreaded projects. 
  227.  
  228.  
  229. ΓòÉΓòÉΓòÉ <hidden> The __TMP directories ΓòÉΓòÉΓòÉ
  230.  
  231.  VX-REXX creates temporary directories where it saves all files in an open 
  232.  project. The directory names have the form __TMP<n> where <n> is a number 
  233.  between one and nine. VX-REXX creates these temporary directories under the 
  234.  following directories, in the order listed: 
  235.  
  236.   1. The directory specified in the TMP environment variable, if it is defined. 
  237.   2. The root of the current drive. 
  238.   3. The root of the drive containing VX-REXX. 
  239.  
  240.  Usually, VX-REXX removes its temporary directory when you shut it down. 
  241.  However, if your system crashes while you are editing a project, the temporary 
  242.  directory will be left behind. You can recover the most recent changes to the 
  243.  project using the files in the temporary directory -- see Recovering from 
  244.  system crashes. If you do not want to recover the most recent changes, you are 
  245.  free to delete the temporary directories. 
  246.  
  247.  
  248. ΓòÉΓòÉΓòÉ <hidden> Recovering from system crashes ΓòÉΓòÉΓòÉ
  249.  
  250.  If your OS/2 system crashes or locks up while you are editing a VX-REXX 
  251.  project, it may be possible for you to recover the project. The program 
  252.  RECOVER.EXE has been provided to help in this task. 
  253.  
  254.  Temporary directories 
  255.  
  256.  VX-REXX creates temporary directories where it saves all files in an open 
  257.  project. The directory names have the form __TMP<n> where <n> is a number 
  258.  between one and nine. Attempts are made to create temporary directories under 
  259.  the following directories, in the order listed: 
  260.  
  261.   1. The directory specified in the TMP environment variable, if it is defined. 
  262.   2. The root of the current drive. 
  263.   3. The root of the drive containing VX-REXX. 
  264.  
  265.  A temporary directory contains the macro version of a project. There are files 
  266.  with extensions of VRM and VRW which correspond to project files of the same 
  267.  name but with extensions of VRX and VRY, respectively. 
  268.  
  269.  A temporary directory also contains files with an extension of CMD. These 
  270.  files contain individual sections of a project. All sections can be found in 
  271.  the CMD files. However, the section names and the project files from which the 
  272.  sections were taken are not saved in the temporary directory. 
  273.  
  274.  The RECOVER utility rebuilds a project from the VRM and VRW files in a 
  275.  temporary directory. It does not consider the CMD files. This utility may be 
  276.  able to recover changes to a project which have been lost due to a system 
  277.  crash. 
  278.  
  279.  Using RECOVER 
  280.  
  281.  This program lists temporary directories from which VX-REXX projects can be 
  282.  recovered. The search for these directories is carried out in the locations 
  283.  stated above. Note that the roots of all drives will be searched for temporary 
  284.  directories. If a project needs to be recovered from a network drive or a 
  285.  floppy disk, ensure that the appropriate disk is accessible before running 
  286.  RECOVER. Also, make sure that you do not delete directories that are currently 
  287.  in use by a VX-REXX session. If you are unsure which directories are being 
  288.  used, simply close all VX-REXX sessions before recovering or deleting a 
  289.  directory.  P.To determine which temporary directory contains a particular 
  290.  project, select a directory from the directory listing. The window and code 
  291.  files contained in the directory will be listed. Select a file and then press 
  292.  the View File button in order to view the file. Browse through the directory 
  293.  listing and view files until the project to recover has been found. 
  294.  
  295.  Note that more than one temporary directory may contain a given project. In 
  296.  this case, use the dates of the directories to determine which version of the 
  297.  project needs to be recovered. 
  298.  
  299.  When the directory containing the project to recover has been found, press the 
  300.  RECOVER button. First the name and path of the project file will be requested 
  301.  followed by prompts for new names of the code and window files. Pressing 
  302.  Cancel during any of these prompts will cancel the recovery from the selected 
  303.  directory. It is strongly recommended that new directories be created in which 
  304.  to place the recovered projects as there is no guarantee that the recovered 
  305.  project will work properly. Recovering the project on top of an old copy of 
  306.  the project can be risky. 
  307.  
  308.  After the names of all files in a project have been specified, the project 
  309.  will be recovered and the temporary directory containing the project may be 
  310.  deleted. Usually, this directory is deleted to prevent the accumulation of 
  311.  temporary directories. However, it may be retained if its CMD files need to be 
  312.  examined or recovered, since this utility does not recover these files. 
  313.  
  314.  In addition, there is a Delete button which allows you to delete VX-REXX 
  315.  temporary directories without recovering the projects they contain. You may 
  316.  wish to do this if all available temporary directory names are already in use, 
  317.  which prevents VX-REXX from running. You may also do this if the project in a 
  318.  directory has already been recovered, and so the contents of the directory are 
  319.  no longer needed. 
  320.  
  321.  
  322. ΓòÉΓòÉΓòÉ <hidden> Making VX-REXX programs that do not require Presentation Manager ΓòÉΓòÉΓòÉ
  323.  
  324.  You may use VX-REXX to create applications that run in OS/2 full-screen or 
  325.  windowed sessions providing the following restrictions are met: 
  326.  
  327.   1. The VX-REXX project has no window files. 
  328.   2. The project does not use VRGet, VRSet, VRMethod, VRFileDialog, 
  329.      VRFontDialog, VRMessage, VRMessageStem, VRPrompt, VRWindow, or any other 
  330.      function that can only be run in a Presentation Manager session. 
  331.   3. The executable is marked as a non-PM executable. 
  332.  
  333.  To mark an executable as a non-PM executable, use the exehdr program, which is 
  334.  part of the OS/2 Toolkit and also included with VX-REXX.  For example, to mark 
  335.  test.exe as an executable for use in OS/2 windowed or full-screen sessions, 
  336.  use: 
  337.  
  338.   exehdr /pmtype:windowcompat test.exe
  339.  
  340.  
  341. ΓòÉΓòÉΓòÉ <hidden> Using the ComboBox and DropDownComboBox objects ΓòÉΓòÉΓòÉ
  342.  
  343.  ComboBox and DropDownComboBox behaviour with respect to the Click event 
  344.  changed in version 2.0 of VX-REXX.  Here are the important points to remember: 
  345.  
  346.  o The Click event occurs when a new item in the list is selected, not for each 
  347.    mouse click. 
  348.  
  349.  o When responding to a Click event, use the Selected property or 
  350.    SelectedString property to determine which item in the list was selected. 
  351.    The Value property is not necessarily accurate at that point in time. 
  352.  
  353.  o When responding to a Change event, use the Value property to determine the 
  354.    new value. 
  355.  
  356.  In addition, note that the Height of a DropDownComboBox object is the height 
  357.  of the visible area plus the height of the drop-down list.  If the height is 
  358.  too small, the drop-down list will not be accessible by the user. 
  359.  
  360.  
  361. ΓòÉΓòÉΓòÉ <hidden> Using the GroupBox object ΓòÉΓòÉΓòÉ
  362.  
  363.  In VX-REXX, the GroupBox object contains the objects that are placed inside 
  364.  it.  Objects in a group box cannot be moved outside the group box except by 
  365.  cutting and pasting them. 
  366.  
  367.  
  368. ΓòÉΓòÉΓòÉ <hidden> The VX-REXX console ΓòÉΓòÉΓòÉ
  369.  
  370.  VX-REXX provides a simple console window that is used to display messages that 
  371.  would normally be displayed in an OS/2 window or OS/2 full-screen session. 
  372.  Output from the REXX SAY statement (usually called the standard output stream) 
  373.  is printed on the console.  User input for the REXX PULL statement (usually 
  374.  called the standard input stream) occurs from the console.  Here are a few 
  375.  tips to using the console: 
  376.  
  377.  o To shut off the console or log it to a file, use the VRRedirectStdIO 
  378.    function. 
  379.  
  380.  o The console can be show, hidden, moved or resized under program controls. 
  381.    See the Using objects chapter in the Programmer's Guide and the Console 
  382.    object in the Reference. 
  383.  
  384.  o The console may not always work when running a VX-REXX program as a macro 
  385.    within another application because that application may be intercepting the 
  386.    standard input and output streams.  Refer to that application's 
  387.    documentation. 
  388.  
  389.  
  390. ΓòÉΓòÉΓòÉ <hidden> Running programs from VX-REXX ΓòÉΓòÉΓòÉ
  391.  
  392.  General 
  393.  
  394.  Programs are run from within a VX-REXX project by using the facilities 
  395.  provided by the OS/2 command interpreter, CMD.EXE, and the ADDRESS statement. 
  396.  
  397.  To run a program FOO.EXE and suspend the VX-REXX project until the program has 
  398.  finished, use this syntax: 
  399.  
  400.   address cmd 'foo'
  401.  
  402.  You may use the usual redirection operators, as in: 
  403.  
  404.   address cmd 'dir >out.lst'
  405.  
  406.  To run a program FOO.EXE without waiting for it to finish, use the OS/2 START 
  407.  command: 
  408.  
  409.   address cmd 'start foo'
  410.  To get help for the START command, type help start from and OS/2 window. 
  411.  
  412.  VIO support 
  413.  
  414.  Certain types of OS/2 programs require direct access to the OS/2 console. 
  415.  This direct access is provided by a system facility called "VIO support". 
  416.  Presentation Manager programs such as VX-REXX cannot directly run programs 
  417.  requiring VIO support. If you run such a program, you will get the following 
  418.  error: 
  419.  
  420.   SYS0436: An invalid VIO handle was found
  421.  
  422.  The OS/2 PSTAT command, for example, requires VIO support.  To run such a 
  423.  program from VX-REXX, you must use the START command to run the program in its 
  424.  own OS/2 window: 
  425.  
  426.   address cmd 'start /win pstat <con >con 2>&1'
  427.  
  428.  Redirecting the standard input, output and error streams 
  429.  
  430.  By default, VX-REXX redirects the standard input, output and error streams to 
  431.  its own console window.  If you start a program or an OS/2 command, its output 
  432.  is sent to the console and its input is taken from the console. 
  433.  
  434.  For example, the following instruction sends a directory listing to the 
  435.  console: 
  436.  
  437.   address cmd 'dir'
  438.  
  439.  When you run non-PM programs, the output is sent to the console unless you 
  440.  explicitly redirect it to a file using the > operator: 
  441.  
  442.   address cmd 'dir >out.lst'
  443.  
  444.  Use the < operator to redirect input.  Use the 2> operator to redirect 
  445.  standard error.  Standard error and standard output may be merged by using the 
  446.  syntax 2>&1. 
  447.  
  448.  To redirect to the console instead of a file, use con as the filename: 
  449.  
  450.   address cmd 'start /win pstat <con >con 2>con'
  451.  
  452.  
  453. ΓòÉΓòÉΓòÉ <hidden> Modal vs. modeless windows ΓòÉΓòÉΓòÉ
  454.  
  455.  A modal window disables its parent window, but a modeless window does not. 
  456.  Modal windows must be dimissed before processing can continue in the parent 
  457.  window. 
  458.  
  459.  Modal windows are most often created as the primary window in another window 
  460.  file, and that window file is called whenever the modal window is to be 
  461.  displayed, passing the value of VRWindow as the first parameter.  A modal 
  462.  window may also be created as a secondary window, however, and should be 
  463.  loaded using the wait option of VRLoadSecondary. 
  464.  
  465.  Modal and modeless windows always stay on top of their parent window. If you 
  466.  want a modeless window to act like the main window of your application, you 
  467.  must load it using VRLoad instead of VRLoadSecondary, passing a null string as 
  468.  the parent window. 
  469.  
  470.  For more discussion on modal and modeless windows, see the Creating custom 
  471.  dialogs, Secondary windows, and Multiple file projects chapters in the 
  472.  Programmer's Guide. 
  473.  
  474.  
  475. ΓòÉΓòÉΓòÉ <hidden> Common mistakes ΓòÉΓòÉΓòÉ
  476.  
  477.  Referencing a window before it is loaded 
  478.  
  479.  The primary window in a window file is automatically loaded by VX-REXX, but 
  480.  any secondary windows must be explicitly loaded by calling VRLoadSecondary. 
  481.  If a window is not loaded and you try to set or get any of its properties, a 
  482.  syntax error will occur. 
  483.  
  484.  You can use the VRIsValidObject function to determine if a window or other 
  485.  object is available. 
  486.  
  487.  
  488. ΓòÉΓòÉΓòÉ <hidden> Object naming ΓòÉΓòÉΓòÉ
  489.  
  490.  Two new forms of object naming, parent-child naming and context-sensitive 
  491.  naming, simplify the building of complex projects. 
  492.  
  493.  o Parent-child naming 
  494.  o Context-sensitive naming 
  495.  
  496.  
  497. ΓòÉΓòÉΓòÉ <hidden> Tab order ΓòÉΓòÉΓòÉ
  498.  
  499.  When creating new objects, those objects are placed at the end of the tab 
  500.  order.  Objects pasted into a window, however, are not placed at the end of 
  501.  the tab order. They keep their current tab index and the tab indices of other 
  502.  objects on the window are adjusted accordingly. 
  503.  
  504.  You should create and edit your windows without regard to the tab order, then 
  505.  set the tab order in the final version. To set the tab order, you can either 
  506.  set the TabIndex property on objects in a window, or you can use the tab 
  507.  editor which is described elsewhere in this document. 
  508.  
  509.  
  510. ΓòÉΓòÉΓòÉ <hidden> Issues with the SOMObjects Toolkit ΓòÉΓòÉΓòÉ
  511.  
  512. The initial release of SOM version 2 was not compatible with certain SOM-based 
  513. applications, including VX-REXX. IBM has released a corrective service disk for 
  514. SOM-2. Ask your IBM service representative for the SOM-2 CSD 2.02 or higher. 
  515.  
  516.  
  517. ΓòÉΓòÉΓòÉ <hidden> Issues with OS/2 2.0, Microsoft LAN Manager ΓòÉΓòÉΓòÉ
  518.  
  519.  IBM OS/2 2.0 Service Pak required 
  520.  
  521.  IBM OS/2 version 2.0 with the OS/2 Service Pak or higher must be installed 
  522.  prior to installing VX-REXX. If you are running OS/2 2.0 without the OS/2 
  523.  Service Pak, you must obtain it from IBM and install it to make sure that all 
  524.  features of VX-REXX work correctly. The Service Pak can be number XR06055 or 
  525.  XR06100. You can obtain the Service Pak from the IBM OS/2 BBS, from 
  526.  CompuServe, or directly from IBM. Contact your IBM representative for more 
  527.  information. 
  528.  
  529.  IBM OS/2 2.1 and Microsoft Lan Server 
  530.  
  531.  The released version of OS/2 2.1 does not support Microsoft Lan Server public 
  532.  applications properly. Public applications will work under OS/2 2.1 if an IBM 
  533.  patch for OS/2 2.1 is applied. Contact IBM support and ask for the fix for 
  534.  APAR PJ08829. 
  535.  
  536.  Note that the VROBJ.DLL file must be in the same directory as the VX-REXX 
  537.  executable (EXE) file that uses it, or in some directory listed in your 
  538.  LIBPATH. Your LIBPATH is set in the CONFIG.SYS file in the root of your OS/2 
  539.  volume. 
  540.  
  541.  
  542. ΓòÉΓòÉΓòÉ <hidden> Issues with Quercus System's Personal REXX ΓòÉΓòÉΓòÉ
  543.  
  544.  Syntax errors with Quercus System's Personal REXX 
  545.  
  546.  When running under Quercus System's Personal REXX version 3.0a syntax errors 
  547.  are either reported only within the VX-REXX console or both within the VX-REXX 
  548.  console and the standard VX-REXX error dialog. 
  549.  
  550.  Multithreading problems with Quercus System's Personal REXX 
  551.  
  552.  When running under Personal REXX version 3.0a multithreading problems can 
  553.  occur. Users are encouraged to contact Quercus Systems. 
  554.  
  555.  Contacting Quercus Systems 
  556.  
  557.  For more information on Personal REXX, please contact Quercus Systems at the 
  558.  following address: 
  559.  
  560.       Quercus Systems
  561.       P.O. Box 2157
  562.       Saratoga, CA 95070
  563.       USA
  564.       (408) 867-7399
  565.       (408) 867-7489 (FAX)
  566.  
  567.  
  568. ΓòÉΓòÉΓòÉ <hidden> Overlapping objects ΓòÉΓòÉΓòÉ
  569.  
  570.  Overlapping objects may not be displayed correctly unless the ClipSiblings 
  571.  property is set for every object that intersects another object.  See the 
  572.  section on moving objects to the front and back in Adding objects to a window 
  573.  for more details. 
  574.  
  575.  
  576. ΓòÉΓòÉΓòÉ <hidden> Common REXX coding errors ΓòÉΓòÉΓòÉ
  577.  
  578.  Blank space where it does not belong 
  579.  
  580.  In REXX expressions, blank space is interpreted as an implicit concatenation 
  581.  operator (the terms are concatenated with a blank in between). As a result, 
  582.  REXX will interpret many mistyped statements as an expression involving the 
  583.  blank concatenation operator. 
  584.  
  585.  For example, inserting a blank after a function name in a function call 
  586.  changes the meaning of the expression: 
  587.  
  588.   textUpper = translate ( text )
  589.  
  590.  to: 
  591.  
  592.   textUpper = "TRANSLATE" || " " || text
  593.  
  594.  Blank space also plays a special role in the parse instruction. Compare the 
  595.  following: 
  596.  
  597.   parse arg a b c
  598.   parse arg a, b, c
  599.  
  600.  The first line parses the first argument passed to the routine into three 
  601.  parts, the second line sets the three variables to the value of the first 
  602.  three arguments passed to the routine. 
  603.  
  604.  Function calls versus the CALL statement 
  605.  
  606.  When you call a routine that returns a result, you must enclose the parameters 
  607.  in parentheses: 
  608.  
  609.   text = VRGet( "EF_1", "Value" )
  610.  
  611.  If you are calling a routine that does not return a value, you should use the 
  612.  call instruction: 
  613.  
  614.   call VRSet "EF_1", "BackColor", "Blue"
  615.  
  616.  Note that there is no comma between the name of the routine and the first 
  617.  parameter. 
  618.  
  619.  Ignoring return values of functions 
  620.  
  621.  When using a function as a procedure, you must not ignore the return value. If 
  622.  the return value is not handled it will be passed to the default host 
  623.  environment as a command. This will normally result in a failure trace 
  624.  message. Either assign the returned value to a variable or use the call 
  625.  instruction to call the function as a procedure. 
  626.  
  627.  Line continuation 
  628.  
  629.  In REXX, the comma is the line continuation character. It is required when 
  630.  extending one clause over several lines. For example, 
  631.  
  632.   call foo a, b, c
  633.  
  634.  can also be written as 
  635.  
  636.   call foo a, ,
  637.            b, ,
  638.            c
  639.  
  640.  It is easy to forget the second comma if you are breaking a line in the middle 
  641.  of a parameter list. 
  642.  
  643.  Omitted arguments 
  644.  
  645.  REXX allows arguments to be omitted. Be careful not to omit arguments by 
  646.  accident. 
  647.  
  648.  The following calls foo with four arguments (the first one is omitted). 
  649.  
  650.   call foo, a, b, c
  651.  
  652.  Undefined variables 
  653.  
  654.  It is not a syntax error to use undefined variables in REXX. Undefined 
  655.  variables are defined to have their own name translated to uppercase as their 
  656.  value. As a result it is often difficult to find programming errors that are a 
  657.  result of using undefined variables. 
  658.  
  659.     o Add a "SIGNAL ON NOVALUE" statement to the main section of your programs. 
  660.       This will cause the system to issue a syntax error if you use an 
  661.       undefined variable. 
  662.  
  663.     o Be careful to include the period when referring to stems. The variables A 
  664.       and A. are unrelated. 
  665.  
  666.     o Misspelled commands will often be interpreted as undefined variables. The 
  667.       line 
  668.  
  669.             sy 'hello'
  670.  
  671.       (which should be "say 'hello'") will be interpreted as 
  672.  
  673.             "SY" || " " || 'hello'
  674.  
  675.       Thus the string "SY hello" will be sent to OS/2 for execution, resulting 
  676.       in a command failure error. 
  677.  
  678.  Using expressions in the tail of a compound symbol 
  679.  
  680.  The tail of a compound symbol can only be a simple variable, as in: 
  681.  
  682.   ok = A.I
  683.  
  684.  Literals are not allowed. For example, the following is interpreted as a 
  685.  concatenation between A. and "name" 
  686.  
  687.   bad = A."name"
  688.  
  689.  Expressions are not allowed. The following is interpreted as "bad = (A.I) - 
  690.  1". 
  691.  
  692.   bad = A.I-1
  693.  
  694.  A way around this is to assign the literal or expression to a simple variable 
  695.  and use that to form the compound variable. For example: 
  696.  
  697.   J = I - 1
  698.   ok = A.J
  699.  
  700.  
  701. ΓòÉΓòÉΓòÉ <hidden> Opening and closing files ΓòÉΓòÉΓòÉ
  702.  
  703.  Explicit open and close commands are not required to read and write files 
  704.  using REXX, but you must be aware that once you access a file it is left open 
  705.  unless you explicitly close it. You cannot delete files that are open and you 
  706.  may be unable to open new files if all available file handles have been used. 
  707.  
  708.  To avoid such problems, be sure your REXX program closes any files it opens as 
  709.  soon as it is done with them. For example, the following code opens a file 
  710.  called baker, writes to it, and closes it: 
  711.  
  712.   call stream "baker", "c", "open write"
  713.   call lineout "baker", "Skip to the loo"
  714.   call stream "baker", "c", "close"
  715.  
  716.  For more information about the stream instruction, see the online REXX 
  717.  Information. 
  718.  
  719.  
  720. ΓòÉΓòÉΓòÉ <hidden> Reading and writing files ΓòÉΓòÉΓòÉ
  721.  
  722.  Data is read from a file using the LINEIN and CHARIN functions. 
  723.  
  724.  Data is written to a file using the LINEOUT and CHAROUT functions. 
  725.  
  726.  These functions can also be used to read and write from serial ports, however 
  727.  there also exist REXX function libraries geared specifically towards this 
  728.  task. 
  729.  
  730.  
  731. ΓòÉΓòÉΓòÉ <hidden> Returning multiple values ΓòÉΓòÉΓòÉ
  732.  
  733.  Multiple values can be returned from a function by concatenating them into a 
  734.  single string, returning the string, then using parse to break the return 
  735.  string into separate values. 
  736.  
  737.  Another way to return multiple values is to use the PutVar and GetVar methods. 
  738.  
  739.  
  740. ΓòÉΓòÉΓòÉ <hidden> Using OS/2 file types ΓòÉΓòÉΓòÉ
  741.  
  742.  OS/2 files have the concept of a file type which may be associated with every 
  743.  file. The file type is a text string which describes the contents of the file. 
  744.  Not all files have a file type (ie. the file type is the null string). The 
  745.  following file types are predefined by OS/2: 
  746.  
  747.  Assembler Code 
  748.  Binary Data 
  749.  Bitmap 
  750.  C Code 
  751.  DOS Command File 
  752.  Dynamic Link Library 
  753.  Executable 
  754.  FORTRAN Code 
  755.  Icon 
  756.  Library 
  757.  Metafile 
  758.  Object Code 
  759.  OS/2 Command File 
  760.  Pascal Code 
  761.  Plain Text 
  762.  Resource File 
  763.  
  764.  You can get a list of all file types defined on your computer by using the 
  765.  VRListFileTypes function. To set the file type for a file, use the 
  766.  VRSetFileType function. The VRGetFileType function returns the file type for a 
  767.  given file. 
  768.  
  769.  You can pass file types to the VRFileDialog function to display files that 
  770.  have a certain file type. 
  771.  
  772.  
  773. ΓòÉΓòÉΓòÉ <hidden> Installation problems ΓòÉΓòÉΓòÉ
  774.  
  775.  The installer says "Fatal Error: Target Directory is Read-Only" 
  776.  
  777.  The installer may display this message if you are installing over an existing 
  778.  copy of VX-REXX and there are read-only files in the VXREXX directory tree. 
  779.  
  780.  The solution is to remove the read-only protection from all files in the 
  781.  directory tree, then try installing again. To remove the read-only protection, 
  782.  follow these steps: 
  783.  
  784.      1. Open an OS/2 command window. 
  785.  
  786.      2. Change to the VXREXX directory. Type 
  787.  
  788.                     cd \vxrexx
  789.  
  790.      3. Reset the read-only file attribute. Type 
  791.  
  792.                     ATTRIB -R * /S
  793.  
  794.  
  795. ΓòÉΓòÉΓòÉ 4. Errata ΓòÉΓòÉΓòÉ
  796.  
  797.  Errata: 
  798.  
  799.  August 1994 printing 
  800.  
  801.  Manual Omissions 
  802.  Corrections and Additions 
  803.  
  804.  
  805. ΓòÉΓòÉΓòÉ <hidden> Omissions from the printed manual ΓòÉΓòÉΓòÉ
  806.  
  807.  The following functions and methods are described only in the online version 
  808.  of the Reference: 
  809.  
  810.  (none) 
  811.  
  812.  
  813. ΓòÉΓòÉΓòÉ <hidden> Corrections and additions ΓòÉΓòÉΓòÉ
  814.  
  815.  The following table lists corrections and additions to the August 1994 
  816.  printing of WATCOM VX-REXX Programmer's Guide and Reference. The number in the 
  817.  left column is the page number, and the right column describes the necessary 
  818.  change. 
  819.  
  820.  86                  In the "Renaming an object" section, the second label in 
  821.                      both event routines should be PB_Start_ClickEnd:. 
  822.  
  823.  125                 A new section called "Selecting records" has been added. 
  824.                      See the online version of the Programmer's Guide. 
  825.  
  826.  133                 Before the "Programming with the DragDrop event" section, 
  827.                      an additional note was added regarding the Source 
  828.                      attribute and dragging within a single container. See the 
  829.                      online version of the Programmer's Guide. 
  830.  
  831.  139                 The last paragraph on the page should start "To set the 
  832.                      types of all items at once..." 
  833.  
  834.  196                 The first code sample in the "Returning multiple values" 
  835.                      section should be as follows: 
  836.  
  837.                                           call Window2
  838.                                           call VRMethod "Application", "GetVar", "parm."
  839.                                           say "Window2 returned" parm.1 "and" parm.2
  840.  
  841.  
  842. ΓòÉΓòÉΓòÉ 5. New since version 2.1 ΓòÉΓòÉΓòÉ
  843.  
  844.  
  845. ΓòÉΓòÉΓòÉ 5.1. New in version 2.1b ΓòÉΓòÉΓòÉ
  846.  
  847.  What's new in version 2.1b: 
  848.  
  849.  Design environment: 
  850.  
  851.  General 
  852.  
  853.  Runtime environment: 
  854.  
  855.  Objects 
  856.  Functions 
  857.  
  858.  
  859. ΓòÉΓòÉΓòÉ <hidden> General ΓòÉΓòÉΓòÉ
  860.  
  861.  o Autosave prompt 
  862.  
  863.    The autosave prompt now returns the focus to whatever window had the focus 
  864.    before the prompt appeared. Also, the autosave prompt does not appear if the 
  865.    VX-REXX design environment is minimized. 
  866.  
  867.  o Property notebook help 
  868.  
  869.    Previously, if you pressed the F1 key to get help while in a window object's 
  870.    property notebook, the VX-REXX design environment would sometimes shut down. 
  871.    This problem has been fixed. 
  872.  
  873.  o OOREXX beta 
  874.  
  875.    VX-REXX has been modified to work with the IBM OOREXX beta software. 
  876.  
  877.  o Section editor 
  878.  
  879.    The stability of the section editor while saving large sections has been 
  880.    improved. 
  881.  
  882.  
  883. ΓòÉΓòÉΓòÉ <hidden> Objects ΓòÉΓòÉΓòÉ
  884.  
  885.  o Screen object 
  886.  
  887.    The GetFocusWindow and GetActiveWindow methods for this object now accept 
  888.    the optional parameter Object. This parameter causes these methods to return 
  889.    a VX-REXX object handle instead of a Presentation Manager window handle. 
  890.    Also, the FindWindow method no longer causes an access violation if you pass 
  891.    it an invalid second parameter. 
  892.  
  893.  o SpinButton object 
  894.  
  895.    You can now clear the SpinButton list by calling the SetStringList method 
  896.    and specify a list of zero length, or the empty string. 
  897.  
  898.  o ComboBox and DropDownComboBox objects 
  899.  
  900.    Previously, if the focus changed from an object with a Verify event to a 
  901.    ComboBox or a DropDownComboBox object, the Verify event routine would not be 
  902.    run. Now this event is called correctly. 
  903.  
  904.  o Application object 
  905.  
  906.    The PutClipboard method used to return 0 even if information was put into 
  907.    the clipboard successfully. Now 1 is returned in this case. 
  908.  
  909.  o Container object 
  910.  
  911.    The behavior of the container object was changed so that when the user does 
  912.    a drag and drop operation within a container, the record being dragged is 
  913.    not automatically moved if the drag is a copy or a link operation. The 
  914.    record is still moved automatically if the user is performing a drag and 
  915.    drop move operation. 
  916.  
  917.    Direct editing in a container now works correctly when the container is in 
  918.    split view. Previously, tabbing over the splitbar did not work when in 
  919.    direct edit mode. 
  920.  
  921.    The SetFieldAttr method now accepts Name as one of the attributes that can 
  922.    be set for the record. 
  923.  
  924.  o PictureBox object 
  925.  
  926.    Previously, changing the Pointer property on a window would not affect the 
  927.    pointer when it was moved over a PictureBox object. Now the pointer remains 
  928.    set when moved over a PictureBox object. 
  929.  
  930.  o MoveRecord event 
  931.  
  932.    The VRInfo function previously would return the empty string if passed the 
  933.    parameter SourceRecord in the MoveRecord event. Now this attribute is set 
  934.    correctly. 
  935.  
  936.  o Font property 
  937.  
  938.    Previously, setting the font property of an object would not always set the 
  939.    font to use the correct code page, resulting in some characters being 
  940.    displayed incorrectly. 
  941.  
  942.  
  943. ΓòÉΓòÉΓòÉ <hidden> Functions ΓòÉΓòÉΓòÉ
  944.  
  945.  o VRIsDir and VRDir functions 
  946.  
  947.    Previously, the VRIsDir function would sometimes cause a problem in the 
  948.    VRDir function on LAN Server remote drives. This problem has been fixed. 
  949.    Also, the VRIsDir function would return 1 if passed any parameter that ended 
  950.    with a backslash character, even if the specified directory did not exist. 
  951.    Now 1 is only returned if the specified parameter is a real directory. 
  952.  
  953.  o VRInfo( "Source" ) 
  954.  
  955.    Previously, calling VRInfo( "Source" ) from the ContextMenu event of a 
  956.    container in details view would not return the correct handle. Now the 
  957.    correct handle is returned. 
  958.  
  959.  
  960. ΓòÉΓòÉΓòÉ 5.2. New in version 2.1a ΓòÉΓòÉΓòÉ
  961.  
  962.  What's new in version 2.1a: 
  963.  
  964.  Design environment: 
  965.  
  966.  General 
  967.  
  968.  Runtime environment: 
  969.  
  970.  Containers 
  971.  Functions 
  972.  Objects 
  973.  
  974.  
  975. ΓòÉΓòÉΓòÉ <hidden> General ΓòÉΓòÉΓòÉ
  976.  
  977.  o VX-REXX now works with OS/2 3.0. 
  978.  
  979.  o Previously, shared sections would be saved in expanded form as part of your 
  980.    project if it was saved after generating an executable file, or running your 
  981.    project from the design environment. Now shared sections are only saved in 
  982.    your generated executable, or while your project is running. They are not 
  983.    expanded within your project's code files. 
  984.  
  985.  o Drag and drop coding has been fixed for the PostEvent method, the 
  986.    SetFieldAttr method, and the SetRecordAttr method. 
  987.  
  988.  o The VX-REXX design environment now works with Personal REXX installed. 
  989.  
  990.  o The VX-REXX design environment no longer treats object names in a case 
  991.    sensitive manner, so you cannot have two objects named PB_1 and pb_1. 
  992.  
  993.  
  994. ΓòÉΓòÉΓòÉ <hidden> Containers ΓòÉΓòÉΓòÉ
  995.  
  996.  o BackColor property 
  997.  
  998.    Previously, if the BackColor of a container object was set to the value 
  999.    <default>, it would appear the same color as the parent window in the design 
  1000.    environment, but changed color at run time. 
  1001.  
  1002.  o DragDiscard event 
  1003.  
  1004.    On some systems, the DragDiscard event would not be generated when a record 
  1005.    was dragged from a container onto the shredder. This problem has been fixed. 
  1006.  
  1007.  o Painting property 
  1008.  
  1009.    Adding record to a container while painting is turned off no longer causes 
  1010.    the records to appear at inappropriate locations when the Painting property 
  1011.    is turned back on. 
  1012.  
  1013.  o SetRecordAttr method 
  1014.  
  1015.     - You can now use the SetRecordAttr method to make a record invisible even 
  1016.       if the container's Painting or Visible properties are turned off. 
  1017.  
  1018.     - The SetRecordAttr method no longer leaves holes in the record list when a 
  1019.       record's visible property is changed. 
  1020.  
  1021.     - You can now use the SetRecordAttr method to set a record's Icon and 
  1022.       Caption attributes in the same method call. 
  1023.  
  1024.  o Dragging records 
  1025.  
  1026.    Dragging a record with no icon and no dragging icon that was only partially 
  1027.    visible when the drag started no longer leaves a visible trail along the 
  1028.    path of the drag. 
  1029.  
  1030.  o DragDrop event 
  1031.  
  1032.     - When dropping multiple objects, the VRInfo value returned when passed the 
  1033.       parameters Top, Left, and Bottom now returns correct values for all 
  1034.       records, not just the first record. 
  1035.     - When dropping multiple records, the VRInfo value returned when passed the 
  1036.       parameter TargetObject now returns the correct value, even when the 
  1037.       records are dropped near the edge of the container. 
  1038.  
  1039.  o GetFieldList method 
  1040.  
  1041.    This method now returns 1 when successful. 
  1042.  
  1043.  o FindRecord method 
  1044.  
  1045.    This method no longer causes your program to fail when executed after an 
  1046.    invisible record has been deleted. 
  1047.  
  1048.  o AddRecord and AddRecordList methods 
  1049.  
  1050.    These method no longer fail when the same record handle is passed as the 
  1051.    parent and position parameters. 
  1052.  
  1053.  o ForeColor property 
  1054.  
  1055.    The container ForeColor property now accepts values such as Blue and 
  1056.    SystemWindowText as well as accepting RGB values. 
  1057.  
  1058.  o OpenEdit method 
  1059.  
  1060.    Previously, using the OpenEdit method for a field that was right of the 
  1061.    split bar would cause the editing field to appear in the left half of the 
  1062.    container rather than the right half. This problem has been fixed. 
  1063.  
  1064.  
  1065. ΓòÉΓòÉΓòÉ <hidden> Functions ΓòÉΓòÉΓòÉ
  1066.  
  1067.  o VRInfo function 
  1068.  
  1069.    The VRInfo function would sometimes return an incorrect value when passed 
  1070.    the parameter SourceIndex or TargetIndex if the source or target was a 
  1071.    ValueSet object. Now the correct index is returned. 
  1072.  
  1073.  
  1074. ΓòÉΓòÉΓòÉ <hidden> Objects ΓòÉΓòÉΓòÉ
  1075.  
  1076.  o Menu object, MenuItem object, and MenuBar object 
  1077.  
  1078.    These objects no longer have Query and QueryColumns properties. 
  1079.  
  1080.  o ImageRadioButton object 
  1081.  
  1082.    This object no longer has the BoundSetValue property. 
  1083.  
  1084.  o MultilineEntryField object 
  1085.  
  1086.    MultilineEntryFields can now have their Value property set to a string that 
  1087.    is longer than their TextLimit property. The string is truncated to a length 
  1088.    equal to the TextLimit. 
  1089.  
  1090.  o Notebook object 
  1091.  
  1092.    If an entry in the InitialPageList property of the notebook contains tab 
  1093.    text but no window name, the entry is ignored. 
  1094.  
  1095.  
  1096. ΓòÉΓòÉΓòÉ 6. Previous versions ΓòÉΓòÉΓòÉ
  1097.  
  1098.  
  1099. ΓòÉΓòÉΓòÉ 6.1. New in version 2.1 ΓòÉΓòÉΓòÉ
  1100.  
  1101.  What's new in version 2.1: 
  1102.  
  1103.  Design environment 
  1104.  
  1105.  General 
  1106.  Code sharing 
  1107.  Object renaming 
  1108.  New options 
  1109.  Menu editor 
  1110.  Section editor 
  1111.  Code generation macros 
  1112.  Property notebook 
  1113.  Secondary windows 
  1114.  
  1115.  Runtime environment 
  1116.  
  1117.  General 
  1118.  Parent-child naming 
  1119.  Context-sensitive naming 
  1120.  Drag-drop support 
  1121.  Functions 
  1122.  Methods 
  1123.  Properties and events 
  1124.  Objects 
  1125.  Window manipulation 
  1126.  
  1127.  Sample programs 
  1128.  
  1129.  Bounce 
  1130.  CUA 91 
  1131.  
  1132.  
  1133. ΓòÉΓòÉΓòÉ <hidden> Property notebook changes ΓòÉΓòÉΓòÉ
  1134.  
  1135.  o The property notebook now uses a 10 point "Helv" font. 
  1136.  
  1137.  o Context-sensitive help is available for any property or event by pressing 
  1138.    F1. 
  1139.  
  1140.  o New property notebooks open to the last page that was turned to in an 
  1141.    already open property notebook.  This makes it easier to change the same 
  1142.    property on different objects. 
  1143.  
  1144.  
  1145. ΓòÉΓòÉΓòÉ <hidden> Secondary window changes ΓòÉΓòÉΓòÉ
  1146.  
  1147.  The following changes have been made to the way secondary windows are created 
  1148.  by the design environment: 
  1149.  
  1150.  o Previously, modal secondary windows had to kept in a separate file. This 
  1151.    restriction has now been removed. You can open a modal secondary window from 
  1152.    the same file by using the new "W" parameter to the VRLoadSecondary 
  1153.    function. If you do this, VRLoadSecondary will not return until the user has 
  1154.    closed the window. 
  1155.  
  1156.  o The code to make secondary windows visible has been moved from the 
  1157.    VRLoadSecondary function to the Create event for the secondary windows 
  1158.    themselves. 
  1159.  
  1160.    This means that if you copy the new VRLoadSecondary function into an old 
  1161.    project created with VX-REXX version 2.0 or earlier, you will also have to 
  1162.    make a Create event for the secondary window and add code to make the window 
  1163.    visible. 
  1164.  
  1165.  
  1166. ΓòÉΓòÉΓòÉ <hidden> Parent-child object naming ΓòÉΓòÉΓòÉ
  1167.  
  1168.  Version 2.0 introduced parent-child object naming, where if you had two 
  1169.  objects with the same name (on two different secondary windows, for example) 
  1170.  you could distinguish between them by including the name of the parent object, 
  1171.  as in: 
  1172.  
  1173.   call VRSet 'SW_1.PB_1', 'Caption', 'First'
  1174.   call VRSet 'SW_2.PB_1', 'Caption', 'Second'
  1175.  
  1176.  If an object was contained inside a group box, you could extend the notation: 
  1177.  
  1178.   call VRSet 'SW_1.GB_2.PB_1', 'Caption', 'In the box'
  1179.  
  1180.  This notational convenience has been extended so that you do not have to 
  1181.  specify every parent object. If MyButton is a push button inside the group box 
  1182.  MyGroup located on the window MyWindow, the following notations all work: 
  1183.  
  1184.   call VRSet 'MyWindow.MyGroup.MyButton', 'Caption', 'A'
  1185.   call VRSet 'MyWindow.MyButton', 'Caption', 'B'
  1186.   call VRSet 'MyGroup.MyButton', 'Caption', 'C'
  1187.   call VRSet 'MyButton', 'Caption', 'D'
  1188.  
  1189.  (If there are two group boxes called MyGroup on different windows, only the 
  1190.  first two forms uniquely identify the object.) 
  1191.  
  1192.  The internal handle of an object, obtained using: 
  1193.  
  1194.   handle = VRGet( 'MyWindow', 'Self' )
  1195.  
  1196.  or inside an event routine using: 
  1197.  
  1198.   object = VRInfo( 'Object' )
  1199.  
  1200.  can be substituted for a symbolic name at any point: 
  1201.  
  1202.   handle = VRGet( 'MyWindow', 'Self' )
  1203.   call VRSet handle || '.PB_2', 'Caption', 'foo'
  1204.  
  1205.  
  1206. ΓòÉΓòÉΓòÉ <hidden> Context-sensitive object naming ΓòÉΓòÉΓòÉ
  1207.  
  1208.  If an object name is passed to VRGet, VRSet or VRMethod, the Window where the 
  1209.  last event was generated is searched first. In other words, if inside the 
  1210.  Click event for PB_1 you say: 
  1211.  
  1212.   call VRSet 'PB_1', 'Caption', 'Foo'
  1213.  
  1214.  the new behaviour is equivalent to: 
  1215.  
  1216.   window = VRInfo( "Window" )
  1217.   if( VRIsValidObject( window || '.PB_1' ) )then
  1218.       call VRSet window || '.PB_1', 'Caption', foo
  1219.   else
  1220.       call VRSet 'PB_1', 'Caption', foo
  1221.  
  1222.  The name of the Window on which the object is located is implicitly added to 
  1223.  the front of the object name. 
  1224.  
  1225.  This behaviour only applies to programs generated using VX-REXX 2.1. You can 
  1226.  explicitly turn it off using: 
  1227.  
  1228.   call VROptions 'NoImplicitNames'
  1229.  
  1230.  or turn it on using: 
  1231.  
  1232.   call VROptions 'ImplicitNames'
  1233.  
  1234.  Unless explicitly changed, programs created with earlier versions of VX-REXX 
  1235.  do not exhibit the new behaviour. 
  1236.  
  1237.  
  1238. ΓòÉΓòÉΓòÉ <hidden> Code sharing ΓòÉΓòÉΓòÉ
  1239.  
  1240.   Shared routines (sections) can be added to a file using the Section List 
  1241.  window and the Add menu item. You will be prompted for the name of a file. The 
  1242.  contents of the file will be appended to the current code or window file when 
  1243.  the project is compiled into an executable or a macro. 
  1244.  
  1245.  You may edit a shared section by double clicking on the entry in the section 
  1246.  list. 
  1247.  
  1248.  If a relative path name is given, the file will be searched for in the 
  1249.  following order:  relative to the project directory, then relative to the 
  1250.  directories in the VXINCLUDE environment variable, then relative to the 
  1251.  directory in the VXREXX environment variable. 
  1252.  
  1253.  
  1254. ΓòÉΓòÉΓòÉ <hidden> General ΓòÉΓòÉΓòÉ
  1255.  
  1256.  o Objects can be dragged from the tool palette and dropped onto a window. 
  1257.  
  1258.  o The design environment prompts you for a window name when creating new 
  1259.    primary or secondary windows. 
  1260.  
  1261.  o The menus the Window, Section and File lists are now accessible as popup 
  1262.    menus as well. 
  1263.  
  1264.  o The system menu for primary and secondary windows is now active in design 
  1265.    mode. This means that you can close a window in the design environment by 
  1266.    double clicking on its system menu. 
  1267.  
  1268.  o The menu editor has been moved to the Open menu item on the pop-up menu for 
  1269.    the Window object. 
  1270.  
  1271.  o A Tab Editor can be used to set the tab order of objects on a window.  It is 
  1272.    accessed by selecting the Tab editor... item from the Open... menu on the 
  1273.    Window object's pop-up menu. 
  1274.  
  1275.  o A new Close window menu item has been added to the Window pop-up menu. You 
  1276.    may use this for closing a Window with no system menu. 
  1277.  
  1278.  o When a secondary window is created, new Init and Fini routines for that 
  1279.    window are created.  The Create and Close events automatically call the Init 
  1280.    and Fini routines. 
  1281.  
  1282.  o The UserData property is now encoded when a file is saved as a text file. 
  1283.  
  1284.  o Sections can be renamed. 
  1285.  
  1286.  o Hints are now displayed at design time. 
  1287.  
  1288.  
  1289. ΓòÉΓòÉΓòÉ <hidden> Object renaming ΓòÉΓòÉΓòÉ
  1290.  
  1291.  The design environment includes some enhancements to object renaming: 
  1292.  
  1293.  o Clicking on an object while holding the Alt and Shift keys down can be used 
  1294.    to change the name of the object. 
  1295.  
  1296.  o When an object is renamed, the design environment updates references to that 
  1297.    object in the REXX code. The references that are changed all have the format 
  1298.    name_suffix, where name is the old name of the object and suffix is any 
  1299.    string without underscores.  To be changed, name must be a string starting 
  1300.    with a series of alphabetic characters followed by an underscore and any 
  1301.    sequence of alphanumeric characters. Only the following references are 
  1302.    changed in the REXX code: 
  1303.  
  1304.     - Literal strings 
  1305.     - Labels 
  1306.     - call and signal instructions 
  1307.  
  1308.    For example, if the object PB_1 is renamed to PB_Open, the following code: 
  1309.  
  1310.       PB_1_Click:
  1311.           if( VRGet( "PB_1", "Caption" \= "" ) then signal PB_1_ClickEnd
  1312.           call VRSet "PB_1", "Caption", "Clicked"
  1313.       PB_1_ClickEnd:
  1314.       return
  1315.  
  1316.    is updated to: 
  1317.  
  1318.       PB_Open_Click:
  1319.           if( VRGet( "PB_Open", "Caption" \= "" ) then signal PB_Open_ClickEnd
  1320.           call VRSet "PB_Open", "Caption", "Clicked"
  1321.       PB_Open_ClickEnd:
  1322.       return
  1323.  
  1324.    But note that if PB_1 had been renamed to Foo, then renaming Foo to another 
  1325.    name would only rename the sections that belong to Foo, and not any 
  1326.    references in the REXX code. 
  1327.  
  1328.  
  1329. ΓòÉΓòÉΓòÉ <hidden> New options ΓòÉΓòÉΓòÉ
  1330.  
  1331.  The Options menu has been reorganized: 
  1332.  
  1333.  o Run options has been moved from the Options menu to the Run menu. 
  1334.  
  1335.  o The new Autosave item can be used to set timed reminder messages for saving 
  1336.    your project.  An option is also available to automatically save the project 
  1337.    before running or debugging it. 
  1338.  
  1339.  o The new Messages item lets you control the verbosity of the design 
  1340.    environment. 
  1341.  
  1342.  o The new Object libraries item lets you automatically load object libraries. 
  1343.    This item replaces the Add object library and Remove object library items in 
  1344.    previous versions of VX-REXX. 
  1345.  
  1346.  o The Editor item now allows you to specify a default header for new sections, 
  1347.    and to use the VX-REXX section editor instead of an external editor when 
  1348.    editing files. 
  1349.  
  1350.  o The new Advanced item controls whether or not executables made with VX-REXX 
  1351.    are compressed (the default) or simply encoded. 
  1352.  
  1353.  
  1354. ΓòÉΓòÉΓòÉ <hidden> Menu editor ΓòÉΓòÉΓòÉ
  1355.  
  1356.  o The menu editor is now accessed from the Open... item of the pop-up menu or 
  1357.    by double-clicking on the window menubar. 
  1358.  
  1359.  o A bug in the menu editor has been fixed allowing the editing of menu items 
  1360.    with the same caption. 
  1361.  
  1362.  o A Clear button has been added to the menu editor, which clears the current 
  1363.    values in preparation for inserting a new menu or menu item. 
  1364.  
  1365.  o After editing, menus can be viewed at design time. Simply select the menu sa 
  1366.    you normally would.  You may also double click on a menu or menu item to 
  1367.    bring up its property notebook. 
  1368.  
  1369.  
  1370. ΓòÉΓòÉΓòÉ <hidden> Section editor ΓòÉΓòÉΓòÉ
  1371.  
  1372.  o Fixed the bug that could cause a crash when selecting large amounts of text. 
  1373.  
  1374.  o Fonts and colors dragged from the OS/2 font and color palettes are now 
  1375.    supported.  Fonts and colors may also be changed using the items under the 
  1376.    Settings menu. 
  1377.  
  1378.  o Font, color and window size settings can be saved. 
  1379.  
  1380.  o Menu items and accelerators have been added to run the project and to switch 
  1381.    to various windows. 
  1382.  
  1383.  o Case-sensitive search and replace can now be done. 
  1384.  
  1385.  o Easier access to online help. 
  1386.  
  1387.  o Characters are no longer missing when exporting selected text to a file. 
  1388.  
  1389.  
  1390. ΓòÉΓòÉΓòÉ <hidden> Code generation macros ΓòÉΓòÉΓòÉ
  1391.  
  1392.  o The "Add records from a directory" container method (FillFromDir) now 
  1393.    generates correct code. 
  1394.  
  1395.  
  1396. ΓòÉΓòÉΓòÉ <hidden> General ΓòÉΓòÉΓòÉ
  1397.  
  1398.  o The VX-REXX run time libraries are now built with Pentium optimizations. 
  1399.  
  1400.  o Events can be added dynamically at run time using the DefineEvent method. 
  1401.  
  1402.  o Picture references are now cached, resulting in better performance, 
  1403.    especially with container icon references. 
  1404.  
  1405.  
  1406. ΓòÉΓòÉΓòÉ <hidden> Drag and drop ΓòÉΓòÉΓòÉ
  1407.  
  1408. All objects can now act both as drag sources and drag targets, as controlled by 
  1409. the following events and properties:  AllowDrag, DragDrop, DragIcon, DragStart, 
  1410. DragTarget, StartDrag. 
  1411.  
  1412. Drag targets 
  1413.  
  1414. To act as a drag target, the DragTarget property must be set to a value other 
  1415. than "None" AND the DragDrop event must be defined. The special value "Parent" 
  1416. may be used to let the parent object act as the drag target instead of the 
  1417. object itself. Otherwise, valid drag targets are "Record", "Files=", 
  1418. "Filetypes=", "Objects", "Formats=". The first three work as described for the 
  1419. Container's DragTarget property. If "Objects" is specified, VX-REXX objects 
  1420. from the same application can be dropped onto the application. "Formats=" 
  1421. allows you to specify in detail the exact rendering formats the object will 
  1422. accept as a drag target. 
  1423.  
  1424. The DragTarget property can also specify the default operation and the 
  1425. supported operations. For example, to define an object that allows *.TXT files 
  1426. to be dropped on it, with a default Copy operation and only allows Link and 
  1427. Copy: 
  1428.  
  1429. Files="*.TXT";Default=Copy;Operations=Link,Copy
  1430.  
  1431. When an acceptable object is dropped on a VX-REXX object, a DragDrop event is 
  1432. defined and information is made available about the dropped object. The 
  1433. following items can be accessed using VRInfo with the DragDrop event: 
  1434.  
  1435.  SourceObject        The internal name of the VX-REXX object that is the drag 
  1436.                      source. This will be null if the source object is not an 
  1437.                      object in your program. 
  1438.  
  1439.  TargetObject        The internal name of the VX-REXX object that is the drag 
  1440.                      target. 
  1441.  
  1442.  SourceRecord        If the source object is a container, this is the record 
  1443.                      handle of the record being dragged. 
  1444.  
  1445.  TargetRecord        If the target object is a container, this is the record 
  1446.                      handle of the record where the drop occurred. 
  1447.  
  1448.  SourceIndex         If the source object is a listbox, value set or combo box, 
  1449.                      this is the numeric index (starting at 1) of the item in 
  1450.                      the object where the drag started, or 0 if the drag did 
  1451.                      not start on an item. 
  1452.  
  1453.  TargetIndex         Like SourceIndex, but identifies which item the drop 
  1454.                      occurred on. 
  1455.  
  1456.  SourceName, TargetName, ContainerName Strings that identify the file or 
  1457.                      object. 
  1458.  
  1459.  SourceFile          The concatenation of ContainerName and SourceName. 
  1460.  
  1461.  Format              The complete OS/2 rendering format of the object. 
  1462.  
  1463.  NativeFormat        The native format, a subset of the Format. 
  1464.  
  1465.  Left, Top, Bottom   Where the object was dropped. 
  1466.  
  1467.  Operation           The drag operation. 
  1468.  
  1469.  No actions occur in response to a drop -- the program must analyse the drop 
  1470.  and decide on an appropriate course of action. 
  1471.  
  1472.  Drag sources 
  1473.  
  1474.  To act as a drag source, an object must have the AllowDrag property set. If a 
  1475.  DragStart event is defined, the program must call the StartDrag method to 
  1476.  start the actual dragging operation. For all objects except the Container, the 
  1477.  syntax for StartDrag is as follows: 
  1478.  
  1479.   call VRMethod object, 'StartDrag', default, dragimage,,
  1480.                 format, type, cname, sname, tname, index
  1481.  
  1482.  The arguments are: 
  1483.  
  1484.  default             The default operation dragging operation, one of 
  1485.                      "Default", "Copy", "Link" or "Move". If omitted, "Default" 
  1486.                      is the default. 
  1487.  
  1488.  dragimage           The path of the icon or bitmap to use for the dragging 
  1489.                      operation. If omitted, the value of the DragIcon property 
  1490.                      is used. If DragIcon is not defined and the object 
  1491.                      supports a PicturePath property, the latter is used 
  1492.                      instead. 
  1493.  
  1494.  format              The OS/2 drag and drop rendering format string. If 
  1495.                      omitted, the format <DRM_VXREXX_OBJECT,DRF_UNKNOWN> is 
  1496.                      used. 
  1497.  
  1498.  type                The OS/2 drag and drop type string. If omitted, the type 
  1499.                      "VX-REXX Object" is used. 
  1500.  
  1501.  cname               The "container name", which has nothing to do with the 
  1502.                      Container object, but is rather the a string which 
  1503.                      describes the object that "contains" the object being 
  1504.                      dragged. If omitted, the internal name of the parent 
  1505.                      object is used. 
  1506.  
  1507.  sname               The "source name". If omitted, the internal name of the 
  1508.                      source object is used. 
  1509.  
  1510.  tname               The "target name". If omitted, the internal name of the 
  1511.                      source object is used. 
  1512.  
  1513.  index               The numeric value to use when setting the "SourceIndex" 
  1514.                      VRInfo parameter when the object is dropped on another 
  1515.                      VX-REXX object. 
  1516.  
  1517.  If a DragStart event is NOT defined, the drag action occurs automatically as 
  1518.  if StartDrag had been called as follows: 
  1519.  
  1520.  
  1521. ΓòÉΓòÉΓòÉ <hidden> Functions ΓòÉΓòÉΓòÉ
  1522.  
  1523.  o VRFlush function 
  1524.  
  1525.    The VRFlush function is used to remove unwanted events from the event queue, 
  1526.    based either on the event type or the object that generated them, or both. 
  1527.  
  1528.  o VRFileDialog function 
  1529.  
  1530.    The VRFileDialog function now supports multiple file selection. 
  1531.  
  1532.  o VRFontDialog function 
  1533.  
  1534.    Use the VRFontDialog function to present a standard font dialog to the user. 
  1535.  
  1536.    The syntax is: 
  1537.  
  1538.       newFont = VRFontDialog( [parent], [initialFont], [title] )
  1539.  
  1540.     parent              The dialog's parent window. If omitted, the desktop is 
  1541.                         used instead. 
  1542.  
  1543.     initialFont         The font that is initially selected in the dialog. 
  1544.  
  1545.     title               The font dialog title. 
  1546.  
  1547.    The font strings have the form 
  1548.  
  1549.       <size>.<facename>[modifier1][modifier2]...
  1550.  
  1551.    modifiers are: 
  1552.  
  1553.     Bold 
  1554.     Italic 
  1555.     Underline 
  1556.     Strikeout 
  1557.  
  1558.  o VRGetFileType function 
  1559.  
  1560.    The VRGetFileType function no longer strips off the last character on files 
  1561.    types that were not set using VRSetFileType. 
  1562.  
  1563.  o VRInfo function 
  1564.  
  1565.    The VRInfo function has been extended in several ways: 
  1566.  
  1567.     - The following new information is available for all events: 
  1568.  
  1569.        o Left 
  1570.        o Top 
  1571.        o AltPressed 
  1572.        o CtrlPressed 
  1573.        o ShiftPressed 
  1574.        o Button1Pressed 
  1575.        o Button2Pressed 
  1576.        o FocusObject 
  1577.        o FocusWindow 
  1578.  
  1579.     - The name of a stem variable can be passed to VRInfo. 
  1580.  
  1581.  o VRIsChildOf function 
  1582.  
  1583.    The new VRIsChildOf function checks if a given object's type is a child of 
  1584.    some other object type.  You can use this function, for example, to see if 
  1585.    the parent of a window is a notebook. 
  1586.  
  1587.  o VRLoadSecondary function 
  1588.  
  1589.    The VRLoadSecondary function can now load modal windows from the current 
  1590.    file. To do this, specify the new "W" parameter. VRLoadSecondary will wait 
  1591.    for the user to close the secondary window before returning. 
  1592.  
  1593.  o VROptions function 
  1594.  
  1595.    VROptions has two new options: ImplicitNames and NoImplicitNames, used to 
  1596.    turn implicit (context-sensitive) naming on or off. 
  1597.  
  1598.  o VRSetFileType function 
  1599.  
  1600.    VRSetFileType now accepts the null string as a valid type. 
  1601.  
  1602.  
  1603. ΓòÉΓòÉΓòÉ <hidden> Methods ΓòÉΓòÉΓòÉ
  1604.  
  1605.  o Clear method 
  1606.  
  1607.    The Clear method has been added to the Console object. 
  1608.  
  1609.  o CharFromLine method 
  1610.  
  1611.    The CharFromLine method returns the insertion point that corresponds to the 
  1612.    start of the given line in an MLE. 
  1613.  
  1614.  o ColorIndex method 
  1615.  
  1616.    Use this Screen object method to convert color indices to strings and back. 
  1617.  
  1618.  o DefineEvent method 
  1619.  
  1620.    The DefineEvent method has been added to all objects and can be used to add 
  1621.    a new event to an object that is triggered when a specified Presentation 
  1622.    Manager message is sent to an object. 
  1623.  
  1624.  o DisableRefresh method 
  1625.  
  1626.    The DisableRefresh method disables updating of an MLE while changes are 
  1627.    being made and also changes the mouse pointer. 
  1628.  
  1629.  o EnableRefresh method 
  1630.  
  1631.    The EnableRefresh method enables the updating of an MLE and restores the 
  1632.    mouse pointer. 
  1633.  
  1634.  o GetFieldAttr method 
  1635.  
  1636.    The GetFieldAttr method now accepts the new Width attribute. This returns 
  1637.    the width of the field in twips. If the width is 0, the container 
  1638.    automatically resizes the field to accommodate the widest data in that 
  1639.    field. The default width is 0. 
  1640.  
  1641.    The Name of the field can also be retrieved using this method. 
  1642.  
  1643.  o GetFieldData method 
  1644.  
  1645.    The container GetFieldData method now also accepts the name of a stem 
  1646.    variable in place of a field handle (or name).  Passing a stem indicates you 
  1647.    want data on all the fields in the given record. On return, stem.0 is the 
  1648.    number of fields, stem.1 is the first data value, stem.2 is the second value 
  1649.    and so on. If a field has a symbolic name, the method also sets the variable 
  1650.    with the form stem.!fieldName. 
  1651.  
  1652.  o GetFieldList method 
  1653.  
  1654.    The new container GetFieldList method returns a list of field handles in a 
  1655.    REXX stem variable. 
  1656.  
  1657.  o GetPageNumber method 
  1658.  
  1659.    The notebook GetPageNumber method now returns the correct value. 
  1660.  
  1661.  o GetRecordAttr method 
  1662.  
  1663.    The container GetRecordAttr method supports two new record attributes: 
  1664.  
  1665.     - UserData, used to store arbitrary application data. 
  1666.     - Source, used to indicate which records are to be included in a drag or 
  1667.       pop-up menu operation. 
  1668.  
  1669.  o LineFromChar method 
  1670.  
  1671.    The LineFromChar method returns the line number that corresponds to the 
  1672.    given insertion point in the MLE. 
  1673.  
  1674.  o ListPrinters method 
  1675.  
  1676.    The ListPrinters method now also returns the default printer. 
  1677.  
  1678.  o PostEvent method 
  1679.  
  1680.    The PostEvent method has been added to all objects. It allows an object to 
  1681.    "trigger" one if its own events. 
  1682.  
  1683.  o PostQueue method 
  1684.  
  1685.    The "object" and "event" values returned by VRInfo can now be set when 
  1686.    calling the PostQueue method. If "object" is set, the "window" value is also 
  1687.    implicitly set. 
  1688.  
  1689.  o Popup method 
  1690.  
  1691.    When activated using the Popup method, menus now pop up on the currently 
  1692.    active window, not the window they are defined in. 
  1693.  
  1694.  o QueryChanged method 
  1695.  
  1696.    The QueryChanged method returns the MLE changed flag status. 
  1697.  
  1698.  o QueryFirstChar method 
  1699.  
  1700.    The QueryFirstChar method returns the insertion point of the first visible 
  1701.    character of an MLE. 
  1702.  
  1703.  o QueryFormatLineLength method 
  1704.  
  1705.    The QueryFormatLineLength method returns the number of bytes in an MLE line 
  1706.    after formatting has been applied. 
  1707.  
  1708.  o QueryFormatTextLength method 
  1709.  
  1710.    The QueryFormatTextLength method returns the length of the specified MLE 
  1711.    text after formatting is applied. 
  1712.  
  1713.  o QueryLineCount method 
  1714.  
  1715.    The QueryLineCount method returns the number of lines in an MLE. 
  1716.  
  1717.  o QueryLineLength method 
  1718.  
  1719.    The QueryLineLength method returns the length of an MLE line starting at the 
  1720.    given insertion point. 
  1721.  
  1722.  o QuerySel 
  1723.  
  1724.    The QuerySel method returns the insertion point of the anchor point or 
  1725.    cursor point in an MLE. 
  1726.  
  1727.  o QueryTabStop method 
  1728.  
  1729.    The QueryTabStop method returns the size (in pixels) of the MLE tab stop. 
  1730.  
  1731.  o Search method 
  1732.  
  1733.    The Search method searches for text in an MLE. 
  1734.  
  1735.  o SetChanged method 
  1736.  
  1737.    The SetChanged method sets the changed status of an MLE. 
  1738.  
  1739.  o SetFieldAttr method 
  1740.  
  1741.    The SetFieldAttr method now accepts the new Width attribute. Set the width 
  1742.    to the field width in twips. If the width is set to 0, the container 
  1743.    automatically resizes the field to accommodate the widest data in that 
  1744.    field. The default width is 0. 
  1745.  
  1746.  o SetFieldData method 
  1747.  
  1748.    The SetFieldData method now raises a REXX syntax error if passed the name of 
  1749.    an invalid field attribute. Previously, it would just return 0 without 
  1750.    causing an syntax error. 
  1751.  
  1752.  o SetFirstChar method 
  1753.  
  1754.    The SetFirstChar method sets the first visible character in an MLE. 
  1755.  
  1756.  o SetRecordAttr method 
  1757.  
  1758.    The SetRecordAttr method supports the new record attributes, Source and 
  1759.    UserData. 
  1760.  
  1761.  o SetSel method 
  1762.  
  1763.    The SetSel method sets the cursor and anchor points of an MLE. 
  1764.  
  1765.  o SetTabStop method 
  1766.  
  1767.    The SetTabStop method sets the length of the tab stop (in pixels) of an MLE. 
  1768.  
  1769.  o StartDrag method 
  1770.  
  1771.    The StartDrag method now applies to all objects, but with an extended syntax 
  1772.    allowing the program to specify in detail how the dragging operation should 
  1773.    occur. 
  1774.  
  1775.  o StartThread method 
  1776.  
  1777.    When starting a window file, code file or external file as a new thread 
  1778.    using the StartThread method, either of the words "command", "function" or 
  1779.    "subroutine" may be added before the name of the file. The file will then be 
  1780.    started as either a command file, a function, or a subroutine. For example, 
  1781.    to start a window file as a subroutine: 
  1782.  
  1783.       call VRMethod 'Application', 'StartThread', 'subroutine window2'
  1784.  
  1785.    If not specified, the default is "command". 
  1786.  
  1787.  o UpdateLayout method 
  1788.  
  1789.    When dynamically adding or removing children from a window or group box 
  1790.    whose LayoutStyle property is set, the UpdateLayout method can be used to 
  1791.    force an update of the layout. 
  1792.  
  1793.  
  1794. ΓòÉΓòÉΓòÉ <hidden> Objects ΓòÉΓòÉΓòÉ
  1795.  
  1796.  o Application object 
  1797.  
  1798.    The Program property is now set to a null string if the program is being run 
  1799.    from within the design environment. 
  1800.  
  1801.  o CheckBox. object 
  1802.  
  1803.    The NoPointerFocus property has been added. 
  1804.  
  1805.  o ComboBox object 
  1806.  
  1807.     - You can now store per-string user data for combo boxes list items. See 
  1808.       the on-line documentation for the GetItemData, SetItemData, 
  1809.       GetItemDataList, and SetItemDataList methods. 
  1810.     - System response has been improved when passing large stem arrays to 
  1811.       AddStringList. 
  1812.  
  1813.  o Console object 
  1814.  
  1815.     - The Clear method is now supported on the Console object. 
  1816.  
  1817.  o Container object 
  1818.  
  1819.     - New AutoEdit property. 
  1820.     - Enhanced GetFieldAttr method. 
  1821.     - Enhanced GetFieldData method. 
  1822.     - New GetFieldList method. 
  1823.     - New Guard event. 
  1824.     - New GuardRecords property. 
  1825.     - New GuardScroll method. 
  1826.     - New KeptRecords property that sets an upper limit on the number of 
  1827.       records in a container. 
  1828.     - Enhanced SetFieldAttr method. 
  1829.     - New TreeCount property. 
  1830.     - Enhanced GetRecordAttr and SetRecordAttr methods. 
  1831.     - New UserData record attribute. 
  1832.     - New Width and UserData field attributes. 
  1833.     - Certain painting problems were fixed. 
  1834.     - System response has been improved when passing large stem arrays to 
  1835.       AddRecordList and SetRecordAttr. 
  1836.     - Previously, the in-use emphasis would be drawn in detail view only if the 
  1837.       first column was an icon field.  Now the in-use emphasis is drawn on the 
  1838.       leftmost icon field, even if it isn't the first field. 
  1839.     - Passing an invalid value to SetFieldData to set a ULONG field now returns 
  1840.       0. 
  1841.     - Setting the field data for an icon field to the null string removes the 
  1842.       icon. 
  1843.     - Asking for SourceOrSelected returns the empty list if the container 
  1844.       itself has the source emphasis. 
  1845.     - Records that were initially created as invisible are now redrawn 
  1846.       correctly when they are made visible. 
  1847.  
  1848.  o DropDownComboBox (DDCB) object 
  1849.  
  1850.     - You can now store per-string user data for DDCB list items. See the 
  1851.       on-line documentation for the GetItemData, SetItemData, GetItemDataList, 
  1852.       and SetItemDataList methods. 
  1853.     - System response has been improved when passing large stem arrays to 
  1854.       AddStringList. 
  1855.  
  1856.  o GroupBox object 
  1857.  
  1858.     - New properties: BorderType and LayoutStyle. 
  1859.     - New method: UpdateLayout. 
  1860.  
  1861.  o ImagePushButton and ImageRadioButton objects 
  1862.  
  1863.     - These objects paint themselves correctly when they are disabled. 
  1864.  
  1865.     - Both objects now support the ForeColor property and the NoPointerFocus 
  1866.       property. 
  1867.  
  1868.     - The ImageRadioButton has a new ToggleMode property. 
  1869.  
  1870.  o ListBox object 
  1871.  
  1872.     - System response has been improved when passing large stem arrays to 
  1873.       AddStringList. 
  1874.  
  1875.  o MultiLineEntryField object 
  1876.  
  1877.    The MLE had difficulty retrieving text more than 64K in size. This has been 
  1878.    fixed. 
  1879.  
  1880.    The MLE supports these new methods: 
  1881.  
  1882.     - CharFromLine 
  1883.  
  1884.     - LineFromChar 
  1885.  
  1886.     - QueryLineLength 
  1887.  
  1888.     - SetFirstChar 
  1889.  
  1890.     - SetTabStop 
  1891.  
  1892.     - SetChanged 
  1893.  
  1894.     - QueryFormatLineLength 
  1895.  
  1896.     - DisableRefresh 
  1897.  
  1898.     - EnableRefresh 
  1899.  
  1900.     - QueryChanged 
  1901.  
  1902.     - QueryFirstChar 
  1903.  
  1904.     - QueryLineCount 
  1905.  
  1906.     - QueryTabStop 
  1907.  
  1908.     - QueryFormatTextLength 
  1909.  
  1910.     - QuerySel 
  1911.  
  1912.     - SetSel 
  1913.  
  1914.     - Search 
  1915.  
  1916.  o Notebook object 
  1917.  
  1918.     - In a PageSelected event, the internal name of the old page window is 
  1919.       available using VRInfo: 
  1920.  
  1921.             oldPageWindow = VRInfo( "OldPageWindow" )
  1922.  
  1923.     - Previously calling VRInfo("OldPage") in a PageSelected event returned the 
  1924.       internal name of the notebook, not the page number (as advertised). This 
  1925.       bug has been fixed. 
  1926.  
  1927.     - Notebooks were behaving like GroupBox objects and "swallowing" objects 
  1928.       they were laid on top of. This has been fixed. 
  1929.  
  1930.     - Keyboard navigation between notebook pages is now properly supported. 
  1931.  
  1932.     - The GetPageNumber method now returns the correct page number. 
  1933.  
  1934.     - Fixed the bug that prevented PageLoad events from occurring when pages 
  1935.       were added using InsertBlankPage after calling DeletePage. 
  1936.  
  1937.  o PushButton object 
  1938.  
  1939.    The NoPointerFocus property has been added. 
  1940.  
  1941.  o RadioButton object 
  1942.  
  1943.    The NoPointerFocus property has been added. 
  1944.  
  1945.  o Screen object 
  1946.  
  1947.    The Screen object supports the following new methods and properties: 
  1948.  
  1949.     - ColorIndex 
  1950.  
  1951.       Converts a color index to a string and back. 
  1952.  
  1953.     - FindWindow 
  1954.  
  1955.       Allows you to find a window handle by name. 
  1956.  
  1957.     - PixelsToTwips 
  1958.  
  1959.       Convert pixels into twips. 
  1960.  
  1961.     - PointerVisible 
  1962.  
  1963.       Controls the pointer visibility. 
  1964.  
  1965.     - TwipsToPixels 
  1966.  
  1967.       Convert twips into pixels. 
  1968.  
  1969.    The GetActiveWindow and GetFocusWindow methods will now optionally return 
  1970.    the internal name of the VX-REXX object that is active or has the input 
  1971.    focus.  Previously, these two methods would only return a Presentation 
  1972.    Manager window handle. 
  1973.  
  1974.  o Slider object 
  1975.  
  1976.    The slider object would sometimes shrink in size. This has been fixed. 
  1977.  
  1978.  o Window object 
  1979.  
  1980.    The Window object supports the following new events, methods and properties: 
  1981.  
  1982.     - Help event 
  1983.  
  1984.       Occurs when the user presses F1. 
  1985.     - UpdateLayout method 
  1986.  
  1987.       Used to force an update of the window layout if LayoutStyle is set. 
  1988.  
  1989.  
  1990. ΓòÉΓòÉΓòÉ <hidden> Properties and events ΓòÉΓòÉΓòÉ
  1991.  
  1992.  o AllowDrag property 
  1993.  
  1994.    All objects in the tool palette support the AllowDrag property. If on, the 
  1995.    object can act as a drag source. See the DragStart property. 
  1996.  
  1997.  o AutoEdit property 
  1998.  
  1999.    When this property is set to 1, pressing TAB (or BACKTAB) while editing a 
  2000.    detail view field will automatically move to the next (or previous field). 
  2001.    If there are no more fields in the record, the next record is opened for 
  2002.    editing. If there are no more records to edit, the input focus is moved to 
  2003.    the next object in the tab order.  Read-only fields are skipped. 
  2004.  
  2005.  o Autosize property 
  2006.  
  2007.    The Autosize property takes mnemonics into account when calculating the size 
  2008.    of the object. It does not leave extra space around the radio button and 
  2009.    check box objects either. 
  2010.  
  2011.  o AutoTab property 
  2012.  
  2013.    Entry fields now handle overstrike mode correctly when AutoTab is on. 
  2014.  
  2015.  o BeginEdit event 
  2016.  
  2017.    The handle of the field being edited can be had using VRInfo. 
  2018.  
  2019.  o BorderType property 
  2020.  
  2021.    The GroupBox object has several new border styles that are set using the 
  2022.    BorderType property. 
  2023.  
  2024.  o ClipSiblings property 
  2025.  
  2026.    A new property on most objects, it controls how objects are painted if they 
  2027.    overlap. Turn it on to ensure that the objects paint themselves according to 
  2028.    their SiblingOrder. 
  2029.  
  2030.  o ContextMenu event 
  2031.  
  2032.    When a ContextMenu event is generated on a ListBox, ComboBox or 
  2033.    DropDownComboBox object, VRInfo("Index") can be used to retrieve the index 
  2034.    of the item that was clicked on. The value will be zero if the click did not 
  2035.    occur on a list item. The value is also available from the menu Click event 
  2036.    if a menu invoked using the Popup method inside the ContextMenu event code. 
  2037.  
  2038.  o DragIcon property 
  2039.  
  2040.    This is the icon or bitmap to use when dragging the object. It uses the same 
  2041.    syntax as PicturePath. 
  2042.  
  2043.  o DragDrop event and DragTarget property 
  2044.  
  2045.    All objects now support the DragTarget property and the DragDrop event. 
  2046.  
  2047.  o DragStart event 
  2048.  
  2049.    All objects support this event. As with the container, if AllowDrag is on 
  2050.    and DragStart is NOT defined, a default dragging action occurs. Otherwise it 
  2051.    is up to the program to call the StartDrag method from within the DragStart 
  2052.    event to start the dragging. 
  2053.  
  2054.  o EndEdit event 
  2055.  
  2056.    The handle of the field being edited can be had using VRInfo. 
  2057.  
  2058.  o ForeColor property 
  2059.  
  2060.    The ForeColor property has been added to the ImagePushButton, 
  2061.    ImageRadioButton and PictureBox.  This property is used along with BackColor 
  2062.    when displaying monochrome bitmaps. 
  2063.  
  2064.  o Help event 
  2065.  
  2066.    The Help event occurs when the user presses F1 on a window. See also Adding 
  2067.    help to a program for more information. 
  2068.  
  2069.  o LayoutStyle property 
  2070.  
  2071.    The LayoutStyle property has been added to the GroupBox object. 
  2072.  
  2073.  o NoPointerFocus property 
  2074.  
  2075.    The NoPointerFocus property has been added to the PushButton, RadioButton, 
  2076.    CheckBox, ImagePushButton and ImageRadioButton objects.  If set, the user 
  2077.    can click on the object but the focus will not move to the object. 
  2078.  
  2079.  o PointerVisible property 
  2080.  
  2081.    The PointerVisible property on the Screen object controls whether or not the 
  2082.    mouse pointer is visible. 
  2083.  
  2084.  o Program property 
  2085.  
  2086.    The Program property is now set to a null string when the program is being 
  2087.    run or debugged from within the design environment. 
  2088.  
  2089.  o StatusFont property 
  2090.  
  2091.    Sets the font used in the status area of a window. 
  2092.  
  2093.  o ToggleMode property 
  2094.  
  2095.    The new ToggleMode property can be used to make an ImageRadioButton object 
  2096.    act as a toggle. 
  2097.  
  2098.  o TreeCount property (containers) 
  2099.  
  2100.    The new TreeCount property returns the total number of records in a 
  2101.    container, including child records. It is different from the Count property 
  2102.    in that the Count property only includes top level records. 
  2103.  
  2104.  o Verify event 
  2105.  
  2106.    A new event that can be used to validate data entered in entry fields, MLEs, 
  2107.    combo boxes, DDCBs and spin buttons. 
  2108.  
  2109.  o WindowListTitle property 
  2110.  
  2111.    Sets (or removes) the name of a window in the WindowList. 
  2112.  
  2113.  
  2114. ΓòÉΓòÉΓòÉ <hidden> Window manipulation ΓòÉΓòÉΓòÉ
  2115.  
  2116. The following features aid in the manipulation of Presentation Manager windows 
  2117. from within a VX-REXX program: 
  2118.  
  2119.  o The Working with other programs chapter has a section describing how to 
  2120.    obtain and work with Presentation Manager window handles. 
  2121.  o The FindWindow method has been added to the Screen object. 
  2122.  o The following properties can be set using VRSet or retrieved using VRGet: 
  2123.  
  2124.     - Left 
  2125.     - Top 
  2126.     - Width 
  2127.     - Height 
  2128.     - Caption 
  2129.     - Visible 
  2130.     - Enabled 
  2131.     - Parent 
  2132.     - SiblingOrder 
  2133.     - WindowState 
  2134.  
  2135.  o The following additional properties can be used with VRGet only: 
  2136.  
  2137.     - ClassName 
  2138.     - ProcessID 
  2139.     - ThreadID 
  2140.     - ID 
  2141.     - Parent 
  2142.     - Sibling 
  2143.     - FirstChild 
  2144.     - Owner 
  2145.     - Self 
  2146.     - Hwnd 
  2147.     - Object 
  2148.  
  2149.  o The following methods can be invoked using VRMethod: 
  2150.  
  2151.     - SetFocus 
  2152.     - Maximize 
  2153.     - Minimize 
  2154.     - Restore 
  2155.  
  2156.  
  2157. ΓòÉΓòÉΓòÉ <hidden> Bounce ΓòÉΓòÉΓòÉ
  2158.  
  2159. The Bounce sample has been improved by the addition of gravity. 
  2160.  
  2161.  
  2162. ΓòÉΓòÉΓòÉ <hidden> CUA 91 ΓòÉΓòÉΓòÉ
  2163.  
  2164. The CUA91 sample demonstrates several VX-REXX features and programming 
  2165. techniques relevant to developing CUA'91 compliant applications. It also 
  2166. demonstrates how to use subroutines contained in OBJECT.VRS to simplify the 
  2167. process. 
  2168.  
  2169.  
  2170. ΓòÉΓòÉΓòÉ 6.2. New in version 2.0a ΓòÉΓòÉΓòÉ
  2171.  
  2172.  What's new in version 2.0a: 
  2173.  
  2174.  Design environment 
  2175.  
  2176.  Miscellaneous Changes 
  2177.  
  2178.  Runtime environment 
  2179.  
  2180.  Containers 
  2181.  Container and Workplace Shell interaction 
  2182.  Named field support for containers 
  2183.  Popup Menus 
  2184.  I/O Console 
  2185.  Bitmap Support 
  2186.  Picturebox Object 
  2187.  DDE Support 
  2188.  Accelerators 
  2189.  Font Support 
  2190.  DBCS Support 
  2191.  Other Changes 
  2192.  
  2193.  VX-REXX Features 
  2194.  
  2195.  Properties, methods, and functions 
  2196.  
  2197.  Sample programs 
  2198.  
  2199.  New or improved samples 
  2200.  
  2201.  
  2202. ΓòÉΓòÉΓòÉ <hidden> Miscellaneous Changes ΓòÉΓòÉΓòÉ
  2203.  
  2204.  The following sections list significant changes to the design environment. 
  2205.  
  2206.  o The design environment's initialization file (VRXEDIT.INI) is now stored in 
  2207.    the OS2 directory. Previously, it was stored in the VXREXX directory. 
  2208.  
  2209.  o Drag and drop code generation macros 
  2210.  
  2211.    The code generation macros are now faster. The macro for VRDestroy was 
  2212.    missing and has been added. The macro for SetRecordAttr has been corrected. 
  2213.  
  2214.  o Menu editor 
  2215.  
  2216.    The menu editor has been sped up. It also asks the user if changes have been 
  2217.    made to a menu or menu item and the Change button was not clicked. 
  2218.  
  2219.  o The property notebook for containers has been rearranged. 
  2220.  
  2221.     - The AutoPosition property has been moved from the "Style" page to the 
  2222.       "Views" page. 
  2223.     - The ExtendSelect and MultiSelect properties have been moved from the 
  2224.       "Style" page to the "List" page. 
  2225.  
  2226.  o The SetProp macro used to cause unpredictable results if you selected all 
  2227.    objects. 
  2228.  
  2229.  o The Help menu now contains items to directly access the VX-REXX Reference, 
  2230.    VX-REXX Programmer's Guide and REXX Reference online documents. 
  2231.  
  2232.  o Section editor 
  2233.  
  2234.    The built-in section editor has been improved in several ways: 
  2235.  
  2236.     - Previously, the "Insert code" feature would stop working after a certain 
  2237.       number of times due to a bug in the C run-time library. This has been 
  2238.       corrected. 
  2239.     - Double-byte character set (DBCS) support has been added, including a DBCS 
  2240.       conversion bar. The conversion bar only appears in DBCS versions of OS/2. 
  2241.     - The font used by the section editor can be changed using a new menu item 
  2242.       in the Settings menu. When you pick a new font, it is propagated to all 
  2243.       open section editor windows. 
  2244.     - In previous versions of the VX-REXX design environment, it was not 
  2245.       possible to save window files that were greater than 64k bytes long. This 
  2246.       restriction has been removed. 
  2247.     - Closing a section editor window from the Task List will only close the 
  2248.       window, not the complete project. 
  2249.     - Restoring a section editor window from the Task List will also restore 
  2250.       the complete project if the project was also minimized. 
  2251.     - The online reference manuals can be accessed from the Help menu. 
  2252.     - When text is selected in a section editor window, a new 'Lookup' item 
  2253.       appears in the popup menu allowing you to lookup the currently selected 
  2254.       word in the online references. You can also use Ctrl+DoubleClick to 
  2255.       select a word and automatically look it up. 
  2256.  
  2257.  o File limits 
  2258.  
  2259.    Windows with more than 64K of data in them are now saved correctly. 
  2260.  
  2261.  o Font editing 
  2262.  
  2263.    The font dialog in the property notebooks now supports the Strikeout, 
  2264.    Underscore and Outline attributes. The appear in the font name as 
  2265.    ".Strikeout", ".Underscore" and ".Outline", in any order. 
  2266.  
  2267.  o Direct editing 
  2268.  
  2269.    Direct text editing with alt-Click no longer sounds a beep. 
  2270.  
  2271.  o Bitmaps and icons 
  2272.  
  2273.    A new Show pictures menu item has been added to the Options menu. If set, 
  2274.    all PictureBox, ImagePushButton and ImageRadioButton objects will display 
  2275.    their pictures in the design environment. Previously, they would only do so 
  2276.    at run-time. If this option is not set, these objects will be hatched if a 
  2277.    value has been assigned to their PicturePath properties and blank otherwise. 
  2278.  
  2279.  
  2280. ΓòÉΓòÉΓòÉ <hidden> Containers ΓòÉΓòÉΓòÉ
  2281.  
  2282.  o You now have greater control over the drag/drop operation. You can specify 
  2283.    the default operation type using the DragStart method. You can change the 
  2284.    set of dragged records when the operation begins by changing the Source 
  2285.    attributes while in the new StartDrag event. 
  2286.  
  2287.  o You can now fill a container based on the contents of a directory using the 
  2288.    new FillFromDir method. 
  2289.  
  2290.  o You can now refer to detail view fields using a symbolic name. See the 
  2291.    enhanced AddField method. 
  2292.  
  2293.  o The appearance of minitature icons has been improved. 
  2294.  
  2295.  o The amount of screen flicker has been reduced when invoking the 
  2296.    SetRecordAttr and SetFieldData methods. 
  2297.  
  2298.  o The source emphasis is now drawn more consistently around records. 
  2299.  
  2300.  o Setting the Expanded and Collapsed record attributes now expands or 
  2301.    collapses the record tree. 
  2302.  
  2303.  
  2304. ΓòÉΓòÉΓòÉ <hidden> Container and Workplace Shell interaction ΓòÉΓòÉΓòÉ
  2305.  
  2306.  You can now drag records onto Workplace Shell objects other than the Shredder 
  2307.  and printer objects. See the new DragFile event and the expanded SetRecordAttr 
  2308.  method. 
  2309.  
  2310.  
  2311. ΓòÉΓòÉΓòÉ <hidden> Named field suppport for containers ΓòÉΓòÉΓòÉ
  2312.  
  2313.  You can now assign symbolic names to container fields using the AddField 
  2314.  method. Any method that takes a field handle will now accept a symbolic field 
  2315.  name. 
  2316.  
  2317.  For example, the following code sample creates two named fields called 
  2318.  "NameField" and "PriceField". A record is then added, and its field 
  2319.  information is set. 
  2320.  
  2321.   f1 = VRMethod( "CN_1", "AddField", "String", "Name", "NameField" )
  2322.   f2 = VRMethod( "CN_1", "AddField", "ULong", "Price", "PriceField" )
  2323.   record = VRMethod( "CN_1", "AddRecord",,, "Car wax", "Information" )
  2324.   call VRMethod "CN_1", "SetFieldData", record,,
  2325.                 "NameField", "Car wax",,
  2326.                 "PriceField", "19.95"
  2327.  
  2328.  Notice that the field names "NameField" and "PriceField" are passed to the 
  2329.  SetFieldData method. You could also invoke the method with the following line 
  2330.  for the same result: 
  2331.  
  2332.   call VRMethod "CN_1", "SetFieldData", record,,
  2333.                 f1, "Car wax",,
  2334.                 f2, "19.95"
  2335.  
  2336.  
  2337. ΓòÉΓòÉΓòÉ <hidden> Popup menus ΓòÉΓòÉΓòÉ
  2338.  
  2339.  o The internal name of the object for which a context menu was requested is 
  2340.    now available in the Click event of popup menu items. In the Click event you 
  2341.    can retrieve the source object name by using the VRInfo function. 
  2342.  
  2343.    The Popup sample program shows how you can use VRInfo to get the name of the 
  2344.    object to which the context menu applies. The Click event for one of the 
  2345.    popup menu items is shown below: 
  2346.  
  2347.       MI_BackRed_Click:
  2348.           call SetColor "Red"
  2349.       return
  2350.  
  2351.       SetColor: procedure
  2352.           parse arg color
  2353.  
  2354.           source = VRInfo( "Source" )
  2355.           call VRSet source, "BackColor", color
  2356.       return
  2357.  
  2358.  o Closing a cascaded portion of a popup menu no longer closes the whole menu. 
  2359.  
  2360.  
  2361. ΓòÉΓòÉΓòÉ <hidden> I/O console ΓòÉΓòÉΓòÉ
  2362.  
  2363.  The I/O console no longer converts carriage return characters to newline 
  2364.  characters on input, and also makes sure that all input lines are terminated 
  2365.  with a CR-LF pair. The OS/2 BACKUP command will now work properly with the I/O 
  2366.  console. 
  2367.  
  2368.  You can use the name 'Console' to refer to the console's frame window and use 
  2369.  VRGet, VRSet and VRMethod to manipulate the console as you would any other 
  2370.  Presentation Manager window.  For example: 
  2371.  
  2372.   /* Hide the console */
  2373.  
  2374.   call VRSet 'Console', 'Visible', 0
  2375.  
  2376.   /* Get the width */
  2377.  
  2378.   width = VRGet( 'Console', 'Width' )
  2379.  
  2380.  See the entry for HWnd for more information on how to manipulate window 
  2381.  handles.  The Window Controller sample is also a good place to look. 
  2382.  
  2383.  
  2384. ΓòÉΓòÉΓòÉ <hidden> Bitmap support ΓòÉΓòÉΓòÉ
  2385.  
  2386.  When loading a bitmap from a file which contains several bitmaps (a bitmap 
  2387.  array, each bitmap specific to a particular display resolution and/or number 
  2388.  of colors), VX-REXX used to pick the bitmap with exactly the same number of 
  2389.  colors as the current display, or the first bitmap in the file. Now it picks 
  2390.  the closest bitmap, where "closest" means the bitmap with the greatest number 
  2391.  of colors less than or equal to the maximum number of displayable colors for 
  2392.  your system. (Only the standard system color palette is supported, however.) 
  2393.  
  2394.  
  2395. ΓòÉΓòÉΓòÉ <hidden> PictureBox object ΓòÉΓòÉΓòÉ
  2396.  
  2397.  The PictureBox object now correctly draws its border when displaying a 
  2398.  picture. Pictures are also clipped to the correct area if ResizePicture is not 
  2399.  set. 
  2400.  
  2401.  
  2402. ΓòÉΓòÉΓòÉ <hidden> DDE support ΓòÉΓòÉΓòÉ
  2403.  
  2404.  DDE conversations were not being properly terminated in some cases. This has 
  2405.  been fixed. If the DDE client is in the middle of a conversation with a DDE 
  2406.  server and the server terminates or hangs abruptly without notifying the 
  2407.  client, your application can be interrupted cleanly by closing it from the 
  2408.  Task List. 
  2409.  
  2410.  
  2411. ΓòÉΓòÉΓòÉ <hidden> Accelerators ΓòÉΓòÉΓòÉ
  2412.  
  2413.  Menu accelerators now accept mixed-case alphabetic characters by default. 
  2414.  Previously, they only accepted the lowercase version of an alphabetic 
  2415.  character. You can now add the keyword case to the end of the accelerator 
  2416.  string to force the accelerator to be case-sensitive. 
  2417.  
  2418.  
  2419. ΓòÉΓòÉΓòÉ <hidden> Font support ΓòÉΓòÉΓòÉ
  2420.  
  2421.  All objects that have a Font property now support strikeout, underscore, and 
  2422.  outline attributes. For example, setting Font to 10.System 
  2423.  Proportional.Underscore causes the object to underline displayed text. See the 
  2424.  Font section of the online Reference for more information. 
  2425.  
  2426.  
  2427. ΓòÉΓòÉΓòÉ <hidden> DBCS support ΓòÉΓòÉΓòÉ
  2428.  
  2429.  The following features have been added to support DBCS (double byte character 
  2430.  set) environments: 
  2431.  
  2432.  o VX-REXX objects now support DBCS fonts. 
  2433.  o Window objects can have an options DBCS-SBCS conversion bar at the bottom of 
  2434.    the window. 
  2435.  
  2436.  
  2437. ΓòÉΓòÉΓòÉ <hidden> Other changes ΓòÉΓòÉΓòÉ
  2438.  
  2439.  o Previously, running executables generated with VX-REXX would sometimes 
  2440.    report problems if multiple copies of VROBJ.DLL were in the LIBPATH and the 
  2441.    directory where the executable was located. This problem has been fixed. 
  2442.  
  2443.  o The size of the stack used by VX-REXX run time library (VROBJ.DLL) can be 
  2444.    increased by setting the VXREXXSTACK environment variable to desired stack 
  2445.    size in bytes before running the program. The default stack size for VROBJ 
  2446.    is 32K. You may need to increase the stack size if you are developing new 
  2447.    VX-REXX objects that demand a larger stack. 
  2448.  
  2449.  o In version 2.0, a syntax error would occur if you tried to use VRSet, VRGet 
  2450.    or VRMethod with a Presentation Manager window handle that was no longer 
  2451.    valid (if, for example, the window has been destroyed).  In 2.0a this no 
  2452.    longer occurs.  Instead, the function call is simply ignored and has no 
  2453.    effect.  (This is only true for window handles, not VX-REXX objects.) 
  2454.  
  2455.  
  2456. ΓòÉΓòÉΓòÉ <hidden> New or improved properties, methods, and functions ΓòÉΓòÉΓòÉ
  2457.  
  2458.  The following sections list new or improved properties, methods, and functions 
  2459.  for version 2.0a. 
  2460.  
  2461.  Accelerator property 
  2462.  
  2463.  Accelerators are now mixed-case by default. Use the new keyword Case to define 
  2464.  case-sensitive accelerators. See the Accelerator property in the online 
  2465.  Reference for details. 
  2466.  
  2467.  Acknowledge event 
  2468.  
  2469.  The Acknowledge event was inadvertently missing from the documentation, 
  2470.  although it existed in version 2.0. 
  2471.  
  2472.  AddField method 
  2473.  
  2474.  The AddField method takes a new name parameter which lets you assign a 
  2475.  symbolic name to a field. 
  2476.  
  2477.  AddRecordList method 
  2478.  
  2479.  The AddRecordList method now inserts records in the given order when adding to 
  2480.  the front of the list. 
  2481.  
  2482.  CenterWindow method 
  2483.  
  2484.  The relative parameter is now case insensitive. 
  2485.  
  2486.  DBCSConversionBar property 
  2487.  
  2488.  Window objects can now optionally include a DBCS-SBCS conversion bar at the 
  2489.  bottom of the window. See the DBCSConversionBar section in the online 
  2490.  Reference for details. 
  2491.  
  2492.  Delay property 
  2493.  
  2494.  The Delay property of Timer objects now works for values greater than 65,535. 
  2495.  
  2496.  Destroy event 
  2497.  
  2498.  Previously the Destroy event was not being generated. This has been fixed. See 
  2499.  the revised Destroy section in the online Reference for tips on using the 
  2500.  Destroy event. 
  2501.  
  2502.  DragFile event 
  2503.  
  2504.  The DragFile event occurs when records are dropped onto Workplace Shell 
  2505.  objects other than the printer or the OS/2 Shredder. 
  2506.  
  2507.  DragStart event 
  2508.  
  2509.  The DragStart event occurs whenever the user starts dragging container 
  2510.  records. 
  2511.  
  2512.  FillFromDir method 
  2513.  
  2514.  The FillFromDir method fills a container with records based on the contents of 
  2515.  a directory. The result is a container that acts like a Workplace Shell 
  2516.  folder. See the FillFromDir method for more information. 
  2517.  
  2518.  GetClipboard method 
  2519.  
  2520.  The GetClipboard method no longer causes a syntax error if the clipboard is 
  2521.  empty or contains something other than text. Instead, an empty string is 
  2522.  returned. 
  2523.  
  2524.  GetFieldData method 
  2525.  
  2526.  The GetFieldData method now raises a REXX syntax error if passed an invalid 
  2527.  field handle/name. 
  2528.  
  2529.  GetRecordAttr method 
  2530.  
  2531.  The GetRecordAttr method now supports a new record attribute called 
  2532.  "Filename". 
  2533.  
  2534.  GetRecordList method 
  2535.  
  2536.     o You can now use the GetRecordList method to list records that have the 
  2537.       Source attribute set to 1. 
  2538.  
  2539.     o The method now supports the keyword SourceOrSelected for the emphasis 
  2540.       parameter. The method will return records with the source emphasis or, if 
  2541.       there are none, records with the selected emphasis. This keyword is 
  2542.       useful when writing menu item click events in menus that are used both as 
  2543.       pull-down and popup menus. 
  2544.  
  2545.  HelpTag property 
  2546.  
  2547.  Help file contents can now be accessed by setting the HelpTag property to 
  2548.  contents or help contents.  HelpTag also supports index (or help index) and 
  2549.  using (or help using) as well. 
  2550.  
  2551.  Menu objects 
  2552.  
  2553.  Menu objects can now be destroyed using VRDestroy. 
  2554.  
  2555.  MenuItem objects 
  2556.  
  2557.  Disabled menu items in popup menus are now displayed as dimmed text. Menu 
  2558.  items can also now be destroyed using VRDestroy. 
  2559.  
  2560.  Popup method 
  2561.  
  2562.  The Popup method used to cause an access violation if the pos parameter was 
  2563.  null. This has been fixed. 
  2564.  
  2565.  SetFieldData method 
  2566.  
  2567.  The amount of screen flicker that results from invoking the SetFieldData 
  2568.  method has been reduced. 
  2569.  
  2570.  SetRecordAttr method 
  2571.  
  2572.     o The SetRecordAttr method now supports a new record attribute called 
  2573.       "Filename". 
  2574.  
  2575.     o The method now supports the keyword All in place of a record handle. 
  2576.  
  2577.     o The amount of screen flicker that results from invoking this method has 
  2578.       been reduced. 
  2579.  
  2580.     o Setting the Expanded or Collapsed record attributes now expands and 
  2581.       closes the record tree. 
  2582.  
  2583.  Source property 
  2584.  
  2585.  Containers now have a Source property. Setting this property causes the 
  2586.  container to be drawn with the source emphasis. 
  2587.  
  2588.  StartDrag method 
  2589.  
  2590.  The StartDrag method initiates a drag operation. 
  2591.  
  2592.  VRCreate function 
  2593.  
  2594.  You can now use the VRCreate function to create objects on windows that were 
  2595.  created from different REXX files. 
  2596.  
  2597.  VRFileData function 
  2598.  
  2599.  The VRFileDate function now sets the seconds part of the file time correctly. 
  2600.  
  2601.  VRIniDir property 
  2602.  
  2603.  The new VRIniDir function returns the directory where the OS/2 initialization 
  2604.  files are stored. 
  2605.  
  2606.  VRParseFilePath function 
  2607.  
  2608.  Previously, the VRParseFilePath function would cause a system error if passed 
  2609.  an empty string. Now it returns an empty string. 
  2610.  
  2611.  VRSortStem function 
  2612.  
  2613.  Previously, the VRSortStem function would fail for large arrays. It can now 
  2614.  handle arrays with millions of items. 
  2615.  
  2616.  
  2617. ΓòÉΓòÉΓòÉ <hidden> New or improved sample programs ΓòÉΓòÉΓòÉ
  2618.  
  2619.  The following sections new sample programs have been updated for version 2.0a: 
  2620.  
  2621.  File browser        shows how to display a list of files using a container 
  2622.  
  2623.  These samples are described in the Samples section of this document. 
  2624.  
  2625.  
  2626. ΓòÉΓòÉΓòÉ 6.3. New in version 2.0 ΓòÉΓòÉΓòÉ
  2627.  
  2628.  What's new in version 2.0: 
  2629.  
  2630.  New Features 
  2631.  
  2632.  New Objects 
  2633.  Direct Object Editing 
  2634.  Design Environment 
  2635.  Tab Editor 
  2636.  OS/2 File Type Support 
  2637.  File Functions 
  2638.  Object Naming 
  2639.  Error Detection 
  2640.  Improved List Boxes 
  2641.  Improved MLEs 
  2642.  Improved Windows 
  2643.  Picture Boxes 
  2644.  Properties, events, methods 
  2645.  Improved Documentation 
  2646.  
  2647.  Q+E interface functions 
  2648.  
  2649.  VXQE Runtime library 
  2650.  VXQE Function Prototypes 
  2651.  Sample Programs 
  2652.  Known Problems 
  2653.  Contacting Q+E 
  2654.  
  2655.  Fixed Bugs 
  2656.  
  2657.  Design Environment 
  2658.  Runtime Environment 
  2659.  Properties, events, methds 
  2660.  
  2661.  
  2662. ΓòÉΓòÉΓòÉ <hidden> New Objects ΓòÉΓòÉΓòÉ
  2663.  
  2664.  o Container 
  2665.  
  2666.    A container shows a view of a set of records. The view may consist of icons, 
  2667.    text, or a combination of both. 
  2668.  
  2669.     - Provides icon, name, text, detail and tree views 
  2670.     - User definable columns for detail view 
  2671.     - Supports drag and drop interactions with other containers and with 
  2672.       Workplace Shell objects 
  2673.     - Supports sorting and searching records 
  2674.     - Allows records to be shared between containers 
  2675.  
  2676.    For more information, see the Using objects chapter in the VXΓêÖREXX 
  2677.    Programmer's Guide or the Container section in the VXΓêÖREXX Reference. 
  2678.  
  2679.  o Notebook 
  2680.  
  2681.    Notebooks present a group of windows to the user using a book metaphor. The 
  2682.    notebook shows each window as page. Pages have tabs that the user can click 
  2683.    on to display the page. 
  2684.  
  2685.    Some features of notebooks include: 
  2686.  
  2687.     - Full control over the positioning of the binding and the page tabs 
  2688.     - Supports pages with major, minor, or no tabs 
  2689.     - Pages can be added or removed dynamically at run time 
  2690.     - Pages are loaded only as required to improve performance 
  2691.     - Any VX-REXX window can be shown in a notebook 
  2692.  
  2693.    For more information, see the Using objects chapter in the VXΓêÖREXX 
  2694.    Programmer's Guide or the Notebook section in the VXΓêÖREXX Reference. 
  2695.  
  2696.  o Popup menus 
  2697.  
  2698.    Any Menu object can now be displayed as a pop-up menu. 
  2699.  
  2700.    For more information, see the Creating a pop-up menu chapter in the VXΓêÖREXX 
  2701.    Programmer's Guide and the Popup method section of the VXΓêÖREXX Reference. 
  2702.  
  2703.  
  2704.  o Conditional cascaded menus 
  2705.  
  2706.    Any Menu object can now be displayed as a conditional cascaded menu. 
  2707.  
  2708.    For more information, see the Creating a conditional cascaded menu chapter 
  2709.    in the PrGuide. and the DefaultItem property section in the VXΓêÖREXX 
  2710.    Reference. 
  2711.  
  2712.  
  2713.  o Slider 
  2714.  
  2715.    Sliders let the user select a value from a range of values. They can also be 
  2716.    used as a status bar or "thermometer" to indicate progress in a long 
  2717.    operation. 
  2718.  
  2719.    For more information, see the Using objects chapter in the VXΓêÖREXX 
  2720.    Programmer's Guide and the Slider object section in the VXΓêÖREXX Reference. 
  2721.  
  2722.  
  2723.  o Timer 
  2724.  
  2725.    You can use timers to respond to the passing of time. Timers wait for some 
  2726.    configurable interval, then post an event. 
  2727.  
  2728.    For more information, see the Using objects chapter in the VXΓêÖREXX 
  2729.    Programmer's Guide and the Timer object section in the VXΓêÖREXX Reference. 
  2730.  
  2731.  
  2732.  o DDE Client 
  2733.  
  2734.    With a DDE client object, your programs can communicate with DDE servers 
  2735.    that are part of other applications running on your computer. 
  2736.  
  2737.    Some features of the DDE client include: 
  2738.  
  2739.     - Supports cold, warm, and hot links 
  2740.     - Allows communication with OS/2 and Windows DDE servers 
  2741.  
  2742.    For more information, see the Using objects chapter in the VXΓêÖREXX 
  2743.    Programmer's Guide and the DDEClient section in the VXΓêÖREXX Reference. 
  2744.  
  2745.  o ValueSet 
  2746.  
  2747.    Value sets presents the user with a set of choices, one of which is selected 
  2748.    at all timers. The items in the ValueSet are arranged in a grid. The items 
  2749.    can display bitmaps, colors, icons, or text. 
  2750.  
  2751.    For more information, see the Using objects chapter in the VXΓêÖREXX 
  2752.    Programmer's Guide and the ValueSet section in the VXΓêÖREXX Reference. 
  2753.  
  2754.  
  2755. ΓòÉΓòÉΓòÉ <hidden> Direct editing of objects at design time ΓòÉΓòÉΓòÉ
  2756.  
  2757.  You can now use direct editing techniques to change the Value or Caption 
  2758.  properties of the following objects at design time: 
  2759.  
  2760.  o check boxes 
  2761.  o DDE clients 
  2762.  o descriptive text 
  2763.  o entry fields 
  2764.  o multiline entry fields 
  2765.  o push buttons 
  2766.  o radio buttons 
  2767.  o timers 
  2768.  o windows 
  2769.  
  2770.  For example, to change the caption on a push button, follow these steps: 
  2771.  
  2772.   1. While holding the Alt key, click mouse button 1 on the push button. 
  2773.  
  2774.   2. Type the new text for the button. 
  2775.  
  2776.   3. Click mouse button 1 anywhere not on the button. 
  2777.  
  2778.  
  2779. ΓòÉΓòÉΓòÉ <hidden> Easier to use design environment ΓòÉΓòÉΓòÉ
  2780.  
  2781.  o Accelerator keys have been added to many menu items in the design 
  2782.    environment. 
  2783.  
  2784.  o All windows in the design environment are positioned so that part of the 
  2785.    title bar is visible. 
  2786.  
  2787.  o In property notebooks, you can now change the Font property by typing in the 
  2788.    entry field. You can still press the Edit button to invoke the font dialog. 
  2789.  
  2790.  o In the menu editor, double clicking on a menu caption in the list box is 
  2791.    equivalent to pressing the "Edit event" button. 
  2792.  
  2793.  o The "OK" button in the menu editor has been renamed "Close". 
  2794.  
  2795.  o The pop-up menu for objects now uses check marks to show which events have 
  2796.    routines defined. 
  2797.  
  2798.  o You can now position windows by clicking mouse button 2 and dragging the 
  2799.    window, the same as for all other objects. 
  2800.  
  2801.  o You can now resize windows with Thin or Dialog borders the same way as 
  2802.    windows with Sizeable borders. 
  2803.  
  2804.  o VX-REXX now indicates when it is saving or loading a project by displaying 
  2805.    the appropriate text on the status bar. 
  2806.  
  2807.  
  2808. ΓòÉΓòÉΓòÉ <hidden> New tab editor ΓòÉΓòÉΓòÉ
  2809.  
  2810.  The tab editor is now installed automatically in the design environment's 
  2811.  pop-up menu. Use the tab editor to visually set the tab order of objects on a 
  2812.  window. 
  2813.  
  2814.  Initially the tab editor displays all objects on the window that have the 
  2815.  TabStop property set to 1. To move an object in the tab order, follow these 
  2816.  steps: 
  2817.  
  2818.   1. Move the mouse over the object in the tab editor window. 
  2819.  
  2820.   2. Press mouse button 2 and drag the object to the desired position in the 
  2821.      list. 
  2822.  
  2823.   3. Release mouse button 2 
  2824.  
  2825.  To set the tab order according to the CUA guidelines, press the Auto button. 
  2826.  This automatically orders objects from left-to-right and from top-to-bottom in 
  2827.  the window. 
  2828.  
  2829.  Press the OK button to accept the changes you made in the tab editor window. 
  2830.  To throw away the changes, press Cancel or close the window. 
  2831.  
  2832.  
  2833. ΓòÉΓòÉΓòÉ <hidden> New OS/2 file type support ΓòÉΓòÉΓòÉ
  2834.  
  2835.  You can now get, set, and list OS/2 file types using the new VX-REXX functions 
  2836.  VRGetFileType, VRSetFileType, and VRListFileTypes. 
  2837.  
  2838.  
  2839. ΓòÉΓòÉΓòÉ <hidden> Improved file functions ΓòÉΓòÉΓòÉ
  2840.  
  2841.  The functions related to files and directories have the following 
  2842.  improvements: 
  2843.  
  2844.  o They accept HPFS file names for files on HPFS volumes 
  2845.  o File names which contain more than one period are now supported. 
  2846.  o LAN Server UNC names are now supported. 
  2847.  o New file name parsing function: VRParseFilePath. 
  2848.  
  2849.  
  2850. ΓòÉΓòÉΓòÉ <hidden> Enhanced object naming ability ΓòÉΓòÉΓòÉ
  2851.  
  2852.  VX-REXX now allows you to refer to objects using the name of the object's 
  2853.  parent (and grand parent). To do this, prefix the name of the object with the 
  2854.  name or internal name of its parent, followed by a period. 
  2855.  
  2856.  For example, suppose you have a window (name is "Window1", internal name is 
  2857.  "?VR0001"), with a group box (name is "GB_1", internal name is "?VR0002"), 
  2858.  which contains a radio button (name is "RB_1", internal name is "?VR0003"). 
  2859.  Any of the following expressions identify the radio button: 
  2860.  
  2861.   RB_1
  2862.   GB_1.RB_1
  2863.   Window1.GB_1.RB_1
  2864.   ?VR0003
  2865.   ?VR0002.RB_1
  2866.   ?VR0001.GB_1.RB_1
  2867.   ?VR0001.?VR0002.RB1
  2868.   ?VR0002.?VR0003
  2869.   ?VR0001.?VR0002.?VR0003
  2870.  
  2871.  The rules for forming a dotted name are as follows: 
  2872.  
  2873.  o Dotted names are processed from left to right where the parent is listed to 
  2874.    the left of its child. 
  2875.  
  2876.  o Dotted names can start with either a name or an internal name. 
  2877.  
  2878.  o If a dotted name starts with an internal name, then there must not be any 
  2879.    internal names following the first (regular) name. 
  2880.  
  2881.  o After the last internal name (if any), the remaining names must be regular 
  2882.    names (ie. no internal names). 
  2883.  
  2884.  o Dotted names cannot start or end with a dot. 
  2885.  
  2886.  o No spaces are allowed before or after a dot. 
  2887.  
  2888.  This feature is useful for referencing objects on a window that you load a 
  2889.  number of times. For example, suppose you have a window with the name SW_1. On 
  2890.  that window is a push button called PB_1. If you load the window twice (using 
  2891.  VRLoad or VRLoadSecondary), the push buttons will have the same name. To refer 
  2892.  to a specific button, prefix the button's name with the internal name of the 
  2893.  window. The following code loads the SW_1 window twice, then sets the captions 
  2894.  on the two buttons: 
  2895.  
  2896.   w1 = VRLoadSecondary( "SW_1" )
  2897.   w2 = VRLoadSecondary( "SW_1" )
  2898.   call VRSet w1 || "." || "PB_1", "Caption", "Button1"
  2899.   call VRSet w2 || "." || "PB_1", "Caption", "Button2"
  2900.  
  2901.  
  2902. ΓòÉΓòÉΓòÉ <hidden> Improved error detection at run time ΓòÉΓòÉΓòÉ
  2903.  
  2904.  Calling VRSet, VRGet, or VRMethod with an invalid object name now causes a 
  2905.  syntax error. To test whether an object name is still valid, use the new 
  2906.  VRIsValidObject function. 
  2907.  
  2908.  To disable this new error detection, use the new VROptions function. 
  2909.  
  2910.  
  2911. ΓòÉΓòÉΓòÉ <hidden> Improved list boxes ΓòÉΓòÉΓòÉ
  2912.  
  2913.  You can now associate user data with strings in a list box. The AddString 
  2914.  method now takes user data for a list item as a new optional parameter. 
  2915.  Similarly, AddStringList now takes an optional stem variable with an array of 
  2916.  user data for the list items. 
  2917.  
  2918.  The following new list box methods are also provided to set and retrieve list 
  2919.  item user data: SetItemData, GetItemData, SetItemDataList, and 
  2920.  GetItemDataList. 
  2921.  
  2922.  Note:  These methods are documented in the online Reference only. 
  2923.  
  2924.  
  2925. ΓòÉΓòÉΓòÉ <hidden> Improved multiple line entry fields ΓòÉΓòÉΓòÉ
  2926.  
  2927.  Multiple line entry fields (MLEs) can now hold more than 64k of data. MLEs 
  2928.  also now support both raster and outline fonts. Previously, only raster fonts 
  2929.  were supported. 
  2930.  
  2931.  
  2932. ΓòÉΓòÉΓòÉ <hidden> Improved windows ΓòÉΓòÉΓòÉ
  2933.  
  2934.  If a window that is positioned off the screen is made visible, the window is 
  2935.  automatically centered over its parent window. 
  2936.  
  2937.  You can now create windows that do not have a title bar by setting the new 
  2938.  TitleBar property to 0. 
  2939.  
  2940.  
  2941. ΓòÉΓòÉΓòÉ <hidden> Support for icons in picture objects ΓòÉΓòÉΓòÉ
  2942.  
  2943.  You can now name icon resources and files using the PicturePath property. To 
  2944.  reference an ICO file, set the PicturePath property to the complete file name 
  2945.  of the ICO file including path. For an icon resource in a DLL, use the 
  2946.  following syntax: 
  2947.  
  2948.   $resourceID:DLLName
  2949.  
  2950.  where resourceID is the icon resource identifier. DLLName is the name of the 
  2951.  DLL that contains the resource. You should not include any path information in 
  2952.  the DLLName. 
  2953.  
  2954.  
  2955. ΓòÉΓòÉΓòÉ <hidden> New or improved properties, events, methods, and functions ΓòÉΓòÉΓòÉ
  2956.  
  2957.  See the online Reference for more information. 
  2958.  
  2959.  Autosize property 
  2960.  
  2961.  Objects that have AutoSize set to 1 now resize themselves when they are 
  2962.  loaded. This new behavior applies to descriptive text, DDE clients, timers, 
  2963.  push buttons, radio buttons, check boxes, and entry fields. 
  2964.  
  2965.  GetItemData method 
  2966.  
  2967.  The GetItemData method retrieves user data for a list box item. 
  2968.  
  2969.  GetItemDataList method 
  2970.  
  2971.  The GetItemDataList method retrieves user data for a number of list box items. 
  2972.  
  2973.  Popup method 
  2974.  
  2975.  The Popup method displays a Menu object as a pop-up menu. 
  2976.  
  2977.  SetItemData method 
  2978.  
  2979.  The SetItemData method associates user data with a list box item. 
  2980.  
  2981.  SetItemDataList method 
  2982.  
  2983.  The SetItemDataList method associates user data with a number of list box 
  2984.  items. 
  2985.  
  2986.  TitleBar property 
  2987.  
  2988.  The TitleBar property controls whether or not a window has a title bar. 
  2989.  
  2990.  VRInfo function 
  2991.  
  2992.  The VRInfo function now accepts the parameter Window for all events. It 
  2993.  returns the internal name of the window which contains the object that caused 
  2994.  the event. 
  2995.  
  2996.  VRIsValidObject function 
  2997.  
  2998.  The VRIsValidObject function returns 1 if a given object or PM window handle 
  2999.  is still valid. 
  3000.  
  3001.  VRParseFilePath function 
  3002.  
  3003.  The VRParseFilePath function parses a file name without checking if the file 
  3004.  exists. 
  3005.  
  3006.  VRPrintFile function 
  3007.  
  3008.  The VRPrintFile function prints a file. 
  3009.  
  3010.  VRPintJobDialog function 
  3011.  
  3012.  The VRPrintJobDialog function displays a print job dialog for a given printer. 
  3013.  
  3014.  VRSortStem function 
  3015.  
  3016.  The VRSortStem function sorts a REXX array. 
  3017.  
  3018.  
  3019. ΓòÉΓòÉΓòÉ <hidden> Improved documentation ΓòÉΓòÉΓòÉ
  3020.  
  3021.  o Added chapter in the Programmer's Guide on writing programs with multiple 
  3022.    threads. 
  3023.  
  3024.  o Added chapter on writing custom modal dialogs. 
  3025.  
  3026.  Bounce              shows how to use a timer 
  3027.  
  3028.  DDE Explorer        shows how to find and communicate with DDE servers 
  3029.  
  3030.  DragDrop            shows how to add drag and drop to your programs 
  3031.  
  3032.  File browser        shows how to display a list of files using a container 
  3033.  
  3034.  Notebook            shows how to use a notebook 
  3035.  
  3036.  Popup               shows how to use a pop-up menu 
  3037.  
  3038.  Printing            shows how to print a file 
  3039.  
  3040.  Q+E Text            shows how to use VXQE and QELIB (from Q+E Software) 
  3041.  
  3042.  RGB                 shows how to use sliders and value sets 
  3043.  
  3044.  Update DB Sample    shows how to use VXQE and QELIB or the DB2/2 SQL interface 
  3045.                      with DB2/2 
  3046.  
  3047.  These samples are described in the Samples section of this document. 
  3048.  
  3049.  
  3050. ΓòÉΓòÉΓòÉ <hidden> VXQE runtime library ΓòÉΓòÉΓòÉ
  3051.  
  3052.  The file VXQE.DLL is the VXQE Library for Watcom VX-REXX. This library allows 
  3053.  VX-REXX applications to access the Q+E Database Library, available from Q+E 
  3054.  Software. You are allowed to redistribute the library royalty free under the 
  3055.  restrictions described elsewhere in this document. 
  3056.  
  3057.  
  3058. ΓòÉΓòÉΓòÉ <hidden> Generating prototypes for VXQE functions ΓòÉΓòÉΓòÉ
  3059.  
  3060.  To generate prototypes for VXQE functions, select the Insert Code item from 
  3061.  the Edit menu in the VX-REXX section editor. The list of items in the dialog 
  3062.  box which is displayed contains a section called VXQE Library. Descriptions 
  3063.  for all the VXQE Library functions are listed in this section. Selecting any 
  3064.  of these function descriptions will produce another dialog box which will 
  3065.  prompt for parameter values and then automatically insert code for the 
  3066.  selected function into the section editor. For a complete description of the 
  3067.  automatic code generation feature, see the VXΓêÖREXX Programmer's Guide. 
  3068.  
  3069.  
  3070. ΓòÉΓòÉΓòÉ <hidden> Sample programs ΓòÉΓòÉΓòÉ
  3071.  
  3072.  There are two sample programs that demonstrate using the VXQE library: 
  3073.  
  3074.  Q+E Text            The Q+E Text program displays data for selected employees. 
  3075.                      It uses the VXQE library and the QELIB library (from Q+E 
  3076.                      Software) to access the EMP.TXT file supplied with QELIB. 
  3077.                      This sample application is the VX-REXX equivalent of the 
  3078.                      example provided with QELIB. 
  3079.  
  3080.  Update DB Sample    The Update DB Sample program uses the VXQE library and the 
  3081.                      QELIB (from Q+E Software), or the DB2/2 SQL interface to 
  3082.                      access IBM DB2/2. This sample is similar to the Sample 
  3083.                      Database sample, except it provides greater functionality, 
  3084.                      and allows the use of the Q+E interface. This application 
  3085.                      allows employee records from the STAFF table of the SAMPLE 
  3086.                      database to be viewed, modified, deleted and created. The 
  3087.                      sample database, called SAMPLE, supplied with Database 
  3088.                      Manager must be installed to run this sample. Also, to use 
  3089.                      the Q+E interface, any steps required to use a QELIB 
  3090.                      application with Database Manager must be performed. In 
  3091.                      particular, QLEE.DLL must be bound to the SAMPLE database. 
  3092.                      See the Q+E Database Library Documentation for complete 
  3093.                      details. 
  3094.  
  3095.  
  3096. ΓòÉΓòÉΓòÉ <hidden> Known problems ΓòÉΓòÉΓòÉ
  3097.  
  3098.  A time stamp error may be reported by the IBM DB2/2 application. This error 
  3099.  will probably be the result of an incorrect QLEE.BND file supplied with the 
  3100.  Q+E Database Library. Contact Q+E Software to obtain a correct QLEE.BND file. 
  3101.  
  3102.  
  3103. ΓòÉΓòÉΓòÉ <hidden> Contacting Q+E Software ΓòÉΓòÉΓòÉ
  3104.  
  3105.  For more information on the Q+E Database Library (QELIB), please contact Q+E 
  3106.  Software at the following addresses: 
  3107.  
  3108.   In North America:
  3109.       Q+E Software
  3110.       5540 Centerview Drive
  3111.       Suite 324
  3112.       Raleigh, NC 27606
  3113.       USA
  3114.       (919) 859-2220 (Sales)
  3115.       (919) 851-1152 (Technical support)
  3116.  
  3117.   In Europe:
  3118.       Q+E Software Europe
  3119.       Marten Messweg 99
  3120.       Rotterdam, The Netherlands
  3121.       (+31) 10 2202 022
  3122.  
  3123.  
  3124. ΓòÉΓòÉΓòÉ <hidden> Design environment ΓòÉΓòÉΓòÉ
  3125.  
  3126.  o Previously, if you changed a section from a file that was not the current 
  3127.    file, the changes would be ignored. This has been fixed. 
  3128.  
  3129.  o Previously, if you quit the VX-REXX while the design environment was 
  3130.    minimized, the design windows could be positioned in unpredictable locations 
  3131.    the next time you ran VX-REXX. This bug has been fixed. 
  3132.  
  3133.  o Previously, if you renamed an object that had event routines defined, the 
  3134.    event sections might not have been renamed. The sections are now always 
  3135.    renamed. 
  3136.  
  3137.  o Previously, the debugger would not always show the last line of a section in 
  3138.    a trace or source window. 
  3139.  
  3140.  o Previously, pressing F1 when a user window was active would show the help 
  3141.    text defined for the window rather than the VX-REXX help text. 
  3142.  
  3143.  
  3144. ΓòÉΓòÉΓòÉ <hidden> Run time environment ΓòÉΓòÉΓòÉ
  3145.  
  3146.  o Menu items that are added to a menu bar are now displayed correctly. 
  3147.    Previously, they were not always visible. 
  3148.  
  3149.  o Previously, picture boxes were not painted properly if they overlapped the 
  3150.    list area of a drop down combo box. They are now painted correctly. 
  3151.  
  3152.  o Previously, in programs that were started without any command line 
  3153.    arguments, the InitArgs.0 REXX variable was set to 1. It is now 0 (zero). 
  3154.  
  3155.  
  3156. ΓòÉΓòÉΓòÉ <hidden> Properties, methods, events, and functions ΓòÉΓòÉΓòÉ
  3157.  
  3158.  Click event 
  3159.  
  3160.  Setting the Selected property of a list box used to erroneously cause two 
  3161.  Click events to be generated. Now a single event is generated. 
  3162.  
  3163.  Enabled property 
  3164.  
  3165.  Previously, if a window was created with Enabled set to 0, setting Enabled to 
  3166.  1 later on would have no effect. Now the window is enabled correctly. 
  3167.  
  3168.  ForeColor property 
  3169.  
  3170.  The ForeColor property has been removed from ImagePushButton and 
  3171.  ImageRadioButton objects. 
  3172.  
  3173.  PicturePath property 
  3174.  
  3175.  Previously, if a window had a bitmap picture as the background, and the window 
  3176.  was resized, the background would not always be drawn correctly. 
  3177.  
  3178.  VRDir function 
  3179.  
  3180.     o The function now validates its "search" parameter. Previously, the 
  3181.       debugger may have behaved unpredictably when debugging a call to VRDir 
  3182.       that passed an invalid search parameter. 
  3183.     o VRDir no longer raises a syntax error if parameters were omitted. 
  3184.  
  3185.  VRMessage function 
  3186.  
  3187.  Fixed VRMessage to take into account the length of the title when setting size 
  3188.  of dialog. Also made minimum width of dialog be 120 pixels. (Max width is 3/4 
  3189.  of screen width.) The function is now faster. 
  3190.  
  3191.  VRParseFileName function 
  3192.  
  3193.  Previously, the function would not correctly parse names ending in a 
  3194.  backslash. 
  3195.  
  3196.  VRRedirectStdio function 
  3197.  
  3198.  This function now restores the original standard I/O streams when redirection 
  3199.  is turned off. This fixes the problem of sometimes not being able to close 
  3200.  streams after turning redirection off. 
  3201.  
  3202.  File functions 
  3203.  
  3204.  All file and directory related functions allow file names that contain more 
  3205.  than one period. In previous versions of VX-REXX, these types of names were 
  3206.  not allowed. 
  3207.  
  3208.  
  3209. ΓòÉΓòÉΓòÉ 6.4. New in version 1.01 ΓòÉΓòÉΓòÉ
  3210.  
  3211.  What's new in version 1.01: 
  3212.  
  3213.  Development Environment 
  3214.  
  3215.  Drag and Drop 
  3216.  Macros 
  3217.  Swipe Selection 
  3218.  Status Line 
  3219.  Tool Palette 
  3220.  Event Routine Access 
  3221.  Code Section Editor 
  3222.  Default Editor 
  3223.  
  3224.  New Runtime Features 
  3225.  
  3226.  SpinButton Object 
  3227.  Enhanced Keyboard Support 
  3228.  Other Application Windows 
  3229.  Clipboard support 
  3230.  STDIO Redirection 
  3231.  Source Code Encoding 
  3232.  Error Handling 
  3233.  Debugger Menus 
  3234.  Personal REXX v3.0a Support 
  3235.  
  3236.  Properties, Events, Methods 
  3237.  
  3238.  AddStringList Method 
  3239.  AdjustHeight Property 
  3240.  Change Event 
  3241.  ExtendedSelect Property 
  3242.  HWnd Property 
  3243.  Justification Property 
  3244.  LayoutStyle Property 
  3245.  ListChildren Method 
  3246.  ListClasses Method 
  3247.  Maximize Method 
  3248.  Minimize Method 
  3249.  MLE Object 
  3250.  Painting Property 
  3251.  Pointer Property 
  3252.  PostQueue Method 
  3253.  Restore Method 
  3254.  StatusArea 
  3255.  SupportsMethod Method 
  3256.  SupportsProperty Method 
  3257.  TabGroup Property 
  3258.  VertJustification Property 
  3259.  
  3260.  
  3261. ΓòÉΓòÉΓòÉ <hidden> Drag and drop programming ΓòÉΓòÉΓòÉ
  3262.  
  3263.  VX-REXX has a new facility to make programming faster and easier. All REXX 
  3264.  functions, all of VX-REXX's built in functions, as well as all object methods 
  3265.  and properties can be used without having to write a single line of code. All 
  3266.  you have to do to start the process is drag an object onto a section editor 
  3267.  window. 
  3268.  
  3269.  Suppose you have a window with a list box and a push button. You want to add a 
  3270.  string to the list every time the push button is clicked. 
  3271.  
  3272.   1. Open a VX-REXX section editor for the push button's Click event. 
  3273.  
  3274.   2. Position the insertion cursor in the section editor window at the point 
  3275.      where you want the code to be inserted. 
  3276.  
  3277.   3. Drag the list box onto the section editor window. 
  3278.  
  3279.      When the pointer is over an editor window, VX-REXX draws a line linking 
  3280.      the object to the window to indicate that it will generate code, instead 
  3281.      of moving the object. When you release the mouse button, VX-REXX displays 
  3282.      a list of actions you can perform on the list box. 
  3283.  
  3284.   4. Select Add a string from the list 
  3285.  
  3286.      VX-REXX will prompt you for the parameters to the AddString method. 
  3287.  
  3288.   5. Type the text you want to add to the list in the String entry field. 
  3289.  
  3290.   6. Click OK. 
  3291.  
  3292.  VX-REXX will add a line at the insertion point similar to the following: 
  3293.  
  3294.   position = VRMethod( "LB_1", "AddString", "Pressed" )
  3295.  
  3296.  
  3297.  Inserting code without drag and drop 
  3298.  
  3299.  You can also use this facility directly from the Insert code menu item in the 
  3300.  section editor's Edit menu.  This allows you to generate code for an object 
  3301.  without dragging and dropping it, and to generate non-object specific code 
  3302.  such as calls to standard REXX functions. 
  3303.  
  3304.  To insert code in a section editor: 
  3305.  
  3306.   1. Open a section editor. 
  3307.  
  3308.   2. Position the insertion cursor in the section editor window at the point 
  3309.      where you want the code to be inserted. 
  3310.  
  3311.   3. Select Insert code from either the Edit menu or the (new) pop-up menu 
  3312.      (click on the section editor window with mouse button 2). 
  3313.  
  3314.      VX-REXX will show a list of objects and tasks for which it can generate 
  3315.      REXX code. 
  3316.  
  3317.   4. Pick an action, then fill in the dialog as described above to generate the 
  3318.      code. 
  3319.  
  3320.  
  3321.  Inserting code into external editors 
  3322.  
  3323.  Drag and drop code generation does not work for editors other than the VX-REXX 
  3324.  section editor. However you can configure VX-REXX so you can insert code into 
  3325.  the OS/2 clipboard from where it can be pasted into any editor. The macros 
  3326.  GenCodeO.VRM and GenCodeG.VRM in the Macros folder are used to enable this 
  3327.  feature. Their use is explained in the Profile.VRM file, also contained in the 
  3328.  Macro folder. 
  3329.  
  3330.  It is also possible to directly invoke the insert code dialogs from a 
  3331.  PM-hosted, REXX-aware editor. The files in the EPMProto directory in the 
  3332.  Macros folder are provided to show how an insert code command can be added to 
  3333.  the OS/2 Enhanced Editor (EPM). See the file EPMProto.TXT in the EPMProto 
  3334.  directory for more information. 
  3335.  
  3336.  
  3337. ΓòÉΓòÉΓòÉ <hidden> Macros in the development environment ΓòÉΓòÉΓòÉ
  3338.  
  3339.  You can now tailor the VX-REXX development environment by creating custom 
  3340.  commands as VX-REXX macros. This allows you to add new features to VX-REXX! 
  3341.  
  3342.  You create the macros using VX-REXX, just as you would for any other 
  3343.  PM-hosted, REXX-aware application. You create a project, then choose Make 
  3344.  macro from the Project menu. You add the macro to the development environment 
  3345.  by adding a line to the Profile.VRM file located in the Macros folder. Macro 
  3346.  commands added to VX-REXX appear as extra menu items in the VX-REXX pop-up 
  3347.  menu -- either on all objects or only on selected objects. 
  3348.  
  3349.  The following macros, along with their source projects, are included with 
  3350.  VX-REXX: 
  3351.  
  3352.  o Tab editor macro 
  3353.  
  3354.    The tab editor macro provides a fast and easy way to set the tab order for 
  3355.    all of the objects on a window. 
  3356.  
  3357.  o Set properties macro 
  3358.  
  3359.    The set properties macro can be used instead of property notebooks to view 
  3360.    or set an object's properties. It makes it easier to edit all of the 
  3361.    properties of a single object, or to set the same property on a number of 
  3362.    objects. 
  3363.  
  3364.  o Resize macro 
  3365.  
  3366.    The resize macro forces a number of objects to the same size. A typical use 
  3367.    is to force a number of push buttons to the same size. 
  3368.  
  3369.  o Object list macro 
  3370.  
  3371.    This macro lists all objects on a window. You can select objects from the 
  3372.    list and open their property notebooks. This makes it possible to find 
  3373.    objects that are behind other objects or beyond the border of the window. 
  3374.  
  3375.  Details on how to create and install macros are provided in the Profile.VRM 
  3376.  and the Macros.TXT files in the Macros directory. 
  3377.  
  3378.  
  3379. ΓòÉΓòÉΓòÉ <hidden> Swipe selection now supported ΓòÉΓòÉΓòÉ
  3380.  
  3381.  If you press mouse button 1 while the pointer is not over an object, you get a 
  3382.  marquee selection with a bounding rectangle. All selection in version 1.00 was 
  3383.  done this way. 
  3384.  
  3385.  If you press mouse button 1 while over an object, you start a swipe selection. 
  3386.  As long as you hold mouse button 1 down, you will select any object the 
  3387.  pointer passes over. 
  3388.  
  3389.  
  3390. ΓòÉΓòÉΓòÉ <hidden> New status line ΓòÉΓòÉΓòÉ
  3391.  
  3392.  A status bar has been added to VX-REXX to give the name and class of the 
  3393.  object that is currently under the pointer. You can disable the feature by 
  3394.  unchecking the Show Hints menu item in the Options menu. 
  3395.  
  3396.  
  3397. ΓòÉΓòÉΓòÉ <hidden> Resizable tool palette ΓòÉΓòÉΓòÉ
  3398.  
  3399.  You can now resize the tool palette. Its size and position is saved along with 
  3400.  the size and position of the other VX-REXX windows when you save a project. 
  3401.  
  3402.  
  3403. ΓòÉΓòÉΓòÉ <hidden> Quicker access to event routines ΓòÉΓòÉΓòÉ
  3404.  
  3405.  There is a new item in the VX-REXX object popup menu which lists all of the 
  3406.  events for the object. This is a short cut for opening the object's property 
  3407.  notebook, selecting the Events page, and clicking on the event. 
  3408.  
  3409.  
  3410. ΓòÉΓòÉΓòÉ <hidden> New popup menu in code section editor ΓòÉΓòÉΓòÉ
  3411.  
  3412.  Clicking on a code section editor with mouse button 2 now displays a popup 
  3413.  version of the Edit menu. This speeds up access to common commands such as 
  3414.  cut, copy, and paste. 
  3415.  
  3416.  
  3417. ΓòÉΓòÉΓòÉ <hidden> Set the default editor to an external editor ΓòÉΓòÉΓòÉ
  3418.  
  3419.  You can now configure VX-REXX to use an external editor as the default editor. 
  3420.  To do this, set the check box in the external editor configuration dialog. 
  3421.  
  3422.  
  3423. ΓòÉΓòÉΓòÉ <hidden> New SpinButton object ΓòÉΓòÉΓòÉ
  3424.  
  3425.  An additional object, the spin button, has been added. A spin button allows a 
  3426.  user to enter a value or select a value from a list. Only a single value from 
  3427.  the list is displayed; the user can change the displayed value by clicking on 
  3428.  up and down buttons. 
  3429.  
  3430.  You can set the list in a spin button either at design time or run time, and 
  3431.  you can specify the list as either an enumerated set of values or as a range 
  3432.  of values with a specified increment. 
  3433.  
  3434.  See the Using objects section in the online Programmer's Guide and SpinButton 
  3435.  object in the Reference for more information. 
  3436.  
  3437.  
  3438. ΓòÉΓòÉΓòÉ <hidden> Enhanced keyboard support ΓòÉΓòÉΓòÉ
  3439.  
  3440.  o Accelerators 
  3441.  
  3442.    VX-REXX menus can now have accelerator or short-cut keys. Accelerator keys 
  3443.    allow your users to execute menu commands without opening a menu. See the 
  3444.    online Reference under the Accelerator property or InstallAccelerator method 
  3445.    for a full description. 
  3446.  
  3447.  o Mnemonics 
  3448.  
  3449.    Mnemonics are now supported for all options with captions. Mnemonics allow 
  3450.    your users to activate objects without using a mouse. See the Caption 
  3451.    property in the online Reference for more information. 
  3452.  
  3453.  o Keystroke trapping 
  3454.  
  3455.    Programs can now trap and modify keystrokes. This allows you to change the 
  3456.    behavior of objects, for example convert text in an entry field to uppercase 
  3457.    as it is entered. See the KeyPress event or KeyString property in the 
  3458.    Reference documentation  for a full description of this new feature. 
  3459.  
  3460.  
  3461. ΓòÉΓòÉΓòÉ <hidden> Manipulate windows belonging to other applications ΓòÉΓòÉΓòÉ
  3462.  
  3463.  Using the new ListWindows method you can list all of the top level windows in 
  3464.  the system. Then you can use the VRGet, VRSet, and VRMethod functions to 
  3465.  interact with these windows. The windows appear to the program as VX-REXX 
  3466.  objects which support a limited number of properties and methods. 
  3467.  
  3468.  You can also post or send keystrokes to PM windows using the new PostKeyString 
  3469.  and SendKeyString methods. 
  3470.  
  3471.  See the ListWindows method, HWnd property, PostKeyString method, and 
  3472.  SendKeyString method in the Reference for complete information. 
  3473.  
  3474.  
  3475. ΓòÉΓòÉΓòÉ <hidden> Clipboard support ΓòÉΓòÉΓòÉ
  3476.  
  3477.  You can use two new methods on the Application object to read and write text 
  3478.  from/to the OS/2 clipboard. See the PutClipboard and GetClipboard methods in 
  3479.  the online documentation for more information. 
  3480.  
  3481.  
  3482. ΓòÉΓòÉΓòÉ <hidden> Improved control over STDIO redirection ΓòÉΓòÉΓòÉ
  3483.  
  3484.  The VRRedirectSTDIO function now lets you enable and disable standard I/O 
  3485.  redirection and logging under program control. 
  3486.  
  3487.  
  3488. ΓòÉΓòÉΓòÉ <hidden> Source code encoding in EXE files ΓòÉΓòÉΓòÉ
  3489.  
  3490.  VX-REXX now encodes your REXX source code when it makes EXE files. This means 
  3491.  that you can distribute your programs and keep your source secure. 
  3492.  
  3493.  
  3494. ΓòÉΓòÉΓòÉ <hidden> Improved error handling in VX-REXX generated macros ΓòÉΓòÉΓòÉ
  3495.  
  3496.  When you make macros, VX-REXX now automatically generates code to trap syntax 
  3497.  errors. The code displays an error message, then exits the macro. If you have 
  3498.  your own syntax error handler, it will override the automatically generated 
  3499.  one. 
  3500.  
  3501.  
  3502. ΓòÉΓòÉΓòÉ <hidden> File menu removed from the debugger ΓòÉΓòÉΓòÉ
  3503.  
  3504.  The debugger section list window no longer contains a File menu with a single 
  3505.  Quit item. It was removed to improve the conformance of VX-REXX to the CUA '91 
  3506.  object model. Now just close the section list window to quit the debugger and 
  3507.  return to the design environment. 
  3508.  
  3509.  
  3510. ΓòÉΓòÉΓòÉ <hidden> Support for Personal REXX version 3.0a ΓòÉΓòÉΓòÉ
  3511.  
  3512.  VX-REXX now works with Quercus System's Personal REXX version 3.0a. 
  3513.  
  3514.  
  3515. ΓòÉΓòÉΓòÉ <hidden> AddStringList method ΓòÉΓòÉΓòÉ
  3516.  
  3517.  This method now disables list box repainting while adding strings to the list, 
  3518.  speeding up the operation. 
  3519.  
  3520.  
  3521. ΓòÉΓòÉΓòÉ <hidden> AdjustHeight property ΓòÉΓòÉΓòÉ
  3522.  
  3523.  This ListBox property forces the list box to adjust its height to an integral 
  3524.  number of lines. 
  3525.  
  3526.  
  3527. ΓòÉΓòÉΓòÉ <hidden> Change event ΓòÉΓòÉΓòÉ
  3528.  
  3529.  Objects containing an entry field now support a Change event which is 
  3530.  triggered whenever the contents of the field have changed. 
  3531.  
  3532.  
  3533. ΓòÉΓòÉΓòÉ <hidden> ExtendedSelect property ΓòÉΓòÉΓòÉ
  3534.  
  3535.  List boxes now support two styles of multiple selection, extended (items are 
  3536.  selected in ranges) and non-extended (items are selected one at a time). 
  3537.  
  3538.  
  3539. ΓòÉΓòÉΓòÉ <hidden> HWnd property ΓòÉΓòÉΓòÉ
  3540.  
  3541.  All visible objects now have an HWnd property which gives the value of the PM 
  3542.  handle to the outer window of the object. 
  3543.  
  3544.  
  3545. ΓòÉΓòÉΓòÉ <hidden> Justification property ΓòÉΓòÉΓòÉ
  3546.  
  3547.  DescriptiveText and EntryField objects have a new Justification property, 
  3548.  which can be Left, Right, or Center. 
  3549.  
  3550.  
  3551. ΓòÉΓòÉΓòÉ <hidden> LayoutStyle property ΓòÉΓòÉΓòÉ
  3552.  
  3553.  The layout style controls how a window arranges the objects it contains. You 
  3554.  can use this property to make windows that automatically resize their 
  3555.  children. 
  3556.  
  3557.  
  3558. ΓòÉΓòÉΓòÉ <hidden> ListChildren method ΓòÉΓòÉΓòÉ
  3559.  
  3560.  This method lists the children of a given object. 
  3561.  
  3562.  
  3563. ΓòÉΓòÉΓòÉ <hidden> ListClasses method ΓòÉΓòÉΓòÉ
  3564.  
  3565.  Use this method to list the classes of objects in a DLL or in the current 
  3566.  program. 
  3567.  
  3568.  
  3569. ΓòÉΓòÉΓòÉ <hidden> Maximize method ΓòÉΓòÉΓòÉ
  3570.  
  3571.  This new window method causes a window to be maximized. 
  3572.  
  3573.  
  3574. ΓòÉΓòÉΓòÉ <hidden> Minimize method ΓòÉΓòÉΓòÉ
  3575.  
  3576.  This new window method minimizes a window. 
  3577.  
  3578.  
  3579. ΓòÉΓòÉΓòÉ <hidden> MultiLineEntryField object ΓòÉΓòÉΓòÉ
  3580.  
  3581.  Multiline entry fields now support the DoubleClick event. 
  3582.  
  3583.  
  3584. ΓòÉΓòÉΓòÉ <hidden> Painting property ΓòÉΓòÉΓòÉ
  3585.  
  3586.  This new property has been added to all visible objects and can be used to 
  3587.  suppress painting of an object or group of objects during an update. 
  3588.  
  3589.  
  3590. ΓòÉΓòÉΓòÉ <hidden> Pointer property ΓòÉΓòÉΓòÉ
  3591.  
  3592.  Use this property to set the pointer to an hourglass or other shape during 
  3593.  long calculations. 
  3594.  
  3595.  
  3596. ΓòÉΓòÉΓòÉ <hidden> PostQueue method ΓòÉΓòÉΓòÉ
  3597.  
  3598.  This method is the same as the Post method except that it allows you to 
  3599.  specify which window queue (i.e. which primary window) should receive the 
  3600.  posted event. This ensures that the event is not simply delivered to the 
  3601.  currently active window. 
  3602.  
  3603.  
  3604. ΓòÉΓòÉΓòÉ <hidden> Restore method ΓòÉΓòÉΓòÉ
  3605.  
  3606.  This window method restores a minimized or maximized window to its previous 
  3607.  size and position. 
  3608.  
  3609.  
  3610. ΓòÉΓòÉΓòÉ <hidden> StatusArea ΓòÉΓòÉΓòÉ
  3611.  
  3612.  The status area on windows now has a sporty 3D look. 
  3613.  
  3614.  
  3615. ΓòÉΓòÉΓòÉ <hidden> SupportsMethod method ΓòÉΓòÉΓòÉ
  3616.  
  3617.  This method determines if a given method is available for a specified object 
  3618.  or type of object. 
  3619.  
  3620.  
  3621. ΓòÉΓòÉΓòÉ <hidden> SupportsProperty methods ΓòÉΓòÉΓòÉ
  3622.  
  3623.  This method determines if a given property is available for a specified object 
  3624.  or type of object. 
  3625.  
  3626.  
  3627. ΓòÉΓòÉΓòÉ <hidden> TabGroup property ΓòÉΓòÉΓòÉ
  3628.  
  3629.  This property has been added to all objects with the TabStop property. This 
  3630.  property is used to group objects into tab groups without using group boxes. 
  3631.  The user can move from object to object within a tab group by using either the 
  3632.  tab or cursor keys, but can only switch between tab groups by using the tab 
  3633.  key. 
  3634.  
  3635.  
  3636. ΓòÉΓòÉΓòÉ <hidden> VertJustification property ΓòÉΓòÉΓòÉ
  3637.  
  3638.  DescriptiveText objects have a new VertJustification property, which can be 
  3639.  Top, Bottom, or Center. You must set this property at design time; it is read 
  3640.  only at run time. 
  3641.  
  3642.  
  3643. ΓòÉΓòÉΓòÉ 7. Contacting Watcom ΓòÉΓòÉΓòÉ
  3644.  
  3645.  How to Contact Watcom 
  3646.  
  3647.  In North America (and all other non-European locations) 
  3648.  
  3649.  Watcom International Corporation. 415 Phillip Street, Waterloo, Ontario, 
  3650.  CANADA, N2L 3X2 
  3651.  
  3652.   General Inquiries    Sales                             Technical Support
  3653.   tel: (519)886-3700   Upgrades, other product orders,   hot-line: (519)886-3700
  3654.   fax: (519)747-4971   and reseller inquiries/orders:    fax:      (519)747-4547
  3655.                        1-800-265-4555 (toll free in      BBS:      (519)884-2100
  3656.                        North America)                    Internet: tech@watcom.on.ca
  3657.                                                          Compuserve: type GO WATCOM
  3658.  
  3659.  Watfax 
  3660.  
  3661.  Technical support and product information is available 24 hours a day using 
  3662.  our Watfax system. To reach Watfax, call 1-519-747-2693 from your touch-tone 
  3663.  fax phone. 
  3664.  
  3665.  In Europe 
  3666.  
  3667.  Watcom Europe Limited. PO Box 64, Livingston, West Lothian, EH54 7AE, UNITED 
  3668.  KINGDOM 
  3669.  
  3670.   General Inquiries      Sales                             Technical Support
  3671.   United Kingdom         Upgrades, other product orders,   United Kingdom
  3672.   tel: 0506 460112       and reseller inquiries/orders:    tel: 0506 460112
  3673.   fax: 0506 460115                                         fax: 0506 460115
  3674.                          United Kingdom Toll Free
  3675.   Other Locations        tel: 0800 44 44 55                Other Locations
  3676.   tel: (44) 506 460112   fax: 0800 55 54 55                tel: (44) 506 460112
  3677.   fax: (44) 506 460115                                     fax: (44) 506 460115
  3678.                          Germany Toll Free
  3679.                          tel: 0130 81 88 62                BBS: (519)884-2100
  3680.                          fax: 0130 81 88 63                Internet: tech@watcom.on.ca
  3681.                                                            Compuserve: type GO WATCOM
  3682.                          France Toll Free
  3683.                          tel: 05 90 81 35
  3684.                          fax: 05 90 81 36
  3685.  
  3686.                          All Other Locations
  3687.                          tel: (44) 506 460112
  3688.                          fax: (44) 506 460115
  3689.  
  3690.  
  3691. ΓòÉΓòÉΓòÉ 8. Notices ΓòÉΓòÉΓòÉ
  3692.  
  3693.  Topics 
  3694.  
  3695.  Copyright 
  3696.  Disclaimer 
  3697.  Trademarks 
  3698.  
  3699.  
  3700. ΓòÉΓòÉΓòÉ <hidden> Copyright ΓòÉΓòÉΓòÉ
  3701.  
  3702.  Copyright 1993, 1994 by Watcom International Corporation All rights reserved. 
  3703.  No part of this publication may be reproduced or used in any form or by any 
  3704.  means -- graphic, electronic, or mechanical, including photocopying, 
  3705.  recording, taping or information storage and retrieval systems -- without 
  3706.  written permission of the Watcom International Corporation. 
  3707.  
  3708.  
  3709. ΓòÉΓòÉΓòÉ <hidden> Disclaimer ΓòÉΓòÉΓòÉ
  3710.  
  3711.  Watcom (Watcom International Corporation and all of its subsidiaries)  makes 
  3712.  no representation or warranty with respect to the adequacy of this 
  3713.  documentation or the programs which it describes for any particular purpose or 
  3714.  with respect to its adequacy to produce any particular result. In no event 
  3715.  shall Watcom, its employees, its contractors or the authors of this 
  3716.  documentation be liable for special, direct, indirect or consequential 
  3717.  damages, losses, costs, charges, claims, demands or claim for lost profits, 
  3718.  fees or expenses of any nature or kind. 
  3719.  
  3720.  
  3721. ΓòÉΓòÉΓòÉ <hidden> Trademarks ΓòÉΓòÉΓòÉ
  3722.  
  3723.  Watcom and VX-REXX are trademarks of Watcom International Corporation. 
  3724.  
  3725.  IBM, OS/2, Extended Services, Extended Services for OS/2, Database 2, DB2/2, 
  3726.  Multimedia Presentation Manager/2, and MMPM/2 are trademarks of the IBM 
  3727.  Corporation. 
  3728.  
  3729.  Q+E is a trademark of Q+E Software.