Microsoft KB Archive/100632

= README.TXT for Professional Edition of VB Ver 2.0 for Windows =

Article ID: 100632

Article Last Modified on 2/11/2005

-

APPLIES TO


 * Microsoft Visual Basic 2.0 Professional Edition

-



This article was previously published under Q100632



SUMMARY
The following article contains the complete contents of the README.TXT file distributed with Microsoft Professional Edition of Visual Basic version 2.0 for Windows.



MORE INFORMATION
README.TXT

                    README.TXT

Release Notes for Microsoft (R) Visual Basic (TM) Professional Edition

Version 2.00

(C) Copyright Microsoft Corporation, 1992

This document contains release notes for Microsoft Visual Basic for Windows Professional Edition version 2.0. Information in this document is more current than that in the manuals or online Help.

********************************************************************    Read Part 1 - Software Installation Information - before installing. ********************************************************************

=
Contents

=
Part   Description --- 1     Software Installation Information

2     Notes and Tips

3     Notes for Microsoft Visual Basic "Language Reference"

4     Notes for Microsoft Visual Basic "Programmer's Guide"

5     Updated Information

6     Custom Controls

7     Help Compiler

8     ODBC Information

Part 1: Software Installation Information

=
============================

Before installing Visual Basic 2.0 Professional Edition, you should make backup copies of all the distribution disks. Do not write-protect the distribution disks you use to install Visual Basic. If you do, Visual Basic cannot be successfully installed.

SETUP.EXE is a Windows-based application; that is, it is run from Windows rather than from the MS-DOS prompt. SETUP.EXE will only run in Windows Standard or Enhanced mode. It will not run in Real mode. You can determine how Windows is configured on your computer by choosing About from the Help menu in the Program Manager.

To install Visual Basic 2.0 Professional, use Program Manager or File Manager to start SETUP.EXE as you would any other Windows-based application. For example, if you are installing from drive A:

- From the Program Manager File menu, choose Run.

- In the Run dialog box, type A:SETUP and choose OK.

-or-

- From the File Manager, double-click on the SETUP.EXE file icon on drive A.

Most of the files on these disks are compressed and must be expanded before they can be used. For Visual Basic to work properly, you must install the files using SETUP.EXE. You cannot simply copy the files to your hard disk.

If you want to install Visual Basic 2.0 Professional Edition in a directory other than where you've installed Visual Basic 1.0, you should specify this on the Installation Location screen. If you install Visual Basic 2.0 Professional Edition in the same directory as Visual Basic 1.0, most of the program, sample, icon, and tutorial files will be updated.

During setup, Visual Basic installs the custom controls GRID.VBX and OLECLIEN.VBX into your Windows system directory. If you have custom controls with the same name as the custom controls included with Visual Basic 2.0, and these controls are not the same GRID.VBX and OLECLIEN.VBX as were distributed with the Microsoft Professional Toolkit for Visual Basic 1.0, then Visual Basic installs GRID.VBX and OLECLIEN.VBX in your Visual Basic directory.

The WINHELP.EXE and COMMDLG.DLL files included with Visual Basic 2.0 are the latest English versions of these files. They will upgrade an older version, regardless of the language (e.g., French and German) of the older version.

IMPORTANT INFORMATION ABOUT ODBC INSTALLATION -

After installing Visual Basic Professional, in order to install ODBC functionality you must run the setup ODBC program from the end of the Visual Basic Professional setup, or from the ODBC setup icon, or from setup in the \VB\ODBC subdirectory. Follow the instructions from the setup program and refer to the ODBC setup documentation in your documentation set. ODBC Setup is a Windows program and should be run from within Windows.

Part 2 : Notes and Tips

=
==========

Using Command-Line Options --

Visual Basic can be started using command line options. The syntax is:

