Visual Basic – Automatska promena veličine kontrola na formi

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

Pratite Krstaricu na www.krstarica.com