Tehnika Krstarice > Programiranje > Visual Basic - Automatska promena veličine kontrola na formi

Visual Basic - Automatska promena veličine kontrola na formi

01.09.2001.

Svakako će vam za bilo koju komercijalnu aplikaciju trebati mogućnost automatske izmene veličine kontrola na nekoj formi (prozoru). Za ove potrebe na tržištu postoji veći broj komercijalnih gotovih kontrola (koje se naravno plaćaju). Ali sa programskim kodom koji ćemo vam predstaviti besplatno ćete moći da implementirate ovu mogućnost u vaše programe. Programski kod se sastoji iz dva dela, prvi je vezan za događaj "Form_Load", a drugi za događaj promene veličine "Form_Resize".

Programski kod vezan za događaj "Form_Load" pokrenuće se prvi put kada data forma bude učitana. Programski kod se upotrebljava za sve kontrole, s tim što se individualni podaci o dimenzijama čuvaju u osobini "Tag" svake kontrole. Takođe, uz pomoć dve varijable čuvaju se podaci o visini i širini celokupne glavne forme. Drugi deo programskog koda, onaj vezan za događaj "Form_Resize", aktivira se svaki put kada se izvši promena veličine forme. Ovaj deo koda je vezan za svaku kontrolu na formi i vrši njihovo redimenzionisanje, u zavisnosti od novih dimenzija same forme. Osim same promene veličina kontrola, možete dodati i mogućnost eventualne promene veličine fonta u kontrolama. Biće dovoljno da sledeći programski kod dodate svakoj vašoj formi u programu:

Private Sub Form_Load()

    Dim Ctl As Control

    lngFormWidth = ScaleWidth
    lngFormHeight = ScaleHeight

    On Error Resume Next

    For Each Ctl In Me
        Ctl.Tag = Ctl.Left & " " & Ctl.Top & " " & _
            Ctl.Width & " " & Ctl.Height & " "
            Ctl.Tag = Ctl.Tag & Ctl.FontSize & " "
    Next Ctl

    On Error GoTo 0

End Sub

Private Sub Form_Resize()

    Dim D(4) As Double
    Dim i As Long

    Dim TempPoz As Long
    Dim StartPoz As Long

    Dim Ctl As Control
    Dim TempVisible As Boolean

    Dim ScaleX As Double
    Dim ScaleY As Double

    ScaleX = ScaleWidth / lngFormWidth
    ScaleY = ScaleHeight / lngFormHeight

    On Error Resume Next

    For Each Ctl In Me
        TempVisible = Ctl.Visible
        Ctl.Visible = False
        StartPoz = 1

        For i = 0 To 4
            TempPoz = InStr(StartPoz, Ctl.Tag, " ", _
                vbTextCompare)

            If TempPoz > 0 Then
                D(i) = Mid(Ctl.Tag, StartPoz, _
                    TempPoz - StartPoz)
                StartPoz = TempPoz + 1
            Else
                D(i) = 0
            End If

            Ctl.Move D(0) * ScaleX, D(1) * ScaleY, _
                D(2) * ScaleX, D(3) * ScaleY
            Ctl.Width = D(2) * ScaleX
            Ctl.Height = D(3) * ScaleY

            'Change font size

            If ScaleX < ScaleY Then
                   Ctl.FontSize = D(4) * ScaleX
            Else
                   Ctl.FontSize = D(4) * ScaleY
            End If

        Next i

        Ctl.Visible = TempVisible

    Next Ctl

    On Error GoTo 0

End Sub

Preporučite ovaj članak

Članak još uvek nije ocenjen.