Zweigeteiltes Fenster mit verschiebbarem Mittelsteg (Splitter) |
|
Ein Splitter ist in VB ein zweigeteiltes Fenster mit einem verschiebbaren Mittelsteg. Der Mittelsteg kann dabei mit gedrückter Maustaste vertikal oder horizontal verschoben werden, wobei sich gleichzeitig die beiden Fensterhälften in der Breite bzw. Höhe mitändern. Der Mittelsteg ist jedoch kein eigenes Control, sondern er ergibt sich aus dem Abstand der beiden benachbarten Controls auf der Userform. Das Geheimnis, das hinter der angeblichen Verschiebung steckt, ist nun, dass nicht der Mittelsteg verschoben wird, sondern die Breite der beiden Controls abhängig vom Mauszeiger verändert wird. Dazu wird ein Ereignis der Userform abgefragt, das wohl eher selten verwendet wird: Das .MouseMove-Ereignis. Private Sub UserForm_MouseMove(ByVal Button As Integer, _ ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) If (y > ListBox1.Top) And (y < (ListBox1.Top + ListBox1.Height)) Then If (x > (intXPosTrenn - intTrennBreite)) And (x < ( _ intXPosTrenn + intTrennBreite)) Then Me.MousePointer = fmMousePointerSizeWE Else If Button = 0 Then Me.MousePointer = fmMousePointerDefault intXPosTrenn = ListBox2.Left - intTrennBreiteHalb End If End If Else Me.MousePointer = fmMousePointerDefault End If If (Button = 1) And (Me.MousePointer = fmMousePointerSizeWE) Then fkt_MoveSplitter ListBox1, ListBox2, x, y End If In der Funktion fkt_MoveSplitter wird neben der Berechnung der beiden Control-Breiten auch kontrolliert, dass die Verschiebung des Mittelstegs nach links und rechts nicht eine Mindestbreite der Controls überschreitet. Function fkt_MoveSplitter(ByRef ctl1 As Control, ByRef ctl2 As Control, _ ByVal x As Single, ByVal y As Single) Dim intBreiteCtl2 As Long Dim intBreiteCtl1 As Long Dim minXPosTrenn As Long Dim maxXPosTrenn As Long intXPosTrenn = x 'Verschiebung des Trennbalkens nach links begrenzen minXPosTrenn = intMinBreite + intRandLinks + intTrennBreiteHalb If intXPosTrenn < minXPosTrenn Then intXPosTrenn = minXPosTrenn End If 'Verschiebung des Trennbalkens nach rechts begrenzen maxXPosTrenn = Me.Width - (intMinBreite + intRandLinks + intTrennBreiteHalb) If intXPosTrenn > maxXPosTrenn Then intXPosTrenn = maxXPosTrenn End If 'Breite Control 1 (links) intBreiteCtl1 = intXPosTrenn - (intRandLinks + intTrennBreiteHalb) 'Breite Control 2 (rechts) intBreiteCtl2 = Me.Width - (intRandLinks + intBreiteCtl1 + intTrennBreite + _ intRandLinks) ctl1.Move intRandLinks, intRandOben, intBreiteCtl1 ctl2.Move intXPosTrenn + intTrennBreiteHalb, intRandOben, intBreiteCtl2 End Function |
Besucher: 0 online | 0 heute | 0 diesen Monat | 2219263 insgesamt | Seitenaufrufe: 78 | Letzte Änderung: 24.06.2006 | © 2001-18 Christian Freßdorf | ||||
Alles Große und Edle ist einfacher Art. Gottfried Keller |
powered by phpCMS and PAX |