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