VB'de Kontrolleri Ayırmak Kontrolleri Ayırmak GÜNLÜK hayatınızda sık
sık karşınıza çıkan, belki de pek dikkat etmediğiniz bir arabirim püf
noktası verelim. Windows altında çalışırken Windows Gezgini'ni açtınız
diyelim. Karşınıza ince bir çizgiyle ayrılmış iki ayrı pencere gelir.
Ortadaki çizgiyi sağa veya sola ötelediğinizde pencereler buna göre
yeniden durum alarak ya genişler ya da daralır. Aynı durum formun
büyüklüğüyle oynandığında da karşınıza çıkar ve formun yeni büyüklüğüne
göre kontroller yeni yerlerini alır. Yukarıda anlattığımız iki işlemi
programlarınızda uygulamak pek de zor değildir. Form üzerine bir Liste
bir de Text kutusu oluşturun. Liste kutusunun ismini ' listsol' metin
kutusunun ismini textsag olarak belirleyin. Form üzerinde bu iki
kontrol dışında bir de resim kutusu oluşturarak ismini ' ayirac' olarak
atayın. Programı çalıştırıp ortadaki ayıracı sağa sola kaydırın, formu
küçültüp büyültün, tıpkı Windows Gezgini gibi şekil alacaktır.
' Aşağıdaki kodlar boş bir BAS modülünün içinde
' General-Declarations bölümüne yazılacak.
Option Explicit
Private Const SPLT_WDTH As Integer = 5
Private currSplitPosX As Long
Dim CTRL_OFFSET As Integer
Dim SPLT_COLOUR As Long
' Aşağıdaki kodlar formun ilgili
' yerlerine yerleştirilecek.
Private Sub Form_Load()
CTRL_OFFSET = 5
SPLT_COLOUR = &H808080
currSplitPosX = &H7FFFFFFF
listsol.AddItem ' Listedeki 1. öğe'
listsol.AddItem ' Listedeki 2. öğe'
textsag.Text = ' Örnek bir metin'
End Sub
Private Sub Form_Resize()
Dim x1 As Integer
Dim x2 As Integer
Dim height1 As Integer
Dim width1 As Integer
Dim width2 As Integer
On Error Resume Next
height1 = ScaleHeight - (CTRL_OFFSET * 2)
width1 = listsol.Width
x1 = CTRL_OFFSET
x2 = x1 + width1 + SPLT_WDTH - 1
width2 = ScaleWidth - x2 - CTRL_OFFSET
listsol.Move x1 - 1, CTRL_OFFSET, width1, height1
textsag.Move x2, CTRL_OFFSET, width2 + 1, height1
ayirac.Move x1 + listsol.Width - 1,
CTRL_OFFSET, SPLT_WDTH, height1
End Sub
Private Sub ayirac_MouseDown(Button As
Integer, Shift As Integer, x As Single, y As Single)
If Button = vbLeftButton Then
ayirac.BackColor = SPLT_COLOUR
currSplitPosX = CLng(x)
Else
If currSplitPosX <> &H7FFFFFFF Then ayirac_MouseUp
Button, Shift, x, y
currSplitPosX = &H7FFFFFFF
End If
End Sub
Private Sub ayirac_MouseMove(Button As
Integer, Shift As Integer, x As Single, y As Single)
If currSplitPosX& <> &H7FFFFFFF Then
If CLng(x) <> currSplitPosX Then
ayirac.Move ayirac.Left + x, CTRL_OFFSET,
SPLT_WDTH, ScaleHeight - (CTRL_OFFSET * 2)
currSplitPosX = CLng(x)
End If
End If
End Sub
Private Sub ayirac_MouseUp(Button As Integer,
Shift As Integer, x As Single, y As Single)
If currSplitPosX <> &H7FFFFFFF Then
If CLng(x) <> currSplitPosX Then
ayirac.Move ayirac.Left + x, CTRL_OFFSET,
SPLT_WDTH, ScaleHeight - (CTRL_OFFSET * 2)
End If
currSplitPosX = &H7FFFFFFF
ayirac.BackColor = &H8000000F
If ayirac.Left > 60 And ayirac.Left < (ScaleWidth - 60) Then
listsol.Width = ayirac.Left - listsol.Left
ElseIf ayirac.Left < 60 Then
listsol.Width = 60
Else: listsol.Width = ScaleWidth - 60
End If
Form_Resize
End If
End Sub