Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 944
  • Last Modified:

vb6 scrollbar overflow error

I am making modifications to another developer's project that has a form with a scrollbar.  I don't really get the jist of the cde, but on the form resize event, I am getting an overflow error on this line:
                 .Max = iFullFormHeigth - Me.Height

The value of (iFullFormHeigth - Me.Height) is 63435 at this point.

        With VScroll1
            .Height = Me.ScaleHeight - HScroll1.Height
            .Min = 0
            'MsgBox iFullFormHeigth - Me.Height
            .Max = iFullFormHeigth - Me.Height
            .SmallChange = Screen.TwipsPerPixelY * 10
            .LargeChange = Me.ScaleHeight - HScroll1.Height
        End With

Dim iFullFormHeigth As Long 'integer
Dim iFullFormWidth As Long 'integer

Private Sub Form_Resize()

VScroll1.Left = Me.Width - (1.45 * VScroll1.Width)
HScroll1.Top = Me.Height - (2.45 * HScroll1.Height)

Picture1.Left = VScroll1.Left
Picture1.Top = HScroll1.Top

'If the full screen is already showing,
'then disable the scrollbar
VScroll1.Enabled = (iFullFormHeigth - Me.Height) >= 0

'First, make sure we aren't minimized
If Me.ScaleHeight > HScroll1.Height And Me.Width > VScroll1.Width Then
    
    'If there is any more screen to see,
    'modify the scrollbar
    If VScroll1.Enabled Then
        With VScroll1
            .Height = Me.ScaleHeight - HScroll1.Height
            .Min = 0
            .Max = iFullFormHeigth - Me.Height
            .SmallChange = Screen.TwipsPerPixelY * 10
            .LargeChange = Me.ScaleHeight - HScroll1.Height
        End With

    'Otherwise, just resize the scrollbar for neatness
    Else: VScroll1.Height = Me.ScaleHeight - HScroll1.Height
    End If

    HScroll1.Enabled = (iFullFormWidth - Me.Width) >= 0
    If HScroll1.Enabled Then
        With HScroll1
            .Width = Me.ScaleWidth - VScroll1.Width
            .Min = 0
            .Max = iFullFormWidth - Me.Width
            .SmallChange = Screen.TwipsPerPixelX * 10
            .LargeChange = Me.ScaleWidth - VScroll1.Width
        End With

    Else: HScroll1.Width = Me.ScaleWidth - VScroll1.Width
    End If
End If
End Sub

Open in new window

0
Delta7428
Asked:
Delta7428
  • 5
  • 2
2 Solutions
 
Meir RivkinFull stack Software EngineerCommented:
i don't see where you initialize the iFullFormHeigth variable.is ti possible you forgot?
0
 
Meir RivkinFull stack Software EngineerCommented:
where do u initially set iFullFormHeigth?it doesn;t appear in the Form_Resize() function...
0
 
Surone1Commented:
it's probably trying to set a negative value..
if you uncomment the
MsgBox iFullFormHeigth - Me.Height
it will tell you the value before trying to set it..
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
Delta7428Author Commented:
Surone1, See original post.  I did ucomment the line and check it.  Actually, I added the line to check it.  The value is 63435.

Here is the rest of the code.  iFullFormHeigth is set in the form load event in GetFullSize proc.
Private Sub Form_Load()
    GetFullSize
End Sub

Private Sub GetFullSize()
Dim ctl As Control
Dim fullhtemp As Long
Dim fullvtemp As Long

fullhtemp = 0
fullvtemp = 0
If Me.WindowState = vbMinimized Then Exit Sub
For Each ctl In Me.Controls
        'If ctl.Name <> "timer1" Then
            If ctl.Top + ctl.Height > fullvtemp Then fullvtemp = ctl.Top + ctl.Height
            If ctl.Left + ctl.Width > fullhtemp Then fullhtemp = ctl.Left + ctl.Width
        'End If
Next
iFullFormHeigth = fullvtemp + HScroll1.Height
iFullFormWidth = fullhtemp + VScroll1.Width
End Sub

Open in new window

0
 
Surone1Commented:
sorry, not paying attention..
i believe the width property is an integer. the value is too high
0
 
Surone1Commented:
should not be higher than 32767
0
 
Surone1Commented:
the following sub proves the theory

Sub showverflow()
Dim i As Integer
Do While True
i = i + 1
Loop
End Sub
0
 
Surone1Commented:
dim myvar as integer

if  iFullFormHeigth - Me.Height > 32767 then
myvar = 32767
else
myvar =  iFullFormHeigth - Me.Heigh
end if

'MsgBox iFullFormHeigth - Me.Height
 .Max = myvar
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 5
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now