Griffige Ecken
Formulare mit zusätzlicher Griff-Ecke ausstatten
Wenn Sie das StatusBar Steuerelement aus den Common Controls unten auf Ihrem Formular ausrichten, erhält dies automatisch eine Griff-Ecke zur Größenänderung. Diese Griff-Ecke können Sie auch ohne Common Controls haben.
Wenn Sie in Ihren Formularen das Statusleisten Steuerelement aus den Windows Common Controls einsetzen, haben Sie automatisch in der unteren linken Ecke eine kleine schraffierte Fläche über die das Formular zusätzlich in seiner Größe verändert werden kann. Setzt natürlich voraus, dass diese am unteren Rand ausgerichtet ist. Aber Sie müssen nicht immer gleich die Common Controls einbinden, um an diese Griff-Ecken zu gelangen, Sie können auch das hier vorgestellte UserControl verwenden.
Die Größenänderung des Form setzt man durch die API Funktion SendMessage, der Nachricht WM_NCLBUTTONDOWN und der Konstanten HTBOTTOMRIGHT in "wParam" in Gang:
Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If Button = vbLeftButton Then ReleaseCapture SendMessage Parent.hwnd, WM_NCLBUTTONDOWN, HTBOTTOMRIGHT, ByVal 0& End If End Sub
Die passende Grafik liefert die API Funktion LoadImage. Übergibt man Null als Instanzenhandle, lädt diese Funktion eine Ressource aus dem Systemfundus. Die Grafik der Griff-Ecke verbirgt sich hinter der Konstante OBM_SIZE und hat automatisch die passende Größe, die von der Größe der Scrollleisten abhängt und das passende Farbschema. Mithilfe der Funktion HandleToPicture wird diese Grafik direkt über die Picture-Eigenschaft dem UserControl zugewiesen. Diese Methode liefert auch gleich die passenden Maße, um das UserControl in seiner Größe anzupassen:
Private Sub pLoadGripper() Dim hBitmap As Long hBitmap = LoadImage(0, OBM_SIZE, IMAGE_BITMAP, 0, 0, 0) Set Picture = HandleToPicture(hBitmap, vbPicTypeBitmap) Width = ScaleX(Picture.Width, vbHimetric, vbTwips) Height = ScaleY(Picture.Height, vbHimetric, vbTwips) End Sub Private Sub UserControl_Initialize() pLoadGripper End Sub
Da der Benutzer während der Laufzeit des Programms die Einstellungen des Anzeigeschemas ändern kann, wird zusätzlich im Paint-Ereignis des UserControl die Grafik erneut dem UserControl zugewiesen. Da die Zuweisung der Grafik sofort wieder das Paint Ereignis auslöst, wird der vollständige Ablauf durch die Variable bolAtWork gesteuert und nur beim ersten Aufruf gewährt:
Private Sub UserControl_Paint() Static bolAtWork As Boolean If (bolAtWork) Then Exit Sub Else bolAtWork = True End If pLoadGripper pAlignGripper bolAtWork = False End Sub
Zum Schluss muss das UserControl noch entsprechend unten rechts ausgerichtet werden. Dazu muss auf das Resize-Ereignis des Formulars reagiert werden:
Private WithEvents mParent As Form Private Sub UserControl_ReadProperties(PropBag As PropertyBag) If (Ambient.UserMode) And TypeOf UserControl.Parent Is Form Then Set mParent = Parent End If End Sub Private Sub mParent_Resize() pAlignGripper End Sub Private Sub pAlignGripper() If (Ambient.UserMode) Then If Parent.WindowState = vbNormal Then With Extender .Visible = True .Top = Parent.ScaleHeight - .Height .Left = Parent.ScaleWidth - .Width End With Else Extender.Visible = False End If End If End Sub
Das zum Download angebotene Gripper-Control verfügt über Eigenschaften, die eine weitere Anpassung des Control erlauben. Über die AutoAlign- Eigenschaft, kann die automatische Ausrichtung des Control abgeschaltet werden. Dies ist vor allem dann sinnvoll, wenn die Griff-Ecke in einem untergeordeneten Container, wie zum Beispiel einer PictureBox, untergebracht wird. Die HideMaximized- Eigenschaft legt fest, ob die Griff-Ecke ausgeblendet wird, wenn das Formular maximiert wurde. Setzt man diese auf False, bleibt das Control sichtbar, wird aber gesperrt, was sich in der Darstellung durch ein einfaches graues Kästchen äussert. Somit kann die Griff-Ecke als Lückenfüller zwischen zwei Scrollleisten (horizontal/vertikal) genutzt werden. Die Sperrung des Control, kann auch über die Enabled- Eigenschaft erfolgen.
Die Deklarationen und den vollständigen Code entnehmen Sie dem Beispielprojekt.
- [26.09.2001]
- - AutoAlign- Eigenschaft hinzugefügt
- - HideMaximized- Eigenschaft hinzugefügt
- - Enabled- Eigenschaft hinzugefügt
- Gripper UserControl und Beispielprojekt (gripper.zip - 5 KB)