'保存窗体的原始宽度 Private FormOldWidth As Long '保存窗体的原始高度 Private FormOldHeight As Long '在调用ResizeForm前先调用本函数 Public Sub ResizeInit(FormName As Form) Dim Obj As Control FormOldWidth = FormName.ScaleWidth FormOldHeight = FormName.ScaleHeight On Error Resume Next '保存 For Each Obj In FormName Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " " Next Obj End Sub'按比例改变表单内各元件的大小, Public Sub ResizeForm(FormName As Form) Dim Pos(3) As Double Dim I As Long, TempPos As Long, StartPos As Long Dim Obj As Control Dim ScaleX As Double, ScaleY As Double '保存窗体宽度缩放比例 ScaleX = FormName.ScaleWidth / FormOldWidth '保存窗体高度缩放比例 ScaleY = FormName.ScaleHeight / FormOldHeight On Error Resume Next For Each Obj In FormName StartPos = 1 For I = 0 To 3 '读取控件的原始位置与大小 TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare) If TempPos > 0 Then Pos(I) = Mid(Obj.Tag, StartPos, TempPos - StartPos) StartPos = TempPos + 1 Else Pos(I) = 0 End If '根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小 Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY Next I Next Obj End SubPrivate Sub Form_Load() Call ResizeInit(Me) '在程序装入时必须加入 End SubPrivate Sub Form_Resize() Call ResizeForm(Me) '确保窗体改变时控件随之改变 End Sub
Option ExplicitPrivate Type BITMAP bmType As Long bmWidth As Long bmHeight As Long bmWidthBytes As Long bmPlanes As Integer bmBitsPixel As Integer bmBits As Long End TypePrivate Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As LongPrivate Sub Form_Load()
Dim Success As Long Dim bmp As BITMAP Dim srcDC As Long ' Dim hSrcPrevBmp As Long ' Dim srcBmp As Long Dim hSrcBmp As Long Dim y As Long Dim x As Long 'Picture1.Picture = LoadPicture("c:\windows\winlogo.gif") srcBmp = Picture1.Picture Success = GetObject(srcBmp, Len(bmp), bmp) srcDC = CreateCompatibleDC(Form1.hdc) hSrcBmp = SelectObject(srcDC, srcBmp) ' For y = 0 To Form1.ScaleHeight Step bmp.bmHeight ' For x = 0 To Form1.ScaleWidth Step bmp.bmWidth ' Success = BitBlt(Form1.hdc, x, y, bmp.bmWidth, bmp.bmHeight, srcDC, 0, 0, &HCC0020) Next x Next y Success = DeleteObject(hSrcBmp) Success = DeleteDC(srcDC)
Private FormOldWidth As Long
'保存窗体的原始高度
Private FormOldHeight As Long
'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control
FormOldWidth = FormName.ScaleWidth
FormOldHeight = FormName.ScaleHeight
On Error Resume Next
'保存
For Each Obj In FormName
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
Next Obj
End Sub'按比例改变表单内各元件的大小,
Public Sub ResizeForm(FormName As Form)
Dim Pos(3) As Double
Dim I As Long, TempPos As Long, StartPos As Long
Dim Obj As Control
Dim ScaleX As Double, ScaleY As Double
'保存窗体宽度缩放比例
ScaleX = FormName.ScaleWidth / FormOldWidth
'保存窗体高度缩放比例
ScaleY = FormName.ScaleHeight / FormOldHeight
On Error Resume Next
For Each Obj In FormName
StartPos = 1
For I = 0 To 3
'读取控件的原始位置与大小
TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
If TempPos > 0 Then
Pos(I) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1
Else
Pos(I) = 0
End If
'根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
Next I
Next Obj
End SubPrivate Sub Form_Load()
Call ResizeInit(Me) '在程序装入时必须加入
End SubPrivate Sub Form_Resize()
Call ResizeForm(Me) '确保窗体改变时控件随之改变
End Sub
但是我现在背景图片还没有搞好。怎样设置背景图片呢?我想做成用户可以自己选择的,而且图片是平铺的,不管图片多大,刚刚显示在窗体中,可以随着窗体大小变化而变化。
要的话,Mail me
[email protected]
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End TypePrivate Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As LongPrivate Sub Form_Load()
Picture1.Visible = False
Picture1.AutoRedraw = False
Picture1.AutoSize = True
Form1.AutoRedraw = False
End SubPrivate Sub Form_Paint()
Dim Success As Long
Dim bmp As BITMAP
Dim srcDC As Long '
Dim hSrcPrevBmp As Long '
Dim srcBmp As Long
Dim hSrcBmp As Long
Dim y As Long
Dim x As Long 'Picture1.Picture = LoadPicture("c:\windows\winlogo.gif")
srcBmp = Picture1.Picture
Success = GetObject(srcBmp, Len(bmp), bmp)
srcDC = CreateCompatibleDC(Form1.hdc)
hSrcBmp = SelectObject(srcDC, srcBmp) '
For y = 0 To Form1.ScaleHeight Step bmp.bmHeight '
For x = 0 To Form1.ScaleWidth Step bmp.bmWidth '
Success = BitBlt(Form1.hdc, x, y, bmp.bmWidth, bmp.bmHeight, srcDC, 0, 0, &HCC0020)
Next x
Next y Success = DeleteObject(hSrcBmp)
Success = DeleteDC(srcDC)
End Sub
我突然发现一个问题,因为我的程序里面对height有所定义(如下)
【
'文件大小不一样 根据内容的大小, 我对动态指定Text1的大小
Form2.Text1.Height = TextHeight(Form2.Text1.Text)
】
如果按照你的那个代码写,就只能显示一部分text里面的内容!!能不能不涉及height!?
只要width变就可以啦?
怎么改一下呢?