VB /R[UN] fname] [/C[MD] commandline|[/M[AKE] projname[.mak] [exename]]

Option  Explanation --- /RUN    Runs the application specified by the filename (fname).

/CMD    Allows you to input a command-line argument that you can later use via the Command function. See online Help for more information.

/MAK    Loads the project named in projname and executes the Make .EXE command from the File menu to create an executable file whose name is provided as exename. See the "Microsoft Visual        Basic "Programmer's Guide" for more information.

The fname parameter to the /RUN option must have a .MAK extension if it is to be treated as a project file. Any file with a different extension will be loaded as either a form or module into a new project.

Copying Icons to the Clipboard --

To copy an icon (.ICO file) from a picture box to the Clipboard, you must set its AutoRedraw property to True, and copy its Image property to the Clipboard by specifying the CF_BITMAP format in the SetData method.

Limit on Size of MultiLine Text Boxes -

The Text property of text box with MultiLine = True is limited to approximately 30K of text, while the limit is 32K if MultiLine = False.

Setting the Visible Property of Modal Forms to False

If you set the Visible property of a modal form to False, the form becomes a modeless form. If you need to return a form to a modal state after hiding it, use formid.Show 1 instead of formid.Visible = True.

Shortcut Keys Interrupting the "Learning Microsoft Visual Basic" Lessons

"Learning Microsoft Visual Basic" uses shortcut keys for accessing property settings in the Properties window. These keys may conflict with Shortcut keys you have set for making another Windows-based application active (set in the Program Manager Item Properties dialog.) Specifically, CTRL+SHIFT+H, W, L, T, N, C, and V are used by Learning Visual Basic. If you have these key combinations as Shortcut keys for other Windows-based applications, you may accidentally activate these applications while running "Learning Visual Basic" is running.

Limit on Number of Objects per Application --

There is a limit of 512 distinct objects in an application. Visual Basic uses 80 of these for global objects, data types, and standard controls. Thus, your application can have up to 432 form types or control classes. Each custom control class and form type that you create for your application is included in this limit. Each form uses one object and each custom control uses two. Note that custom controls may have multiple control classes in one .VBX file. This corrects the documentation in Appendix D, "Specifications and Limitations" in the "Programmers Guide."

Creating Toolbars or Status Bars with Borders on Top or Bottom --

Setting BorderStyle to 1 - Fixed Single creates a border on all four sides of an aligned picture box. If you want to create a toolbar or status bar with borders on only the top or bottom, set BorderStyle to 0 - None. Then, write code in the Picture_Resize event to create a line each time a form is shown or resized. Either place a line control in the picture box and reset the X1, X2, Y1, and Y2 properties, or include the Line statement. For example:

Picture1.Line (0, Picture1.Height) - (Picture1.Width, Picture1.Height)

OLE Client Custom Control Error Messages -

The following error messages correct and add to those contained in the "Language Reference."

31005          Object closed 31006          Can't close 31007          Can't paste 31008          Invalid property value 31009          Object not empty 31010          Property is read-only 31011          Type of object cannot be created 31012          No object name 31013          No document 31014          This action is reserved for future use 31015          Cannot execute object 31016          Server class was not specified before the registration database was accessed 31017          Invalid format on set data or set data text 31018          Server Class is not set 31019          Source document is not set 31020          Source item is not set

Closing Help Files --

The code to close a Visual Basic application's Help file when the application concludes is as follows:

Declare Function WinHelp Lib "user.exe" (ByVal hWnd As Integer, ByVal helpfilename$, ByVal hCommand As Integer, ByVal ddata As Long) As Integer

Sub Form_Unload (Cancel As Integer) Const HELP_QUIT = 2 ErrCode% = WinHelp(Form1.hWnd, app.HelpFile, HELP_QUIT, 0) End Sub

Creating Single-Column or Single-Row Grids --

To create a single-column or single-row grid where the column or row is not fixed, set the appropriate Col and FixedCol properties at run time.

Naming Conflicts

Do not name any control "Line" or "Timer" as you will be unable to access its properties. The prohibited names conflict with the names of the Line method and Timer function respectively.

Picture formats accepted by DDE client Picture controls

In Windows version 3.1 and above, picture controls acting as clients in a DDE conversation will accept CF_METAFILE, CF_BITMAP, and CF_DIB format graphics. In Windows version 3.0, DDE client Picture controls accept only CF_BITMAP and CF_DIB format graphics.

Implicit Methods for Custom Controls

There are methods that apply to controls and forms which are not exposed via the VBM_METHOD interface. Custom controls have no way of altering, supplementing, or removing these methods when invoked on instances of the custom control. Examples of these methods are PrintForm, Refresh, LinkPoke, LinkRequest, LinkExecute, and SetFocus. The LinkPoke, LinkRequest, and LinkExecute methods apply only to controls with standard DDE properties; SetFocus applies only to controls with MODEL_fFocusOk.

Specifying the Size Property of a Field Object --

When specifying the Size property of a field object that you are creating, you should use the length of the corresponding Visual Basic data type. Visual Basic only allows you to create fields using the sizes of the Visual Basic data types. For example, if you are creating a Currency field, you should create a field of eight bytes. If you are copying one field to another, use the setting of the Type property of the source field to determine the type, and hence the size, of the destination field.

Part 3 : Notes for Microsoft Visual Basic "Language Reference"

=
=================================================

Page   Section\Note

82     DateValue Function

Change the last sentence in the second paragraph of the Remarks section as follows:

"For example, in addition to recognizing 12/30/1991 and 12/30/91,  DateValue recognizes December 30, 1991 and Dec 30, 1991.

320    Print Method

In the description of expressionlist at the top of the page, the term "text expression" should read "string expression".

386    Shell Function

Change the second sentence in the description of commandstring as  follows:

"If the program name in commandstring does not include .BAT, .COM,  .EXE, or .PIF extension, .EXE is assumed."

489    Not Operator

See online Help for more current information.

None   Me Keyword

The Me keyword is not documented in the "Language Reference." See online Help for complete information.

Part 4: Notes for Microsoft Visual Basic "Programmer's Guide"

=
================================================

Page   Section\Note

4    Visual Basic Documentation

In the second bullet list item, replace "eight" with "seven".

6    Using Online Documentation

In the second sentence, replace "eight" with "seven".

8    Figure 1.2 The Contents Screen

This illustration does not depict the actual Contents screen.

15    Starting Visual Basic

In the second table item, under "Menu equivalent," change to read, "Start command on the Run menu".

19    Setting Properties

In the second paragraph of step 3, change "Clicking the DOWN ARROW  key at the right ..." to "Clicking the down arrow at the right ..."

23    Simple Animation

In the Setting column of the table, change "(White)" to "(Black)".

In the paragraph following the table, change "... and the BackColor  property to 0 (Black)" to "... and the BackColor property to   black"

201    Identifying the Current Mode

In the paragraph at the bottom of the page, the phrase after the semicolon should read, "the unavailable buttons appear dimmed on  the toolbar."

210    Using the Calls Dialog

Remove the ")" from the end of step 1.

216    Editing or Deleting a Watch Expression

In the numbered list at the top of the page, remove the "(s)" from the word "expression" in the second step.

220    Assigning Values to Variables and Properties

In the paragraph following the three lines of example statements, change to read, "The first statement alters a property of the  currently active form, the second alters a property of the VScroll1   control, and the third assigns a value to a variable."

227    How to Handle Errors

The list of steps is incorrectly numbered. The paragraph now numbered 2 should not be numbered. Remove the number 2 from that paragraph. Then replace the 3 in the following paragraph with 2 and replace 4 in the last paragraph with 3.

229    Exiting an Error-Handling Routine

In the table that describes ways to exit an error-handling routine, make the following changes:

Replace the Resume entry with:

Resume (0)   Program execution resumes with the statement that caused the error or the most recently executed call out of the procedure containing the error-handling routine.

Change the Resume Next entry by removing the period at the end of  the sentence and adding "or with the statement immediately   following the most recently executed call out of the procedure   containing the error-handling routine."

Change the Resume line by removing the period at the end of the sentence and adding, "that must be in the same procedure as the  error handler."

234    Change the note at the bottom of the page as follows:

Remove everything after the first sentence. Add the following:

If a Resume statement is executed, control returns to the most recently executed call out of the procedure containing the error handler. If a Resume Next statement is executed, control returns to whatever statement in the procedure containing the error-handling routine immediately follows the most recently executed call out of that procedure. For example, in the Calls list shown in Figure 10.3, if procedure A has an enabled error handler and Procedure B and C don't, an error occurring in  Procedure C will be handled by Procedure A's error handler. If  that error handler uses a Resume statement, upon exit, the program continues with a call to Procedure B. However, if Procedure A's  error handler uses a Resume Next statement, upon exit, the program will continue with whatever statement in Procedure A follows the call to Procedure B. In neither case does the error handler return directly to either the procedure or the statement where the error originally occurred.

420    The Directory List Box

In the code at the bottom of the page, change the first line as  follows:

GoHigher = 0    ' Initialize for currently expanded directory.

421    The File List Box

Change the first paragraph as follows:

"The file list box displays files contained in the directory  specified by the Path property at run time. You can display all   the files in the current directory on the current drive using the   following statement:"

The paragraph that begins, "If you set the System property..." may be misleading. The following additional information is provided to clarify meaning.

The default value for the System and Hidden properties is False. The default value for the Normal, Archive, and ReadOnly properties is True.

When Normal = True, any file that does not have the System or  Hidden attribute is displayed. When Normal = False, you can still display files with ReadOnly and/or Archive attributes by setting the appropriate attribute to True (i.e., ReadOnly = True,  Archive = True).

When System = True, any file with the System attribute is displayed unless it also has the Hidden attribute.

When Hidden = True, any file with the Hidden attribute is displayed unless it also has the System attribute.

To display any file that has both Hidden and System among its attributes, both Hidden and System must be True. However, files having either Hidden or System attributes will be displayed as well.

424    Writing Code for the WinSeek Application

In the second paragraph, change the first sentence as follows:

"The WinSeek application resolves this ambiguity by determining if  the path of the dirList box is different from the currently   highlighted directory."

425    The cmdSearch_Click Procedure

In the sample code shown, change the If statement as follows:

If dirList.Path <> dirList.List (dirList.ListIndex) Then

482    Change the last sentence in the paragraph at the top of the page as follows:

"When the user activates the object (the graph), the server  application (MS Graph) is invoked by the client application (Visual   Basic), and the object's data is opened for editing."

Part 5: Updated Information

=
==============

Online Resource Information ---

The WIN30API.TXT and WIN31EXT.TXT files are ASCII text files containing the functions and constants in the Microsoft Windows 3.0 and 3.1 API, declared in the format used by Microsoft Visual Basic.

They include:

- External procedure declarations for all the Microsoft Windows API functions that can be called from Visual Basic.

- Global constant declarations for all the constants used by the Microsoft Windows API.

- Type declarations for the user-defined types (structures) used by the Microsoft Windows API.

WIN30API.TXT is too large for the Notepad editor supplied with Microsoft Windows, but it can be loaded by Microsoft Word. To use WIN30API.TXT, load it into an editor (such as Microsoft Word) that can handle large files. Copy the declarations you want and paste them into any module in your Visual Basic application.

The file WIN31API.HLP contains the WIN30API.TXT and WIN31EXT.TXT file declarations in help file format. Use this file to easily cut and paste declarations into your Visual Basic 2.0 programs.

NOTE: Some of the Windows API declarations are very long. Some editors will wrap these onto a second line, and will copy them as multiple lines rather than as a single line. Declarations in Visual Basic cannot span lines, so if you paste these as multiple lines Visual Basic reports an error. If this happens, you can either adjust the margins in the editor before copying, or remove the line break after pasting.

You can place the declarations that you copy from the WIN31API.HLP file in the Declarations section of any form or module. You can also place the constant declarations anywhere in any form or module if you remove the Global keyword.

Once you have pasted the declaration for a Windows API routine (as well as any associated constant and type declarations) into your application, you can call that routine as you would call any Visual Basic procedure.

WARNING: Visual Basic cannot verify the data you pass to Microsoft Windows API routines. Calling a Microsoft Windows API routine with an invalid argument can result in unpredictable behavior - your application, Visual Basic, or Windows could crash or hang. When experimenting with Windows API routines, save your work often.

The WIN31WH.HLP file contains complete reference information for the functions, messages, and data structures in the Microsoft Windows 3.1 API. This is the same file that is shipped with the Microsoft Windows Software Development Kit. Open it by double-clicking the WIN SDK Help icon in the Visual Basic group in the Windows Program Manager.

WIN31WH.HLP provides detailed information about each of the functions, messages, and data structures in the Microsoft Windows API.

Installing Online Resource Files

WINSDK.HLP, APIXREF.HLP, and WINAPI.TXT are old versions of Windows 3.0 API support files that were included with the Visual Basic 1.0 Professional Toolkit. These files are not deleted when you install Visual Basic 2.0, but you may want to delete them yourself. The installed files WIN31WH.HLP, WIN30API.TXT, WIN31EXT.TXT, and WIN31API.HLP are replacements for the older files.

Part 6: Custom Control Reference

=
===================

Installing Custom Controls --

Visual Basic 2.0 installs custom controls in the Windows system directory. If you previously installed the Visual Basic 1.0 Professional Toolkit, you may have old versions of controls in the \VB\VBX directory. You should remove any older versions of controls you may have on your machine.

VB.LIC --

Please make sure that the copy of VB.LIC in the \windows\system directory is the only one on your computer. Otherwise, you may encounter problems loading the new custom controls.

If an older VB.LIC is being used, or you have a missing or incorrectly installed VB.LIC file, the following message appears when you try to add the custom control file to your project:

"License file for custom control not found. You do not have an  appropriate license to use this custom control in the design   environment."

Animated Button (ANIBUTON.VBX) Update -

"Value" is the default value of the control.

Unlike the standard command button, when you press [Enter] on an animated command button, a Click event is NOT generated. You can use the KeyPress event to detect a click if necessary.

Communications Control (MSCOMM.VBX) Update --

The port address and interrupt address can be changed from the Windows Control Panel.

The following defined constants for the Handshaking property have been added to the CONSTANT.TXT file:

Global Const MSCOMM_HANDSHAKE_NONE = 0 Global Const MSCOMM_HANDSHAKE_XONXOFF = 1 Global Const MSCOMM_HANDSHAKE_RTS = 2 Global Const MSCOMM_HANDSHAKE_RTSXONXOFF = 3

InBufferCount property: This property is Read/Write at run time.

SThreshold property: The MSCOMM_EV_SEND event is only fired once, when the number of characters crosses the SThreshold. For example, if SThreshold equals five the MSCOMM_EV_SEND event occurs only when the number of characters drops from five to four in the output queue. If there are never more than SThreshold characters in the output queue the event is never fired.

OnComm Event: The MSCOMM_ER_RXOVER only gets set when the receive queue overflows. It will not get set after a Chr$(26), EOF.

PortOpen property: If either the DTREnable or RTSEnable properties are set to True before the port is opened, the properties are set to False when the port is closed. Otherwise, the DTR and RTS lines remain in their previous state.

The DSR_EVENT is only fired when DSR goes from -1 to 0.

Graph (GRAPH.VBX) Update

The Graph control includes the Palette property. Refer to online Help.

MAPI (Messaging API) Update ---

The RESOLVE_NAME action resets RecipType.

Masked Edit Control (MSMASKED.VBX) Update -

The Text property is not available at design time.

Multimedia Control (MCI.VBX) Update ---

All references to the DisplayhWnd property should be hWndDisplay.

DeviceType property should refer to "Videodisc" not "Videodisk" as a device.

TimeFormat property should include 2 MCI_FORMAT_MSF   Minutes, seconds, and frames are packed into a                        four-byte integer. From least significant byte to                       most significant byte, the individual data values follow:

Minutes (least significant byte) Seconds Frames Unused (most significant byte)

Pen Controls (PENCNTRL.VBX) Update

The error constants are incorrect on pages 278, 280, 287, 288, and 297. The correct values are defined in online Help.

The Ink On Bitmap and On-Screen Keyboard controls refer to CONSTANT.TXT. The correct file for constant definitions is PENAPI.TXT in the SAMPLES\PEN directory.

For the SKB_Change event of the On-Screen Keyboard Control, there is one additional possible value for the ChangeCode parameter:

SKN_TERMINATED   The on-screen keyboard has been closed.

This constant is defined in the file PENAPI.TXT.

The Distribution Note at the beginning of the chapter "Pen Edit Controls" should say the custom control file is named PENCNTRL.VBX.

To facilitate the interaction between Microsoft Windows For Pen API and Visual Basic, we have created two new APIs in the PENCNTRL.VBX file:

CPointerToVBType(ByVal lpSrc As Long, vbDest As Any, ByVal cNum By Integer)

- Copies cNum number of bytes from a memory location pointed to by lpSrc and places them in the vbDest memory location.

VBTypeToCPointer(vbSrc As Any, ByVal lpDest As Long, ByVal cNum By Integer)

- This reverses the process, copying from Visual Basic memory to a  location specified by lpDest.

These two functions are used when dealing with RcResult or when pen data is required to be accessed by a Visual Basic program.

Shipping PENWIN.DLL with Your Application -

PENWIN.DLL is a fully redistributable component of Windows for Pen Computing. Because applications will seek to leverage the Pen API - Visual Basic controls in particular - PENWIN.DLL can be shipped with your application. There are some considerations to keep in mind when shipping PENWIN.DLL with your application:

1. PENWIN.DLL functions ONLY under Windows 3.1. It WILL NOT WORK with Windows 3.0 because it functions only as an  installable device driver (a feature not present in Windows   3.0).

2. As with other redistributable components (such as COMMDLG.DLL  and the OLE libraries), it is the responsibility of the application vendor to determine whether PENWIN.DLL has already been installed (there is a GetSystemMetrics call  for this) and to ensure that the version of PENWIN.DLL with the latest version stamping is the one that is running. These issues are the same for all redistributable components, and further information is contained in the Windows SDK.

3. Unlike some of the other redistributable components, if your application installs PENWIN.DLL for the first time, or  replaces the current version with a later one, Windows will have to be restarted. As an installable driver PENWIN.DLL can be loaded only at Windows boot time. Restarting Windows can be accomplished via an ExitWindows call or by simply prompting the user to do so.

NOTE: To install PENWIN.DLL on a Windows 3.1 system follow the directions listed under the "Pen Sample" in the file SAMPLES.TXT in the SAMPLES subdirectory.

4. PENWIN.DLL may be in either the \WINDOWS or the \WINDOWS\SYSTEM directory. The default will be \WINDOWS, but since Windows for Pen Computing is an OEM product, Microsoft cannot completely control where PENWIN.DLL is located on a particular machine.

To get a good feel for the Pen Windows controls, you are encouraged to use and experiment with the Pen sample application (PENSMPL.MAK).

Spin Control (SPIN.VBX) Update --

Removed TabIndex property.

3D Command Button (THREED.VBX) Update -

Under certain video drivers, the 3D Command button will not print when performing a PrintForm operation. This problem occurs when printing from the design environment or at run-time. If you are distributing an application that causes 3D Command buttons to be printed you may want to implement an alternative method of printing a form as outlined in KnowledgeBase article Q84066, "How to Print Entire VB Form and Control the Printed Size." This article can be found in the online KnowledgeBase provided with the Visual Basic 2.0 Professional Edition.

Part 7: Help Compiler

=
========

HC31.EXE and Using Protected Mode Memory

Version 3.10.504 of the Windows Help Compiler (HC31.EXE) requires protected-mode memory. A number of system configurations support protected-mode memory by providing DMPI or VCPI servers. The following configurations provide protected-mode memory access to the Help Compiler, although not all configurations have been fully tested.

The best way to access protected mode memory is to run the Help Compiler in an MS-DOS session under Windows 3.1 enhanced or standard modes. You can also compile in an MS-DOS session under Windows 3.0 enhanced mode.
 * Microsoft Windows version 3.0 or 3.1

The Help Compiler runs under EMM386 (if the noems option is not used and  enough EMS memory is allocated to EMM386).
 * EMM386 under MS-DOS

The Help Compiler runs as a DMPI client with version 6.01 of 386Max (the version shipped with C7 or its equivalent). The Help Compiler may also work with some earlier versions of 386Max as a VCPI client if  enough EMS memory is configured.
 * 386Max

Under version 6.02 of QEMM, the Help Compiler runs as a DPMI client. It should also work under some earlier versions of QEMM as a VCPI client, provided it is configured with enough EMS memory.
 * QEMM

You need enough EMS memory to hold the Help Compiler and dynamic data being compiled. The exact amount of memory needed depends heavily on the size of the help file you want to compile. Between 1MB and 2MB should meet most needs.
 * EMS Memory Requirements

Part 8: ODBC Information

=
===========

If you use Windows for Workgroups and the ODBC object layer with SQL Server installed on a Novell NetWare LAN, you will not be able to access SQL Server from ODBC. The Network Integration Kit (NIK) will resolve this problem. For details please contact Microsoft Product Support at the numbers listed in the Visual Basic Help file.

The Database object now supports the QueryTimeout property. Refer to the online help.

For information on distributing Visual Basic ODBC applications, refer to the online Help contents screen.

Additional query words: 2.00

Keywords: kbref kbdocs KB100632

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.