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.
Während man in VB inzwischen auf fertige Controls zurückgreifen kann, möchte ich hier zeigen, wie man sich auch in VBA ohne zusätzliche Controls einen solchen Splitter selber bauen kann.
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.
Bei jeder Veränderung des Mauszeigers über der Userform wird darin geprüft, ob sich der Mauszeiger innerhalb der Breite des Mittelstegs befindet. Ist dies der Fall, wird zum einen der Mauszeiger geändert (was leider nicht sehr zuverlässig funktioniert) und zum anderen wird dann die Funktion fkt_MoveSplitter zum Anpassen der Control-Breiten aufgerufen. Dieser Funktion werden die beiden Controls, die verändert werden sollen, und die aktuelle Cursorposition im Aufruf mitgegeben.
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.
Nachdem alle Berechnungen erfolgt sind, werden zum Schluss die beiden Controls über die .Move-Methode mit der neuen Breite positioniert.
|