pcworld online logo

KONTROLLERİ AYIRMAK

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 95 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. Örnek resimde gördüğünüz kontrolleri form üzerinde oluşturduktan sonra 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