龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

VB中控件大小随窗体大小变化(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
For Each FormControl In pfrmIn i = FindControl(FormControl, pfrmIn.Name) If i 0 Then i = AddControl(FormControl, pfrmIn.Name) End If Next FormControl End Function Function FindControl(inControl As Con

  For Each FormControl In pfrmIn
  i = FindControl(FormControl, pfrmIn.Name)
  If i < 0 Then
   i = AddControl(FormControl, pfrmIn.Name)
  End If
  Next FormControl

  End Function

  Function FindControl(inControl As Control, inName As String) As Long

  Dim i As Long
  FindControl = -1

  For i = 0 To (MaxControl - 1)
  If ControlRecord(i).Parrent = inName Then
   If ControlRecord(i).Name = inControl.Name Then
    On Error Resume Next
    If ControlRecord(i).Index = inControl.Index Then
     FindControl = i
     Exit Function
    End If
    On Error GoTo 0
   End If
  End If
  Next i
  End Function

  Function AddControl(inControl As Control, inName As String) As Long

  ReDim Preserve ControlRecord(MaxControl + 1)
  On Error Resume Next
  ControlRecord(MaxControl).Name = inControl.Name
  ControlRecord(MaxControl).Index = inControl.Index
  ControlRecord(MaxControl).Parrent = inName

  If TypeOf inControl Is Line Then
  ControlRecord(MaxControl).Top = inControl.Y1
  ControlRecord(MaxControl).Left = ActualPos(inControl.X1)
  ControlRecord(MaxControl).Height = inControl.Y2
  ControlRecord(MaxControl).Width = ActualPos(inControl.X2)
  Else
  ControlRecord(MaxControl).Top = inControl.Top
  ControlRecord(MaxControl).Left = ActualPos(inControl.Left)
  ControlRecord(MaxControl).Height = inControl.Height
  ControlRecord(MaxControl).Width = inControl.Width
  End If

  inControl.IntegralHeight = False
  On Error GoTo 0
  AddControl = MaxControl
  MaxControl = MaxControl + 1
  End Function

  Function PerWidth(pfrmIn As Form) As Long

  Dim i As Long
  i = FindForm(pfrmIn)

  If i < 0 Then
  i = AddForm(pfrmIn)
  End If

  PerWidth = (pfrmIn.ScaleWidth * 100) FormRecord(i).ScaleWidth
  End Function

  Function PerHeight(pfrmIn As Form) As Double

  Dim i As Long
  i = FindForm(pfrmIn)

  If i < 0 Then
  i = AddForm(pfrmIn)
  End If

  PerHeight = (pfrmIn.ScaleHeight * 100) FormRecord(i).ScaleHeight
  End Function

  Public Sub ResizeControl(inControl As Control, pfrmIn As Form)

  On Error Resume Next
  Dim i As Long
  Dim widthfactor As Single, heightfactor As Single
  Dim minFactor As Single
  Dim yRatio, xRatio, lTop, lLeft, lWidth, lHeight As Long
  yRatio = PerHeight(pfrmIn)
  xRatio = PerWidth(pfrmIn)
  i = FindControl(inControl, pfrmIn.Name)

  If inControl.Left < 0 Then
  lLeft = CLng(((ControlRecord(i).Left * xRatio) 100) - 75000)
  Else
  lLeft = CLng((ControlRecord(i).Left * xRatio) 100)
  End If

  lTop = CLng((ControlRecord(i).Top * yRatio) 100)
  lWidth = CLng((ControlRecord(i).Width * xRatio) 100)
  lHeight = CLng((ControlRecord(i).Height * yRatio) 100)
  If TypeOf inControl Is Line Then

  If inControl.X1 < 0 Then
   inControl.X1 = CLng(((ControlRecord(i).Left * xRatio) 100) - 75000)
  Else
   inControl.X1 = CLng((ControlRecord(i).Left * xRatio) 100)
  End If

  inControl.Y1 = CLng((ControlRecord(i).Top * yRatio) 100)
  If inControl.X2 < 0 Then
   inControl.X2 = CLng(((ControlRecord(i).Width * xRatio) 100) - 75000)
  Else
   inControl.X2 = CLng((ControlRecord(i).Width * xRatio) 100)
  End If

  inControl.Y2 = CLng((ControlRecord(i).Height * yRatio) 100)
  Else
  inControl.Move lLeft, lTop, lWidth, lHeight
  inControl.Move lLeft, lTop, lWidth
  inControl.Move lLeft, lTop
  End If

  End Sub

  Public Sub ResizeForm(pfrmIn As Form)

  Dim FormControl As Control
  Dim isVisible As Boolean
  Dim StartX, StartY, MaxX, MaxY As Long
  Dim bNew As Boolean

  If Not bRunning Then
  bRunning = True

  If FindForm(pfrmIn) < 0 Then
   bNew = True
  Else
   bNew = False
  End If
  If pfrmIn.Top < 30000 Then
   isVisible = pfrmIn.Visible
   On Error Resume Next
   If Not pfrmIn.MDIChild Then
    On Error GoTo 0
    ' ' pfrmIn.Visible = False
   Else

    If bNew Then
     StartY = pfrmIn.Height
     StartX = pfrmIn.Width
     On Error Resume Next
     For Each FormControl In pfrmIn
      If FormControl.Left + FormControl.Width + 200 > MaxX Then
       MaxX = FormControl.Left + FormControl.Width + 200
      End If

      If FormControl.Top + FormControl.Height + 500 > MaxY Then
       MaxY = FormControl.Top + FormControl.Height + 500
      End If

      If FormControl.X1 + 200 > MaxX Then
       MaxX = FormControl.X1 + 200
      End If

      If FormControl.Y1 + 500 > MaxY Then
       MaxY = FormControl.Y1 + 500
      End If

      If FormControl.X2 + 200 > MaxX Then
       MaxX = FormControl.X2 + 200
      End If

      If FormControl.Y2 + 500 > MaxY Then
       MaxY = FormControl.Y2 + 500
      End If

     Next FormControl

     On Error GoTo 0
     pfrmIn.Height = MaxY
     pfrmIn.Width = MaxX
    End If

    On Error GoTo 0
   End If

精彩图集

赞助商链接