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

VB中控件大小随窗体大小变化

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
有时窗体变化后,如改变分辨率后控件大小却不能随之改变。手工代码调整实在麻烦,下面的模块实现自动查找窗体上控件并使其改变大小以适应窗体变化。 在Form的Resize事件中调用函

  有时窗体变化后,如改变分辨率后控件大小却不能随之改变。手工代码调整实在麻烦,下面的模块实现自动查找窗体上控件并使其改变大小以适应窗体变化。

  在Form的Resize事件中调用函数Resize_All就能实现控件自动调整大小,如:

  Private Sub Form_Resize()
  Dim H, i As Integer
  On Error Resume Next
  Resize_ALL Me 'Me是窗体名,Form1,Form2等等都可以

  End Sub

  在模块中添加以下代码:

  Public Type ctrObj
  Name As String
  Index As Long
  Parrent As String
  Top As Long
  Left As Long
  Height As Long
  Width As Long
  ScaleHeight As Long
  ScaleWidth As Long
  End Type

  Private FormRecord() As ctrObj
  Private ControlRecord() As ctrObj
  Private bRunning As Boolean
  Private MaxForm As Long
  Private MaxControl As Long
  Private Const WM_NCLBUTTONDOWN = &HA1
  Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  Private Declare Function ReleaseCapture Lib "USER32" () As Long

  Function ActualPos(plLeft As Long) As Long

  If plLeft < 0 Then
  ActualPos = plLeft + 75000
  Else
  ActualPos = plLeft
  End If

  End Function

  Function FindForm(pfrmIn As Form) As Long

  Dim i As Long
  FindForm = -1

  If MaxForm > 0 Then
  
  For i = 0 To (MaxForm - 1)
   If FormRecord(i).Name = pfrmIn.Name Then
    FindForm = i
    Exit Function
   End If
  Next i
  End If

  End Function

  Function AddForm(pfrmIn As Form) As Long

  Dim FormControl As Control
  Dim i As Long
  ReDim Preserve FormRecord(MaxForm + 1)

  FormRecord(MaxForm).Name = pfrmIn.Name
  FormRecord(MaxForm).Top = pfrmIn.Top
  FormRecord(MaxForm).Left = pfrmIn.Left
  FormRecord(MaxForm).Height = pfrmIn.Height
  FormRecord(MaxForm).Width = pfrmIn.Width
  FormRecord(MaxForm).ScaleHeight = pfrmIn.ScaleHeight
  FormRecord(MaxForm).ScaleWidth = pfrmIn.ScaleWidth
  AddForm = MaxForm
  MaxForm = MaxForm + 1

精彩图集

赞助商链接