Microsoft KB Archive/81953

= Overflow Error Plotting Points Far Outside Bounds of Control =

Article ID: 81953

Article Last Modified on 12/12/2003

-

APPLIES TO


 * Microsoft Visual Basic 2.0 Standard Edition
 * Microsoft Visual Basic 3.0 Professional Edition
 * Microsoft Visual Basic 2.0 Professional Edition
 * Microsoft Visual Basic 3.0 Professional Edition
 * Microsoft Visual Basic 1.0 Standard Edition

-



This article was previously published under Q81953



SUMMARY
Visual Basic for Windows may give an Overflow error when you plot points on a form or picture box if a point's coordinates far exceed the borders and scale of the form or control. The point at which overflow occurs depends on the ScaleMode property value and the points plotted. In the case of ScaleMode = 0 (User Defined Scale), the size of the form or picture box and the scale chosen are also determinants.

A workaround is to trap the error and use a RESUME NEXT statement to exit the error handler. The example below contains the necessary code to trap the Overflow error.



MORE INFORMATION
Before Visual Basic for Windows can plot a point, it must first convert the coordinates into their absolute location in twips. If, after the conversion, one or both coordinates are greater than 32,767 or less than -32,768, an Overflow error is generated. The following chart lists the ScaleModes, their equivalence in twips, and the values that will cause a coordinate (z) to overflow:                   Equivalents ScaleMode         in Twips (Tp)           Overflow Point (z) -

0 (User defined)  User defined            User defined (see example) 1 (Twips)         1 twip = 1 twip         (z < -32768) or (z > 32767) 2 (Point)         1 point = 20 twips      (z < -1638)  or (z > 1638) 3 (Pixel)         System dependent        System dependent 4 (Character)     x-axis=120 twips/char   (x < -273) or (x > 273) y-axis=240 twips/char  (y < -136) or (y > 136) 5 (Inch)          1 Inch = 1440 twips     (z < -22) or (z > 22) 6 (Millimeter)    1 mm = 56.7 twips       (z < -577) or (z > 577) 7 (Centimeter)    1 cm = 567 twips        (z < -57) or (z > 57) The example below can be used to determine the value that generates the Overflow error for ScaleMode 0 or 3.

Example
 Run Visual Basic for Windows, or from the File menu, choose New Project (press ALT, F, N) if Visual Basic for Windows is already running. Form1 is created by default.  Add the following controls to Form1:   Control            Name (use CtlName in Visual Basic 1.0 for Windows) -

Text box          Text1 Command button    Command1  Set the MultiLine property for Text1 to True. With ScaleMode = 0 only, the overflow value is dependent upon the size of the picture box or form. If you are testing the overflow value with ScaleMode = 0, you must size the form appropriately.  Add the following code to the Form1 Form_Load event procedure: Sub Form_Load Command1.Caption = &quot;Find Ranges&quot;

'* Change ScaleMode to see different results. Form1.ScaleMode = 3   ' PIXEL. End Sub   Add the following code to the Command1_Click event procedure: Sub Command1_Click CR$ = Chr$(13) + Chr$(10) ' Carriage return.

X = FindValue(&quot;X&quot;) Y = FindValue(&quot;Y&quot;)

Text1.Text = &quot;Valid value when...&quot; Text1.Text = Text1.Text + CR$ + &quot;-&quot; + Str$(X) + &quot; < X < &quot; + Str$(X) Text1.Text = Text1.Text + CR$ + &quot;-&quot; + Str$(Y) + &quot; < Y < &quot; + Str$(Y) End Sub   Add the following general purpose function to the general Declarations section: Function FindValue (Which$) On Error GoTo rlhandler

HiValue = 100000 LoValue = 0 Errored = FALSE ' Do binary select. Do        NewCheck = Value If Errored Then Value = HiValue - (HiValue - LoValue) \ 2 Else Value = LoValue + (HiValue - LoValue) \ 2 End If

If Which$ = &quot;X&quot; Then Form1.PSet (Value, 0) Else Form1.PSet (0, Value) End If

If ErrorNum = 6 Then HiValue = Value ErrorNum = 0 Else LoValue = Value End If     Loop Until NewCheck = Value FindValue = Value

Exit Function

rlhandler: ' Err = 6 is OverFlow error. If Err = 6 Then ErrorNum = Err Else Form1.Print Err End If  Resume Next End Function </li>  In Visual Basic version 1.0 for Windows, add the following to the general declarations section of Form1: Const FALSE = 0 Const TRUE = -1 </li> From the Run menu, choose Start (or press the F5 key), and click the Command1 button to calculate the point at which the X and Y coordinates generate an Overflow error.</li></ol>

When the above Click event is triggered, Visual Basic for Windows will try to set a point on the form. Past the border, Visual Basic for Windows is plotting points that exceed the visual scope of the control. Once the program traps the Overflow error, the text box will display the valid range of coordinates you can use that will not generate the Overflow error.

Additional query words: 2.00 3.00

Keywords: KB81953

-

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

© Microsoft Corporation. All rights reserved.