我现在做了个可以有字幕效果的程序,我想还可以设置背景图片。我是在PictureBox中加一个TextBox,然后用TextBox的Move方法。可是我显示的字幕不能随着窗体的大小改变而改变,我想就用resize就可以了,但是实现不了!
而且如何让背景图片,随窗口大小变化而变化?(需要vb源代码)

解决方案 »

  1.   

    '保存窗体的原始宽度
    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
      

  2.   

    谢谢啦!textbox可以实现啦!
    但是我现在背景图片还没有搞好。怎样设置背景图片呢?我想做成用户可以自己选择的,而且图片是平铺的,不管图片多大,刚刚显示在窗体中,可以随着窗体大小变化而变化。
      

  3.   

    我有一个控件,可以实现,
    要的话,Mail me
    [email protected]
      

  4.   

    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()
        
        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
      

  5.   

    freehorse_1981() :
    我突然发现一个问题,因为我的程序里面对height有所定义(如下)

    '文件大小不一样 根据内容的大小, 我对动态指定Text1的大小
    Form2.Text1.Height = TextHeight(Form2.Text1.Text)

    如果按照你的那个代码写,就只能显示一部分text里面的内容!!能不能不涉及height!?
    只要width变就可以啦?
    怎么改一下呢?