home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / CODE_UPLOAD1085010212000.psc / resize.bas < prev   
Encoding:
BASIC Source File  |  2000-07-03  |  7.8 KB  |  285 lines

  1. Attribute VB_Name = "Resize"
  2. Public Type ctrObj
  3.   Name As String
  4.   Index As Long
  5.   Parrent As String
  6.   Top As Long
  7.   Left As Long
  8.   Height As Long
  9.   Width As Long
  10.   ScaleHeight As Long
  11.   ScaleWidth As Long
  12. End Type
  13.  
  14. Private FormRecord() As ctrObj
  15. Private ControlRecord() As ctrObj
  16. Private bRunning As Boolean
  17. Private MaxForm As Long
  18. Private MaxControl As Long
  19.  
  20. Private Function ActualPos(plLeft As Long) As Long
  21.   If plLeft < 0 Then
  22.     ActualPos = plLeft + 75000
  23.   Else
  24.     ActualPos = plLeft
  25.   End If
  26. End Function
  27.  
  28. Private Function FindForm(pfrmIn As Form) As Long
  29.   Dim i As Long
  30.   
  31.   FindForm = -1
  32.   If MaxForm > 0 Then
  33.     For i = 0 To (MaxForm - 1)
  34.       If FormRecord(i).Name = pfrmIn.Name Then
  35.         FindForm = i
  36.         Exit Function
  37.       End If
  38.     Next i
  39.   End If
  40. End Function
  41.  
  42.  
  43. Private Function AddForm(pfrmIn As Form) As Long
  44.   Dim FormControl As Control
  45.   Dim i As Long
  46.   ReDim Preserve FormRecord(MaxForm + 1)
  47.  
  48.   FormRecord(MaxForm).Name = pfrmIn.Name
  49.   FormRecord(MaxForm).Top = pfrmIn.Top
  50.   FormRecord(MaxForm).Left = pfrmIn.Left
  51.   FormRecord(MaxForm).Height = pfrmIn.Height
  52.   FormRecord(MaxForm).Width = pfrmIn.Width
  53.   FormRecord(MaxForm).ScaleHeight = pfrmIn.ScaleHeight
  54.  
  55.   FormRecord(MaxForm).ScaleWidth = pfrmIn.ScaleWidth
  56.   AddForm = MaxForm
  57.   MaxForm = MaxForm + 1
  58.  
  59.   For Each FormControl In pfrmIn
  60.     i = FindControl(FormControl, pfrmIn.Name)
  61.     If i < 0 Then i = AddControl(FormControl, pfrmIn.Name)
  62.   Next FormControl
  63. End Function
  64.  
  65. Private Function FindControl(inControl As Control, inName As String) As Long
  66.   Dim i As Long
  67.   
  68.   FindControl = -1
  69.   For i = 0 To (MaxControl - 1)
  70.     If ControlRecord(i).Parrent = inName Then
  71.       If ControlRecord(i).Name = inControl.Name Then
  72.         On Error Resume Next
  73.         
  74.         If ControlRecord(i).Index = inControl.Index Then
  75.           FindControl = i
  76.           Exit Function
  77.         End If
  78.         On Error GoTo 0
  79.       
  80.       End If
  81.     End If
  82.   Next i
  83. End Function
  84.  
  85. Private Function AddControl(inControl As Control, inName As String) As Long
  86.   ReDim Preserve ControlRecord(MaxControl + 1)
  87.   On Error Resume Next
  88.   
  89.   ControlRecord(MaxControl).Name = inControl.Name
  90.   ControlRecord(MaxControl).Index = inControl.Index
  91.   ControlRecord(MaxControl).Parrent = inName
  92.  
  93.   If TypeOf inControl Is Line Then
  94.     ControlRecord(MaxControl).Top = inControl.Y1
  95.     ControlRecord(MaxControl).Left = ActualPos(inControl.X1)
  96.     ControlRecord(MaxControl).Height = inControl.Y2
  97.     ControlRecord(MaxControl).Width = ActualPos(inControl.X2)
  98.   Else
  99.     ControlRecord(MaxControl).Top = inControl.Top
  100.     ControlRecord(MaxControl).Left = ActualPos(inControl.Left)
  101.     ControlRecord(MaxControl).Height = inControl.Height
  102.     ControlRecord(MaxControl).Width = inControl.Width
  103.   End If
  104.  
  105.   inControl.IntegralHeight = False
  106.   
  107.   On Error GoTo 0
  108.   AddControl = MaxControl
  109.   MaxControl = MaxControl + 1
  110. End Function
  111.  
  112. Private Function PerWidth(pfrmIn As Form) As Long
  113.   Dim i As Long
  114.   
  115.   i = FindForm(pfrmIn)
  116.   If i < 0 Then i = AddForm(pfrmIn)
  117.   
  118.   PerWidth = (pfrmIn.ScaleWidth * 100) \ FormRecord(i).ScaleWidth
  119. End Function
  120.  
  121. Private Function PerHeight(pfrmIn As Form) As Single
  122.   Dim i As Long
  123.   
  124.   i = FindForm(pfrmIn)
  125.   If i < 0 Then i = AddForm(pfrmIn)
  126.   
  127.   PerHeight = (pfrmIn.ScaleHeight * 100) \ FormRecord(i).ScaleHeight
  128. End Function
  129.  
  130. Private Sub ResizeControl(inControl As Control, pfrmIn As Form)
  131.   On Error Resume Next
  132.   Dim i As Long
  133.   Dim widthfactor As Single, heightfactor As Single
  134.   Dim minFactor As Single
  135.   Dim yRatio, xRatio, lTop, lLeft, lWidth, lHeight As Long
  136.   
  137.   yRatio = PerHeight(pfrmIn)
  138.   xRatio = PerWidth(pfrmIn)
  139.   i = FindControl(inControl, pfrmIn.Name)
  140.  
  141.   If inControl.Left < 0 Then
  142.     lLeft = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000)
  143.   Else
  144.     lLeft = CLng((ControlRecord(i).Left * xRatio) \ 100)
  145.   End If
  146.  
  147.   lTop = CLng((ControlRecord(i).Top * yRatio) \ 100)
  148.   lWidth = CLng((ControlRecord(i).Width * xRatio) \ 100)
  149.   lHeight = CLng((ControlRecord(i).Height * yRatio) \ 100)
  150.   
  151.   If TypeOf inControl Is Line Then
  152.     If inControl.X1 < 0 Then
  153.       inControl.X1 = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000)
  154.     Else
  155.       inControl.X1 = CLng((ControlRecord(i).Left * xRatio) \ 100)
  156.     End If
  157.     
  158.     inControl.Y1 = CLng((ControlRecord(i).Top * yRatio) \ 100)
  159.     If inControl.X2 < 0 Then
  160.       inControl.X2 = CLng(((ControlRecord(i).Width * xRatio) \ 100) - 75000)
  161.     Else
  162.       inControl.X2 = CLng((ControlRecord(i).Width * xRatio) \ 100)
  163.     End If
  164.  
  165.     inControl.Y2 = CLng((ControlRecord(i).Height * yRatio) \ 100)
  166.   Else
  167.     inControl.Move lLeft, lTop, lWidth, lHeight
  168.     inControl.Move lLeft, lTop, lWidth
  169.     inControl.Move lLeft, lTop
  170.   End If
  171. End Sub
  172.  
  173. Public Sub ResizeForm(pfrmIn As Form)
  174.   Dim FormControl As Control
  175.   Dim isVisible As Boolean
  176.   Dim StartX, StartY, MaxX, MaxY As Long
  177.   Dim bNew As Boolean
  178.   
  179.   If Not bRunning Then
  180.     bRunning = True
  181.     
  182.     If FindForm(pfrmIn) < 0 Then
  183.       bNew = True
  184.     Else
  185.       bNew = False
  186.     End If
  187.  
  188.     If pfrmIn.Top < 30000 Then
  189.       isVisible = pfrmIn.Visible
  190.       On Error Resume Next
  191.       
  192.       If Not pfrmIn.MDIChild Then
  193.         On Error GoTo 0
  194.         'pfrmIn.Visible = False
  195.       Else
  196.         If bNew Then
  197.           StartY = pfrmIn.Height
  198.           StartX = pfrmIn.Width
  199.           On Error Resume Next
  200.  
  201.           For Each FormControl In pfrmIn
  202.             If FormControl.Left + FormControl.Width + 200 > MaxX Then _
  203.               MaxX = FormControl.Left + FormControl.Width + 200
  204.             If FormControl.Top + FormControl.Height + 500 > MaxY Then _
  205.               MaxY = FormControl.Top + FormControl.Height + 500
  206.             If FormControl.X1 + 200 > MaxX Then _
  207.               MaxX = FormControl.X1 + 200
  208.             If FormControl.Y1 + 500 > MaxY Then _
  209.               MaxY = FormControl.Y1 + 500
  210.             If FormControl.X2 + 200 > MaxX Then _
  211.               MaxX = FormControl.X2 + 200
  212.             If FormControl.Y2 + 500 > MaxY Then _
  213.               MaxY = FormControl.Y2 + 500
  214.           Next FormControl
  215.           On Error GoTo 0
  216.           
  217.           pfrmIn.Height = MaxY
  218.           pfrmIn.Width = MaxX
  219.         End If
  220.         On Error GoTo 0
  221.  
  222.       End If
  223.       
  224.       For Each FormControl In pfrmIn
  225.         ResizeControl FormControl, pfrmIn
  226.       Next FormControl
  227.       On Error Resume Next
  228.  
  229.       If Not pfrmIn.MDIChild Then
  230.         On Error GoTo 0
  231.         pfrmIn.Visible = isVisible
  232.       Else
  233.         If bNew Then
  234.           pfrmIn.Height = StartY
  235.           pfrmIn.Width = StartX
  236.           
  237.           For Each FormControl In pfrmIn
  238.             ResizeControl FormControl, pfrmIn
  239.           Next FormControl
  240.         End If
  241.       End If
  242.       On Error GoTo 0
  243.       
  244.     End If
  245.     bRunning = False
  246.   End If
  247. End Sub
  248.  
  249. Public Sub SaveFormPosition(pfrmIn As Form)
  250.   Dim i As Long
  251.  
  252.   If MaxForm > 0 Then
  253.     For i = 0 To (MaxForm - 1)
  254.       If FormRecord(i).Name = pfrmIn.Name Then
  255.         FormRecord(i).Top = pfrmIn.Top
  256.         FormRecord(i).Left = pfrmIn.Left
  257.         FormRecord(i).Height = pfrmIn.Height
  258.         FormRecord(i).Width = pfrmIn.Width
  259.         Exit Sub
  260.       End If
  261.     Next i
  262.     AddForm (pfrmIn)
  263.   End If
  264. End Sub
  265.  
  266. Public Sub RestoreFormPosition(pfrmIn As Form)
  267.   Dim i As Long
  268.  
  269.   If MaxForm > 0 Then
  270.     For i = 0 To (MaxForm - 1)
  271.       If FormRecord(i).Name = pfrmIn.Name Then
  272.         If FormRecord(i).Top < 0 Then
  273.           pfrmIn.WindowState = 2
  274.         ElseIf FormRecord(i).Top < 30000 Then
  275.           pfrmIn.WindowState = 0
  276.           pfrmIn.Move FormRecord(i).Left, FormRecord(i).Top, FormRecord(i).Width, FormRecord(i).Height
  277.         Else
  278.           pfrmIn.WindowState = 1
  279.         End If
  280.         Exit Sub
  281.       End If
  282.     Next i
  283.   End If
  284. End Sub
  285.