Overflow Error Plotting Points Far Outside Bounds of Control (81953)



The information in this article applies to:

  • Microsoft Visual Basic Standard Edition for Windows 2.0
  • Microsoft Visual Basic Standard Edition for Windows 3.0
  • Microsoft Visual Basic Professional Edition for Windows 2.0
  • Microsoft Visual Basic Professional Edition for Windows 3.0
  • Microsoft Visual Basic Standard Edition for Windows 1.0

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

  1. 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.
  2. Add the following controls to Form1:
       Control            Name (use CtlName in Visual Basic 1.0 for Windows)
       ---------------------------------------------------------------------
    
       Text box           Text1
       Command button     Command1
    						
  3. 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.
  4. Add the following code to the Form1 Form_Load event procedure:
       Sub Form_Load ()
          Command1.Caption = "Find Ranges"
    
          '* Change ScaleMode to see different results.
          Form1.ScaleMode =  3   ' PIXEL.
       End Sub
    						
  5. Add the following code to the Command1_Click event procedure:
       Sub Command1_Click ()
          CR$ = Chr$(13) + Chr$(10)  ' Carriage return.
    
          X = FindValue("X")
          Y = FindValue("Y")
    
          Text1.Text = "Valid value when..."
          Text1.Text = Text1.Text + CR$ + "-" + Str$(X) + " < X < " + Str$(X)
          Text1.Text = Text1.Text + CR$ + "-" + Str$(Y) + " < Y < " + Str$(Y)
       End Sub
    						
  6. 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$ = "X" 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
    						
  7. In Visual Basic version 1.0 for Windows, add the following to the general declarations section of Form1:
           Const FALSE = 0
           Const TRUE = -1
    						
  8. 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.
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.

Modification Type:MajorLast Reviewed:12/12/2003
Keywords:KB81953