home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l391 / 1.ddi / README.TX$ / README.bin
Encoding:
Text File  |  1992-08-19  |  47.0 KB  |  1,230 lines

  1.                                   README.TXT
  2.  
  3.         Release Notes for Microsoft (R) Visual Basic (TM) for MS-DOS (R)
  4.  
  5.                        Professional Edition Version 1.00
  6.  
  7.                  (C) Copyright Microsoft Corporation, 1982-1992
  8.  
  9. This document contains release notes for version 1.00 of Microsoft Visual
  10. Basic for MS-DOS. Information in this document is more current than that 
  11. in the manuals. Information in online Help may also be more current than 
  12. that in the manuals.
  13.  
  14. Microsoft revises its printed documentation at the time of reprinting, so
  15. manuals with document numbers ending in numbers higher than "0992" may
  16. include the corrections listed in parts 2-4. Document numbers are found on
  17. the copyright page of each manual.
  18.  
  19. ===========================================================================
  20. Contents
  21. ===========================================================================
  22.  
  23. Part    Description
  24. ----    -----------
  25.  
  26. 1       Notes on Using Microsoft Visual Basic
  27.  
  28. 2       Corrections to "Microsoft Visual Basic Programmer's Guide"
  29.  
  30. 3       Corrections to "Microsoft Visual Basic Reference"
  31.  
  32. 4       Corrections to Online Help
  33.  
  34. 5       Corrections to "Microsoft Visual Basic Professional Edition"
  35.  
  36.  
  37. ===========================================================================
  38. Part 1: Notes on Using Microsoft Visual Basic
  39. ===========================================================================
  40.  
  41. This part contains the following sections:
  42.  
  43.     1.1  Tips and Tricks
  44.     1.2  Forms
  45.     1.3  Language
  46.     1.4  LINK
  47.     1.5  Hardware Considerations 
  48.     1.6  TRNSLATE.EXE
  49.     1.7  Custom Controls
  50.     1.8  CodeView
  51.     1.9  Overlays
  52.     1.10 ISAM
  53.     1.11 BUILDRTM
  54.     1.12 PROFILE
  55.  
  56.  
  57. -------------------
  58. 1.1 Tips and Tricks
  59. -------------------
  60.  
  61. Programming Environment Speed vs. Capacity
  62. ------------------------------------------
  63. The programming environment (VBDOS.EXE) has been overlayed to increase 
  64. capacity. The default in-memory size of VBDOS.EXE is tuned to provide a 
  65. good speed/capacity tradeoff. If the environment seems slow to you, you 
  66. can increase speed by using the /S:n command-line switch. This switch 
  67. specifies the in-memory size of VBDOS.EXE. The default is approximately 
  68. 350K. To increase performance, specify a value greater than the default.
  69. To increase capacity, specify a value less than the default. For more 
  70. information, refer to Appendix B, "Memory Management" in the 
  71. "Programmer's Guide."
  72.  
  73. Memory Configuration Suggestions
  74. --------------------------------
  75. For systems running MS-DOS 5.00 and later, load MS-DOS and TSRs high to 
  76. free as much conventional memory as possible. Optimal configurations for 
  77. conventional, Extended memory (XMS), and Expanded memory (EMS) vary 
  78. depending on the type and amount of memory available on your system.
  79. The following recommendations cover 1 MB, 2 MB, and =>3 MB configurations.
  80.  
  81. 1 MB memory: If you have no XMS or EMS, the programming environment swaps
  82. to disk and all code is stored in conventional memory. To increase 
  83. performance, set the /S:n command-line option to a value greater than 350 
  84. (default). This will reduce overlay swapping. To increase capacity, set the 
  85. /S:n command-line option to a value less than 350. This reduces the 
  86. in-memory size of the programming environment, providing more far memory 
  87. for your program; overlay swapping increases however.
  88.  
  89. 2 MB memory: If you have XMS, use a memory manager such as EMM386 to
  90. configure all available memory above 1 MB as EMS. EMS can be used by the
  91. programming environment for overlay swapping as well as for program code 
  92. and data storage. If you do not have a memory manager that can configure 
  93. XMS memory as EMS memory, or if you do not need EMS for code and data 
  94. storage, use HIMEM.SYS to allow access to XMS memory for overlay swapping.  
  95. HIMEM.SYS uses less conventional and XMS memory for itself than memory 
  96. managers, such as EMM386.
  97.  
  98. 3 MB or more memory: Configure 1.5 MB as XMS for programming environment
  99. overlay swapping and divide the remaining memory between EMS and disk 
  100. caching (such as SMARTDRV.SYS). EMS provides more memory for program code 
  101. and data and disk caching provides faster file access.
  102.  
  103. Debugging Compiled .EXEs
  104. ------------------------
  105. You must use the /D compiler switch to enable Out of Stack space, array
  106. bounds, and overflow checking in the compiled code. In addition, /D 
  107. enables CTRL+BREAK at run-time in compiled .EXEs. This error checking is
  108. provided automatically in the programming environment.
  109.  
  110. Using VBDOS.EXE and Windows
  111. ---------------------------
  112. Since VBDOS.EXE is opened for reading while it is being run (due to 
  113. overlay support), you cannot automatically run VBDOS.EXE in two MS-DOS 
  114. sessions with SHARE.EXE loaded. To allow running VBDOS in multiple sessions, 
  115. make VBDOS.EXE read-only on your hard disk. 
  116.  
  117. Ending Execution While Debugging
  118. --------------------------------
  119. Pressing CTRL+BREAK while executing an application in the programming
  120. environment returns you to the currently executing code -- if a form is
  121. waiting for an event, you are returned to the code that invoked the form:
  122. either the module level of the start-up form or a SHOW method.
  123.  
  124. Terminating the application normally (by closing the last form, for example)
  125. returns you to your former location in code.
  126.  
  127. Inserting Special Characters
  128. ----------------------------
  129. To insert a special character in the Code window or in the Settings box in
  130. the Properties bar: 
  131.  
  132. 1. Set NUMLOCK on. 
  133. 2. Press CTRL+P. 
  134. 3. Hold down the ALT key and type the ASCII code of the character using 
  135.    the numeric keypad. 
  136. 4. Release the ALT key.
  137.  
  138. Note that this process may not work for some characters below ASCII 28. In
  139. those cases, use the CHR$ statement to insert special characters in code.
  140. For example:
  141.  
  142. x$ = CHR$(21) ' Section symbol.
  143.  
  144. To insert a special character in a form application at runtime (for example, 
  145. when typing in a text box):
  146.  
  147. 1. Set NUMLOCK on. 
  148. 2. Hold down the ALT key and type the ASCII code of the character using 
  149.    the numeric keypad. 
  150. 3. Release the ALT key.
  151.  
  152. Printing
  153. --------
  154. PRINT method output (PRINT from a form module) always goes to the active 
  155. form whether or not that form is visible. PRINT statement output (PRINT
  156. from a code module) always goes to the screen unless qualified by a form 
  157. reference (FORM1.PRINT. The PRINT statement cannot be used when forms are 
  158. showing. To send output to the screen from a form-based application, you 
  159. must first hide all visible forms (SCREEN.HIDE) and then use the PRINT 
  160. statement from a code module.
  161.  
  162. PRINT from the Immediate window applies to the currently active module
  163. if in a CTRL+BREAK state or to the Startup module if not in an
  164. edit-and-continue state. Therefore, if a code module is active, PRINT from
  165. the Immediate window is treated like the PRINT statement and the
  166. rules outlined above apply (PRINT statement not allowed when forms
  167. are showing). If the active module is a form module, PRINT from the
  168. Immediate window is treated like the PRINT method and applies to
  169. that form, whether or not it is visible. 
  170.  
  171. Code Cleanup
  172. -------------
  173. If you save your files in binary format, variable name table entries are
  174. preserved even after you have deleted all instances of a variable name. 
  175. To eliminate these entries, save your files as text (ASCII) and then resave 
  176. as binary. This increases capacity within the programming environment 
  177. and reduces the size of your source files.
  178.  
  179. Visual Basic does not automatically remove unused event procedure templates
  180. that you create with the Edit Event Procedures dialog box. Make sure you 
  181. delete all unused procedure templates before completing your project.
  182.  
  183. Form Redraw
  184. -----------
  185. The form painting and redraw algorithms in Visual Basic may not always 
  186. refresh the screen at the time you expect. This is because they have 
  187. been optimized to provide the best speed/redraw compromise. To repaint a
  188. form or control at any time, use the object's REFRESH method. For instance,
  189. PRINT output on a nonactive form may overwrite the shadow of the active 
  190. form, since PRINT does not cause a form refresh. Use the REFRESH method on
  191. the active form after the PRINT method to redraw the shadow.
  192.  
  193. Accessing Network Drives 
  194. ------------------------
  195. Setting the Drive or Path properties to a network drive may hang your
  196. application if the drive has disconnected.
  197.  
  198. Variable Names 
  199. --------------
  200. Avoid using scalar variable names of the form "A.B". This type of variable 
  201. naming is not supported Visual Basic for Windows and increases load time 
  202. due to the special parsing that is required. Use the "." notation only when 
  203. referencing properties, methods, or elements of a record variable. 
  204. Replace variables of the form "A.B" with variables of the form "A_B".
  205.  
  206. Avoid using variable names that are also the names of properties or 
  207. ControlPanel constants. Doing so can make it difficult to debug an 
  208. application. Because the Help system recognizes these names, symbol Help 
  209. for these variables is inhibited.
  210.  
  211. To work around this problem, rename VBDOS.HLP then request help on
  212. the variable. The programming environment displays an error dialog box. 
  213. When you choose Cancel, the programming environment displays symbol Help 
  214. for the variable.
  215.  
  216. Exiting When Out of Memory During Binding 
  217. -----------------------------------------
  218. If you run out of memory while binding in the programming environment, Visual
  219. Basic displays a dialog box with the "Out of Memory" error message. In some 
  220. cases, choosing OK only redisplays the dialog box. If this occurs, pressing 
  221. the SPACEBAR instead of ENTER may break the loop.
  222.  
  223. Math Coprocessor Performance
  224. ----------------------------
  225. Memory managers such as EMM386 and 386MAX will slow performance of
  226. math operations using a coprocessor. For best results, do not have a 
  227. memory manager resident when performing intensive math calculations using a 
  228. coprocessor.
  229.  
  230. Distinguishing Between Apostrophe and Right Arrow Keys
  231. ------------------------------------------------------
  232. The apostrophe (') and right arrow keys both return key codes of 39 in 
  233. key event procedures. To distinguish between these keys in code, use a
  234. combination of the KeyDown, KeyUp, and KeyPress events as shown below:
  235.  
  236. SUB Form_KeyDown (KeyCode AS INTEGER, Shift AS INTEGER)
  237.   SELECT CASE KeyCode
  238.     CASE 39
  239.       IF Shift = 0 THEN Tag = "arrow" ELSE Tag = ""
  240.     CASE ELSE
  241.   END SELECT
  242. END SUB
  243.  
  244. SUB Form_KeyPress (KeyAscii AS INTEGER)
  245.   IF KeyAscii = 39 THEN Tag = ""
  246.   PRINT CHR$(KeyAscii);
  247. END SUB
  248.  
  249. SUB Form_KeyUp (KeyCode AS INTEGER, Shift AS INTEGER)
  250.   IF KeyCode = 39 AND Tag = "arrow" THEN PRINT CHR$(16);
  251. END SUB
  252.  
  253. The preceding code takes advantage of the fact that KeyPress does not detect
  254. arrow keys -- if the key is detected in that event procedure, the code sets
  255. the form's Tag property to "" and prints the character. The Tag property is 
  256. then used in the KeyUp event procedure to print a "" character if KeyCode
  257. 39 is detected.
  258.  
  259.  
  260. ---------
  261. 1.2 Forms
  262. ---------
  263.  
  264. Ending Form Applications
  265. ------------------------
  266. If your compiled application has a hidden form and then unloads the last
  267. visible form, the system appears to stop. This occurs because there is
  268. still a loaded form, but no way to access it. To avoid this, end your 
  269. applications explicitly using an END statement or its equivalent, rather
  270. than relying on UNLOAD.
  271.  
  272. Note that reading or setting an unloaded form's properties or controls
  273. implicitly loads that form without displaying it. This is the most common
  274. way to get into the situation described above.
  275.  
  276. Visibility
  277. ----------
  278. Hiding a modal form makes that form nonmodal. Hiding an MDI form hides all 
  279. of its children: Thus, any modal children will no longer be modal when 
  280. they are shown again (unless explicitly shown again as modal). SCREEN.HIDE 
  281. hides all visible forms: Thus, modal  forms will be hidden and will no 
  282. longer be modal when they are shown again (unless explicitly shown as modal).
  283.  
  284. You can change the Visible property of child controls while their parent
  285. is hidden, but the Visible property of child controls will return False (0)
  286. as long as the parent is hidden. For example:
  287.  
  288. frmOpen.Visible = 0                     ' Hide parent form.
  289. cmdState% = frmOpen.cmdExit.Visible     ' cmdState% will be 0 (False)
  290. frmOpen.cmdExit.Visible = NOT cmdState% ' Change Visible property.
  291. frmOpen.Visible = -1                    ' Show form again.
  292.  
  293. In the preceding code, you might expect the third line to toggle the
  294. visibility of the command button. Instead, it sets Visible to True
  295. (NOT 0 = -1), regardless of the initial setting of cmdExit.Visible.
  296.  
  297. Menus and Timer Events
  298. ----------------------
  299. While a menu control has focus, timer events and ON <event> trapping are
  300. suspended. When the menu control loses focus, timer events and ON <event>
  301. trapping resume.
  302.  
  303. Insert State
  304. ------------
  305. Forms programs maintain the insert state internally. There is no way to
  306. programmatically switch between insert and overstrike in a text box.
  307.  
  308. Monochrome Displays
  309. -------------------
  310. For best appearance on monochrome displays, you should avoid 3-D. For
  311. example, the following turns off 3-D if a system does not have color or
  312. grey scale capability:
  313.  
  314. SUB CheckMono ( )
  315.   ON LOCAL ERROR GOTO SetNo3D
  316.   SCREEN.HIDE
  317.   SCREEN 1                   ' SCREEN 1 requires minimal graphics.
  318.   ON LOCAL ERROR GOTO 0
  319.   SCREEN 0
  320.   SCREEN.SHOW
  321.   EXIT SUB
  322. SetNo3D:
  323.   SCREEN.ControlPanel(THREE_D) = 0
  324.   RESUME NEXT
  325. END SUB
  326.  
  327. When creating form applications for users with monochrome monitors, be aware
  328. that the default color setting for access keys may display as bright white
  329. on bright white on some monitors. For applications that target this hardware,
  330. you may want to rely on tab order rather than access keys to provide a
  331. keyboard interface.
  332.  
  333. The sample applications included with Visual Basic are written for color
  334. monitors and monitors that support grey scale. If they do not display 
  335. properly on your system, turn off 3-D in their form load event procedures.
  336.  
  337. Setting ForeColor Property
  338. --------------------------
  339. SCREEN.ControlPanel(THREE_D) must be set to FALSE (0) for changes to the
  340. ForeColor property to affect the border of a control. While THREE_D is 
  341. TRUE (-1), Visual Basic supplies the border color.
  342.  
  343. Symbol Help on Controls
  344. -----------------------
  345. You cannot get Help on a control if it is not referenced in code from its 
  346. parent form. For example, in module ONE.FRM:
  347.  
  348. SUB frmONE_Click()
  349. cmdOK.Visible = FALSE
  350. END SUB
  351.  
  352. In module TWO.FRM:
  353.  
  354. X$ = frmONE.cmdOK.Tag
  355. Y$ = frmONE.fraHelp.Tag
  356.  
  357. In the preceding example, pressing F1 on cmdOK displays symbol Help on the
  358. control, but pressing F1 on fraHelp only beeps.
  359.  
  360. Maximum Number of Controls 
  361. --------------------------
  362. The maximum number of controls on a form is 254.
  363.  
  364. Maximum Number of Timers 
  365. ------------------------
  366. You cannot have more than 16 active timers at any one time. A timer is
  367. active if its Enabled property is True and its Interval property is nonzero.
  368. Custom controls that function as timers also apply to this limit. This
  369. limit does not apply to inactive timers.
  370.  
  371. Forms in Quick Libraries
  372. ------------------------
  373. You can create Quick libraries out of form modules by following the same
  374. procedures for Basic code modules. To access the properties of a Quick 
  375. library form or control in your application, you must declare the Quick
  376. library form by manually inserting a $FORM metacommand at the module level
  377. of the calling code.
  378.  
  379. With project files, the programming environment automatically inserts
  380. '$FORM metacommands as needed. However, the programming enviroment cannot
  381. do this for forms in Quick libraries, since they are already compiled.
  382.  
  383. Accessing Width and Height Properties Before Forms are Visible
  384. --------------------------------------------------------------
  385. To ensure correct values for a form's Width and Height properties and
  386. SCREEN.Width and SCREEN.Height, execute a SHOW method before using
  387. them.
  388.  
  389. "Overflow" with ASCII Forms 
  390. ---------------------------
  391. The Form Designer generates an "Overflow" error message if the absolute
  392. coordinates of an object exceed 255. This can occur only with ASCII form
  393. descriptions created outside of the Form Designer. "Absolute coordinates"
  394. are the values that result from combining the Top + Height or Left + Width
  395. property values of a control and its parents. When these combine in a way
  396. that the right edge or bottom edge of a control exceeds 255, the "Overflow"
  397. error results.
  398.  
  399. To fix this, you must reduce the Top, Height, Left, or Width property values
  400. of the object or its parents in the ASCII form using an ordinary text editor.
  401.  
  402. Child Form Placement in MDI Form_Load Event 
  403. -------------------------------------------
  404. To ensure the correct display of child forms and print output, add a SHOW
  405. statement as the first line of the Form_Load event procedure of any form that
  406. is an MDI container. For example:
  407.  
  408. ' Event procedure in frmMDI.FRM.
  409. SUB Form_Load ( )
  410.     frmMDI.SHOW
  411. END SUB
  412.  
  413. This forces a redraw event which sets the MDI container's ScaleHeight and
  414. ScaleWidth properties to their maximized settings, rather than the
  415. design-time settings.
  416.  
  417. Option Buttons and Modal Operations
  418. -----------------------------------
  419. Option buttons sometimes require multiple clicks to become selected if the
  420. code in their click events include modal operations such as displaying
  421. a MSGBOX or hiding forms. For example, the following code requires multiple
  422. clicks to select option buttons Option1 or Option2:
  423.  
  424. SUB Option1_Click ()
  425. SCREEN.HIDE
  426. WIDTH , 43
  427. SCREEN.SHOW
  428. END SUB
  429.  
  430. SUB Option2_Click ()
  431. SCREEN.HIDE
  432. WIDTH , 25
  433. SCREEN.SHOW
  434. END SUB
  435.  
  436. Separator Bar as First Menu Item
  437. --------------------------------
  438. If you specify a separator bar as the first menu control below a top-level
  439. menu item, you won't be able to select menu items in that list using
  440. the keyboard.
  441.  
  442. KeyUp Events and Menus
  443. ----------------------
  444. KeyUp events for the active control will be generated when using access
  445. or shortcut keys for menus.  To differentiate between menu generated
  446. KeyUp events and user generated KeyUp events for the active control, set
  447. a flag in the control's KeyDown event procedure that can be tested before
  448. processing keys in the KeyUp event procedure.
  449.  
  450. Child Form Width and Resize Events
  451. ----------------------------------
  452. If a child form has the same width as its MDI container, it will not
  453. generate a resize event when maximized.
  454.  
  455. Height and Width of Attached Scroll Bars 
  456. ----------------------------------------
  457. The Height and Width properties of scroll bars that are attached to a form
  458. do not return accurate values when the form is first displayed. Height and
  459. Width return accurate values after a resize event occurs.
  460.  
  461. Printing Attached Scroll Bars 
  462. -----------------------------
  463. Scroll bars that are attached to a form do not print if the the form is not
  464. active when the PRINTFORM method is invoked.
  465.  
  466. Forms Disable Blinking
  467. ----------------------
  468. Using MSGBOX, INPUTBOX$, or forms disables the blinking bit in MS-DOS. 
  469. To re-enable blinking and restore correct COLOR statement settings when
  470. forms are not showing, call the MS-DOS interrupt 10H. For example:
  471.  
  472. ' Requires VBDOS.QLB for CALL Interrupt.
  473. REM $INCLUDE: 'vbdos.bi'
  474. DIM inregs AS regtype, outregs AS regtype
  475. CLS
  476. COLOR 26, 6                 ' Blinking green on red.
  477. PRINT "Blinking text"
  478. SLEEP 1                     ' Pause
  479. screen.controlpanel(7) = 0  ' Preserve background.
  480. MSGBOX "Click OK."          ' MSGBOX turns off blinking
  481.                             ' and changes colors.
  482. ' These statements restore colors and blinking.
  483. inregs.ax = &H1003
  484. inregs.bx = 1
  485. CALL interrupt(&H10, inregs, outregs)
  486.  
  487. Passing Control Array Elements
  488. ------------------------------
  489. You cannot pass an entire control array to a procedure as an argument. 
  490. When you pass a control array element to a procedure, you pass only that
  491. instance of the control, as in the following example:
  492.  
  493. type% = IsCmdBtn%(RandomControl(1)) ' Pass control array element to procedure
  494.  
  495. FUNCTION IsCmdBtn%(X AS CONTROL)
  496.   IF TYPEOF X IS CommandButton THEN
  497.     FindType% = TRUE
  498.   ELSE
  499.     FindType% = FALSE
  500.   END IF
  501. END FUNCTION
  502.  
  503. Note that you can't discern that X refers to a control array element once
  504. the control is passed to the procedure.
  505.  
  506. In compiled programs, you cannot pass a control array element into a
  507. procedure, then load it from that procedure. For example, the following
  508. code generates the error "Control array element does not exist" if
  509. executed in a compiled program:
  510.  
  511. LoadIt cmdButton(1)
  512.  
  513. SUB LoadIt (X as CONTROL)
  514.   LOAD X
  515. END SUB
  516.  
  517. Note that the preceding code will run in the programming environment without
  518. an error. This difference occurs because compiled applications are "early
  519. bound."
  520.  
  521. TabStop Property
  522. ----------------
  523. Using access keys on a form where all controls have TabStop = FALSE will
  524. cause unpredictable results.
  525.  
  526.  
  527. ------------
  528. 1.3 Language
  529. ------------
  530.  
  531. String Literals in Memory
  532. -------------------------
  533. String literals (i.e. quoted strings "This is a string") are stored in far 
  534. memory. All string literals in a form or code module are stored in their 
  535. own 64K segment. Thus, storage for string literals no longer comes out of 
  536. DGROUP.
  537.  
  538. Line Continuation
  539. -----------------
  540. When loading or compiling Basic code created outside of the programming 
  541. environment, the underscore character (_) may be used to continue a line 
  542. if it is preceded by a tab or space. Terminating a line with the underscore 
  543. alone causes an error. The programming environment automatically joins
  544. continued lines and removes line-continuation characters when you load code.
  545. Note that the underscore without a preceding space can now be used in symbol
  546. names.
  547.  
  548. Keyword Conflicts
  549. -----------------
  550. When loading a SUB or FUNCTION with an invalid definition -- a parameter 
  551. list contains a variable with the same name as a reserved word -- that SUB or
  552. FUNCTION definition will not be recognized; instead it will be placed
  553. at the module level and flagged as an error. The code contained in the
  554. procedure will also be placed at module level. If this occurs, orrect the 
  555. invalid definition and reload the file.
  556.  
  557. Calling C Routines From Basic
  558. -----------------------------
  559. If you are writing C routines to use with Basic, you should be aware
  560. that all routines that Basic calls that can cause an error (either
  561. directly or indirectly, including math errors and divide-by-zero)
  562. must set up a BP frame. However, the Microsoft C Compiler optimizes 
  563. away the BP frame if the routine has no parameters or local variables.
  564. If this occurs, you can rectify the problem by turning off optimizations
  565. when compiling your C routine or by adding a local variable to the
  566. routine.
  567.  
  568. RMDIR "."
  569. ---------
  570. Using RMDIR with "." generates the error "Path not found." You cannot
  571. remove the current directory.
  572.  
  573. User-Defined Error Numbers
  574. --------------------------
  575. Error number 105 is used by the system as a temporary error number and 
  576. should not be used as a user-defined error number in your programs. 
  577. If used, it halts execution of your application but does not generate
  578. the error message, "Unprintable Error," as other unassigned error numbers
  579. do.
  580.  
  581. Setting ERR
  582. -----------
  583. You cannot use the ERR statement with arguments greater than 255. To work
  584. around this, use ERROR to generate the error. For example:
  585.  
  586. ON ERROR RESUME NEXT
  587. ERROR 431
  588. PRINT ERR
  589.  
  590. FRE(-3) and Overlays
  591. --------------------
  592. Using FRE(-3) in a compiled program is no longer supported and will return
  593. the error message "Feature Unavailable."
  594.  
  595. GET, PUT, SADD, SWAP, VARSEG, VARPTR$ 
  596. -------------------------------------
  597. Visual Basic permits you to use form variables with these statements and
  598. functions, but such use is not meaningful and will cause unpredictable
  599. results. For example:
  600.  
  601. SUB ChangeCaption (X AS FORM)
  602. DEF SEG = VARSEG (X)                 ' May cause system to stop.
  603. ' Other code ommitted.
  604. END SUB
  605.  
  606. Using MSGBOX, INPUTBOX$ with Existing Code
  607. ------------------------------------------
  608. By default, these statements display the default form background pattern.
  609. To preserve your screen, set the ControlPanel(DESKTOP_PATTERN) property.
  610. For example:
  611.  
  612. LOCATE 10, 10 : PRINT "Preserve this text"
  613. SCREEN.ControlPanel(7) = 0                           ' 7 = DESKTOP_PATTERN
  614. MSGBOX "This is displayed without blanking screen."
  615.  
  616. OPTION EXPLICIT and Immediate Window
  617. ------------------------------------
  618. If your program uses OPTION EXPLICIT, you must declare any variables used
  619. in the Immediate window. For example:
  620.  
  621. DIM i%: FOR i% = 1 to 10: PRINT i%: NEXT
  622.  
  623.  
  624. --------
  625. 1.4 LINK
  626. --------
  627.  
  628. The Microsoft Segment-Executable Linker (LINK) can make use of a DPMI server
  629. such as 386MAX or Windows enhanced mode. LINK runs fine without a DPMI 
  630. server, however. If it cannot locate a DPMI server, LINK displays a warning 
  631. message and then executes in real mode.
  632.  
  633.  
  634. ---------------------------
  635. 1.5 Hardware Considerations
  636. ---------------------------
  637.  
  638. Phantom Drive Support
  639. ---------------------
  640. Accessing the phantom drive (drive B on a single-floppy system) when
  641. forms are showing on the screen causes the operating system to 
  642. print the message "Insert diskette for drive B: and press any key when
  643. ready" if the B drive is not considered active. This message is
  644. printed on top of any visible forms at the current cursor location.
  645. To respond to this message and allow the operating system to continue,
  646. the user must ensure the drive door is closed and then press any key.
  647.  
  648. Your program cannot trap this message using error handling, but you can
  649. intercept problems before they occur by searching a drive list box for
  650. the "B:" specification and then prohibiting your program from switching to
  651. the B: drive if it is not present. For example, the following code uses
  652. a drive list box (Drive1) to check if a B: drive exists and sets a flag
  653. to TRUE if it does:
  654.  
  655. ' Module level
  656. DIM SHARED BFlag AS INTEGER
  657.  
  658. SUB Form_Load ( )
  659.   FOR i% = 0 to Drive1.ListCount
  660.     IF INSTR(Drive1.List(i%), "B:") THEN BFlag = TRUE
  661.   NEXT
  662. END SUB
  663.  
  664. Invalid Drive on Start-Up
  665. -------------------------
  666. Make sure the current drive is valid (the drive exists and contains a disk)
  667. before starting VBDOS, FD, or running an application with a directory list
  668. in the programming environment. If the drive is not valid, you may receive
  669. an "Out of memory" error message.
  670.  
  671. French Keyboards
  672. ----------------
  673. In the Form Designer, the M accelerator key does not work if your cursor is
  674. in an edit field.
  675.  
  676. In the programming environment, bookmarks do not work correctly with this
  677. keyboard driver.
  678.  
  679. Monochrome Monitors 
  680. -------------------
  681. Some systems with monochrome monitors may not display the programming
  682. environment and Form Designer correctly. Applications created with Visual
  683. Basic will display correctly on these systems, however.
  684.  
  685. ATI Ultra VGA Video Cards 
  686. -------------------------
  687. Systems with this card may wrap the first character of print output to the
  688. end of the preceding line in screen mode 10.
  689.  
  690. InColor Hercules Video Cards
  691. ----------------------------
  692. The programming environment and the Form Designer display in black and
  693. white on systems with this card. In addition, text box controls do not
  694. display a cursor on these systems.
  695.  
  696. SCREEN 13 with SpeedStar VGA Video Cards
  697. ----------------------------------------
  698. Screen mode 13 causes display anomalies on the output screen with SpeedStar
  699. VGA video cards. This occurs when displaying the output screen with F4 and
  700. when stepping through an application in the programming environment.
  701.  
  702. Aspect Ratio with Wyse EGA and CGA Video Cards
  703. ----------------------------------------------
  704. Use an aspect ratio of 1.2 when drawing circles on Wyse EGA and CGA video
  705. cards to make circles appear round.
  706.  
  707.  
  708. ----------------
  709. 1.6 TRNSLATE.EXE 
  710. ----------------
  711. For specific information on language differences between Visual Basic for
  712. Windows and Visual Basic for MS-DOS, see the "Programmer's Guide" appendixes
  713. E, G, H, and I and the file COMPAT.TXT.
  714.  
  715. VBDOS.EXE, VB.EXE, and FT.EXE 
  716. -----------------------------
  717. All of these executables must be in directories in your PATH environment
  718. variable when you run TRNSLATE.EXE.
  719.  
  720. Character Mappings 
  721. ------------------
  722. TRNSLATE.EXE and FT.EXE do not map extended ASCII characters (>128) to their
  723. ANSI equivalents and vice versa. For this reason, it is a good idea to 
  724. replace extended characters, such as umlauts, with non-extended characters
  725. before converting your application.
  726.  
  727. Note that using extended ANSI characters in a form or control name in
  728. Visual Basic for Windows results in an invalid form or control name in
  729. Visual Basic for MS-DOS.
  730.  
  731.  
  732. -------------------
  733. 1.7 Custom Controls
  734. -------------------
  735.  
  736. Cannot Cancel Load or Unloads
  737. -----------------------------
  738. You cannot return a error from the custom control load or unload event
  739. -- Custom1_CustomUnload -- to prevent your custom control from being
  740. loaded or unloaded. Load or unload prevention is not possible, and returning
  741. an error from these functions can de-stabilize the system and cause it to
  742. stop. Thus, if you use the InvokeEvent callback to provide an Unload
  743. event procedure for your custom control to your users, you must ignore
  744. the Cancel parameter or map its meaning to something else, since you cannot
  745. cancel the unload process. This applies to control array elements as
  746. well as to controls being unloaded due to form unload.
  747.  
  748. SetAttribute Routine
  749. --------------------
  750. Use the SetAttribute callback routine to specify an access key for a custom
  751. control, allow the control to reject focus, reject arrow-key trapping, or
  752. control the display of a text cursor on the control. 
  753.  
  754. In Basic, declare SetAttribute as follows:
  755.  
  756. DECLARE SUB SetAttribute (BYVAL ControlID AS INTEGER, _
  757.   BYVAL AttributeID AS INTEGER, BYVAL Value AS INTEGER)
  758.  
  759. Parameter     Description
  760. -----------   -------------------------------------------------------------
  761. ControlID     ControlID property of the custom control.
  762. AttributeID   Attribute to set.
  763. Value         Setting of the attribute.
  764.  
  765. Constant values for AttributeID are contained in the CUSTINCL Include files
  766. and have these values:
  767.  
  768. Settings for AttributeID                             Settings for
  769. constant (literal)        Description                Value parameter
  770. ------------------------  -------------------------  --------------------
  771. ATTR_AccessKey     (0)    Specifies ASCII            ASCII code of key
  772.                           code of access key.        (not case-sensitive)
  773. ATTR_AcceptFocus   (1)    Specifies whether control  TRUE (-1)
  774.                           can receive focus.         FALSE (0)
  775. ATTR_TrapArrowKeys (2)    Specifies whether control  TRUE (-1)
  776.                           can detect arrow           FALSE (0)
  777.                           keys in Key events.
  778. ATTR_TextCursor    (3)    Determines the style of    0 - 2
  779.                           cursor on the control.
  780.  
  781. ATTR_AccessKey - Value is the ASCII code for the access key. The key is 
  782. not case-sensitive (A = a). You can have only one access key per control. 
  783. You must display the string containing the access key on your control, parse 
  784. the &, and highlight the access-key character (as is done for standard 
  785. controls such as command buttons). A Value of 0 (default)  specifies no 
  786. access key.
  787.  
  788. ATTR_AcceptFocus - TRUE (default) allows the control to have focus. 
  789. FALSE makes the control act like a label and reject the focus (focus passes 
  790. to the next control in TabIndex).
  791.  
  792. ATTR_TrapArrowKeys - TRUE (default) enables arrow key (up, down, left, right) 
  793. trapping in the key-handling event procedures.  FALSE does not trap these 
  794. keys and allows arrow keys to act like TAB (as with command buttons). 
  795.  
  796. ATTR_TextCursor - Displays a text cursor at CurrentX, CurrentY on your custom
  797. control. This text cursor follows CurrentX and CurrentY until turned off.
  798. This is useful for creating custom textboxes or for showing focus. Value is 
  799. enumerated as follows (constants are defined in CUSTINCL include files):
  800.  
  801. Settings for Value
  802. Constant (Literal)    Description
  803. ------------------    -----------------------------
  804. TC_NoCursor    (0)    No text cursor (default).
  805. TC_Underscore  (1)    Blinking underscore cursor.
  806. TC_Block       (2)    Blinking block cursor.
  807.  
  808. Note that changing the text cursor for a custom control also changes the 
  809. cursor on the active control if that control displays a cursor. (If this
  810. happens, the original cursor for the active control is restored when the
  811. control loses, then regains focus.)
  812.  
  813. Using SetAttribute on a standard control may produce unpredictable results. 
  814. Passing an invalid AttributeID does the same, as does passing an invalid 
  815. Value for the given AttributeID.
  816.  
  817. Cursor Coordinates
  818. ------------------
  819. CurrentX and CurrentY are relative to the current control. When there are
  820. multiple containers for a control, the absolute coordinates of CurrentX
  821. and CurrentY may exceed 255. In this situation, there is a remote chance that 
  822. the cursor may reappear on the screen at a seemingly random location.
  823. When writing a custom control that displays a cursor, you should test
  824. the behavior of your control when absolute CurrentX and CurrentY coordinates
  825. exceed 255.
  826.  
  827. "String formula too complex" Error 
  828. ----------------------------------
  829. Custom controls may cause this error if you have not defined a handler for
  830. the ADDITEM method. The CUSTGEN utility generates a handler for this method
  831. if you include MthAddItem in the Template Events list box.
  832.  
  833. Restoring TabIndex
  834. ------------------
  835. Setting CurrentX, CurrentY, or Interval within custom control code may
  836. reset TabIndex, accidentally. To avoid this, store the TabIndex property
  837. before setting CurrentX, CurrentY, or Interval, then restore TabIndex.
  838.  
  839. ReadOnly and Enabled Properties
  840. -------------------------------
  841. Setting one of these properties for a custom control inadvertantly sets the
  842. other to the same value. If you use the ReadOnly property in your custom
  843. control, trap the value when set and store it internally in your custom
  844. control code. Use this internal value to control ReadOnly behavior to and
  845. return the correct value to the user whenever the property is read.
  846.  
  847. Run-time Only Properties
  848. ------------------------
  849. The values of the following properties will not be saved at design-time:
  850.     Drive, FileName, Path, SelText, Text
  851. These properties should be used as run-time only properties and masked
  852. out at design-time.
  853.  
  854.  
  855. ------------
  856. 1.8 CodeView
  857. ------------
  858. The version of CodeView supplied with Visual Basic for MS-DOS (4.02) is newer
  859. than that supplied with Microsoft C/C++ 7.0. This newer version can be 
  860. used with C7. The same is true for CVPACK.EXE and LINK.EXE.
  861.  
  862. CodeView requires a memory manager such as HIMEM.SYS, Microsoft Windows, 
  863. or 386MAX. CodeView also requires a 80286/386/486 processor.
  864.  
  865. Variables are Case-Sensitive
  866. ----------------------------
  867. Use of variable names within CodeView is case-sensitive. Any reference to a
  868. variable from the Command window or within a watch expression must match
  869. the case used when the variable was first declared.
  870.  
  871. In addition, if you have variable of the same name but different case within
  872. scope, CodeView will only look for the variable that matches the case of the
  873. first instance.
  874.  
  875. Viewing Basic String Variables in CodeView
  876. ------------------------------------------
  877. You cannot directly watch the value of a Basic string in CodeView.
  878. To view the value of a string variable, use the b$sd routine from the
  879. Command window.
  880.  
  881. Syntax for b$sd is as follows:
  882.  
  883. b$sd(&stringvar),S
  884.  
  885. The argument stringvar is the name of a string variable minus the
  886. type-declaration character (if used). If the variable is a formal
  887. parameter within a procedure, omit the &. For example:
  888.  
  889. In code                In CodeView Command window    Type of string
  890. --------------------   ----------------------------  ----------------------
  891. DIM X$                 >?b$sd(&X),S                  With type character
  892. DIM Y AS STRING        >?b$sd(&Y),S                  Without type character
  893. Z$ = X$ + " "          >?b$sd(&Z),S                  Automatic variable
  894. SUB Foo(ABC as STRING) >?b$sd(ABC),S                 Formal parameter
  895.  
  896. If you omit the ,S option, CodeView returns a pointer to the string address
  897. rather than the value of the string.
  898.  
  899. Viewing Numeric Arrays and Fixed-Length String Variables
  900. --------------------------------------------------------
  901. Since you can view the data at specific memory locations in CodeView, you
  902. can see the values of numeric arrays and fixed-length string variables in
  903. hexadecimal with a little ingenuity. 
  904.  
  905. Things to Avoid
  906. ---------------
  907. Do not set breakpoints on form objects using the BP command in the Command
  908. window (for example, >BP Form1). Doing so can cause unpredictable results 
  909. during subsequent execution.
  910.  
  911. Be sure to terminate your Basic application before exiting CodeView. Exiting
  912. while execution is suspended may cause problems in restoring the MS-DOS
  913. cursor and may cause errors the next time you invoke CodeView.
  914.  
  915. Using Animate from the Run menu is not practical with applications that use
  916. forms. Since form application have an implicit DOEVENTS loop, the animation
  917. seems to "stick" at one instruction.
  918.  
  919. Applications that rely on timers, such as CLOCK.FRM, may not update as
  920. expected when debugged in CodeView.
  921.  
  922.  
  923. ------------
  924. 1.9 Overlays
  925. ------------
  926.  
  927. Calculating the Offset of Errors
  928. --------------------------------
  929. If you are using the assembly listing generated when compiling with /A to
  930. debug an overlaid program, you must subtract the start address of the
  931. overlaid module from the offset in the error message to get the correct
  932. code offset. For example:
  933.  
  934. Error Message:
  935.  
  936. Division by zero in line 0 of WILMA     as address 9FE9:0129
  937.  
  938. Excerpt of .MAP File Generated by LINK:
  939.  
  940. Start   Stop    Length Name                Class
  941. . . .
  942. Overlay 1H
  943. 00000H  00053H  00054H  FRED_CODE          BC_CODE
  944. 00060H  000B3H  00054H  BARNEY_CODE        BC_CODE
  945. 000C0H  00154H  00095H  WILMA_CODE         BC_CODE
  946. Overlay 2H
  947. . . .
  948.   
  949. To calculate the actual error address, subtract the start address of the
  950. module WILMA (000C0H) from the offset given in the error message (0129):
  951.  
  952. 129H - C0H = 69H
  953.  
  954. The offset of the error is 0069 in the compiler assembly listing.
  955.  
  956. CHAIN  
  957. -----
  958. You cannot use CHAIN in overlaid applications compiled without /O. This is
  959. because the run-time module is retained in memory across the CHAIN and a
  960. new overlay heap cannot be initialized.
  961.  
  962.  
  963. ---------
  964. 1.10 ISAM
  965. ---------
  966.  
  967. Microsoft Windows
  968. -----------------
  969. When using the ISAM TSRs (PROISAM.EXE, PROISAMD.EXE) in conjunction with
  970. Microsoft Windows, you must first start Windows and then load the ISAM TSR
  971. in an MS-DOS box. You cannot start Windows once the ISAM TSR has been
  972. loaded.
  973.  
  974. MS-DOS version 3.10 
  975. -------------------
  976. ISAM does not run under MS-DOS version 3.10. Opening a file for ISAM access
  977. results in a "Device I/O" error under that version MS-DOS.
  978.  
  979.  
  980. -------------
  981. 1.11 BUILDRTM
  982. -------------
  983.  
  984. Removing ISAM and/or Forms Support
  985. ----------------------------------
  986. Use the NOISAM.OBJ stub file to exclude ISAM support from your custom
  987. run-time modules. Use the NOFORMS.OBJ stub file to exclude forms support
  988. from your custom run-time module. 
  989.  
  990. In the standard run-time module, ISAM and forms features are loaded into 
  991. memory at startup only if your application uses the feature. With a custom
  992. run-time module, these features are always loaded at startup, unless you
  993. use the stub files described above.
  994.  
  995. LINK and BUILDRTM
  996. -----------------
  997. BUILDRTM automatically invokes LINK with a /SEGMENTS option based on the
  998. number of objects and libraries being built. To manually set the /SEGMENTS
  999. option, set a LINK environment variable with the desired setting.
  1000.  
  1001. Including Forms and Custom Controls
  1002. -----------------------------------
  1003. You can include compiled form modules and custom controls in a custom 
  1004. run-time module. To access a form included in a custom run-time module,
  1005. add a $FORM metacommand for the form to the module-level code of your
  1006. application.
  1007.  
  1008.  
  1009. ------------
  1010. 1.12 PROFILE
  1011. ------------
  1012. The Microsoft Profiler cannot profile applications linked with /EX, which
  1013. is the default when building an .EXE file from the programming environment.
  1014. In order to profile an application, you must link it from the command line
  1015. using the /CO linker option and omitting /EX.
  1016.  
  1017.  
  1018. ===========================================================================
  1019. Part 2: Corrections to "Microsoft Visual Basic Programmer's Guide"
  1020. ===========================================================================
  1021.  
  1022. Page    Section\Note
  1023. ----    ------------
  1024.  
  1025. xvii    Sample Applications
  1026.         -------------------
  1027.         REMLINE.MAK is not shipped with Visual Basic.
  1028.         SORTDEMO.MAK and TORUS.MAK are included in the Professional Edition
  1029.         only. The file for the SPIN custom control is SPINDEMO.*, not
  1030.         CUSTCTRL.*.
  1031.  
  1032. 200     Table at Top of Page
  1033.         --------------------
  1034.         "ir1_Click" should be "Dir1_Click".
  1035.  
  1036. 490     Using Extended and Expanded Memory
  1037.         ----------------------------------
  1038.         The last part of the second paragraph should read "and 0K of XMS
  1039.         for the programming environment."
  1040.  
  1041. 497     Memory Map Table
  1042.         ----------------
  1043.         As noted previously in this file, quoted string literals are stored
  1044.         in Far Heap, not Near Heap (DGROUP).
  1045.  
  1046. 519     Language Summary, ALIAS Keyword
  1047.         -------------------------------
  1048.         The ALIAS keyword is available in Visual Basic for Windows.
  1049.  
  1050. 534     Language Summary, String Routines
  1051.         ---------------------------------
  1052.         All of the following string routines are available in Visual Basic
  1053.         for MS-DOS and are completely compatible with the Microsoft Basic
  1054.         Professional Development System: StringAddress, StringAssign,
  1055.         StringLength, StringRelease.
  1056.  
  1057. 563     Drawing the Form
  1058.         ----------------
  1059.         The illustration does not match the code that accompanies it.
  1060.         The text boxes should be labels and they should display different
  1061.         data.
  1062.  
  1063. 564     Adding Code to Load the Form
  1064.         ----------------------------
  1065.         The code that loads the form should be:
  1066.  
  1067.         CASE "B"
  1068.           frmSTUDENT.SHOW 1
  1069.  
  1070.  
  1071. ===========================================================================
  1072. Part 3: Corrections to "Microsoft Visual Basic Reference"
  1073. ===========================================================================
  1074.  
  1075. Page    Section\Note
  1076. ----    ------------
  1077.  
  1078. iii     Document Conventions
  1079.         --------------------
  1080.         Keywords are shown in normal, uppercase in tables. Not bold.
  1081.         Keywords and literals are bold in syntax.
  1082.  
  1083.  29     AutoRedraw Example
  1084.         ------------------
  1085.         The third sentence that introduces the example should read
  1086.         "Print output on the form is retained when the form displays
  1087.         since AutoRedraw is True." It is important to set AutoRedraw
  1088.         to True if you want to display output printed to the form during
  1089.         the Load event.
  1090.  
  1091.  34     BorderStyle Property
  1092.         --------------------
  1093.         BorderStyle is read-only at run time for the forms and text box
  1094.         controls. It is read/write at run time for labels and picture boxes.
  1095.  
  1096.         BorderStyle 3 has Minimize and Maximize buttons.
  1097.  
  1098. 123     DragDrop Event Syntax
  1099.         ---------------------
  1100.         Event procedure parameters (Source, X, Y, and Index) should not be
  1101.         bold. You may use any names for these parameters. The ones shown
  1102.         are provided automatically when you create an event procedure with
  1103.         the Edit Event Procedures dialog box. This applies to all event
  1104.         procedure syntax in the "Reference."
  1105.  
  1106. 145     ERR Statement
  1107.         -------------
  1108.         The value of n% cannot be >255.
  1109.  
  1110. 170     FORMAT$ Function
  1111.         ----------------
  1112.         The formating characters for fmt$ are omitted. See online Help for
  1113.         this information.
  1114.  
  1115. 201     $INCLUDE Syntax
  1116.         ---------------
  1117.         The syntax for the $INCLUDE metacommand is as follows:
  1118.  
  1119.         {' | REM}$INCLUDE: 'filespec'
  1120.  
  1121. 212     INPUTBOX$ Function
  1122.         ------------------
  1123.         If prompt$ exceeds the length of a line, it automatically wraps
  1124.         to the next line.
  1125.  
  1126. 251,    LPRINT, PRINT, PRINT #
  1127. 329,    ----------------------
  1128. 330     You can't use the comma with the USING clause in any of these
  1129.         statements or methods.
  1130.  
  1131. 259     Menu Control
  1132.         ------------
  1133.         There is no DropDown event for menu controls.
  1134.  
  1135. 273     MSGBOX Function
  1136.         ---------------
  1137.         The last line of example text should read:
  1138.  
  1139.         x% = MSGBOX(Msg$)
  1140.  
  1141. 331     PRINT Statement
  1142.         ---------------
  1143.         The PRINT statement documentation is included under the LPRINT
  1144.         statment.
  1145.  
  1146. 351     SCREEN Object
  1147.         -------------
  1148.         AutoRedraw does not apply to the SCREEN object.
  1149.  
  1150. 433     WRITE # Remarks
  1151.         ---------------
  1152.         The first paragraph indicates that using WRITE # to print to the
  1153.         screen causes an error if used with forms. It should state that this
  1154.         causes an error if forms are currently displayed.
  1155.  
  1156. 440     Scan Code Table
  1157.         ---------------
  1158.         The scan code for decimal 78 is the gray "+" key, not "-" as shown.
  1159.  
  1160.  
  1161. ===========================================================================
  1162. Part 4: Corrections to Online Help
  1163. ===========================================================================
  1164.  
  1165. Creating a Control Array
  1166. ------------------------
  1167. Steps 2 and 3 in this procedure are functionally redundant. Setting the Index
  1168. property to 0 creates the control as an element of a control array, as does
  1169. giving two controls the same CtlName property at design time.
  1170.  
  1171. Save File As
  1172. ------------
  1173. You can save forms in text format.
  1174.  
  1175. Scan Code Table
  1176. ---------------
  1177. The table is missing these entries:
  1178.  
  1179. Key   Code
  1180. ---   ----
  1181. Esc      1
  1182. A       30
  1183. F1      59
  1184.  
  1185. AutoRedraw Property
  1186. -------------------
  1187. This property does not apply to the SCREEN object.
  1188.  
  1189. BorderStyle Property
  1190. --------------------
  1191. BorderStyle is read-only at run time for the forms and text box controls.
  1192. It is read/write at run time for labels and picture boxes.
  1193.  
  1194. BorderStyle 3 has Minimize and Maximize buttons.
  1195.  
  1196. ERR Statement
  1197. -------------
  1198. The value of n% cannot be > 255.
  1199.  
  1200. INPUTBOX$ Function Details
  1201. --------------------------
  1202. If prompt$ exceeds the length of a line, it automatically wraps to the next
  1203. line.
  1204.  
  1205. Menu Control Details
  1206. --------------------
  1207. There is no DropDown event for menu controls.
  1208.  
  1209. SCREEN Object Summary
  1210. ---------------------
  1211. The AutoRedraw property does not apply to the SCREEN object.
  1212.  
  1213.  
  1214. ===========================================================================
  1215. Part 5: Corrections to "Microsoft Visual Basic Professional Features"
  1216. ===========================================================================
  1217.  
  1218. Page    Section\Note
  1219. ----    ------------
  1220.  
  1221.  31     Format of .DEF File
  1222.         -------------------
  1223.         The placeholder segementname is the base name of the Basic
  1224.         source file plus the string "_CODE". For example, if a module is
  1225.         named NEW.BAS, the segmentname is "NEW_CODE".
  1226.  
  1227. 271     SLN# Function
  1228.         -------------
  1229.         The second bullet should be deleted.
  1230.