Die Anzeige eines Tooltips über der blanken Form-Oberfläche ist von Visual Basic offensichtlich nicht vorgesehen - ein Form verfügt nicht wie Steuerelemente über die ToolTipText-Eigenschaft. Der einfachste Weg zu einem Tooltip über der Form-Oberfläche führt über die Zweckentfremdung eines Steuerelements, das die betreffende Fläche im Form oder die ganze Oberfläche des Forms bedeckt. Die wenigsten Ressourcen verschwendet ein durchsichtiges (BackStyle = 0 - Transparent) Label-Steuerelement ohne Beschriftung (Caption =""). Dessen ToolTipText-Eigenschaft können Sie nun den anzuzeigenden Text zuweisen.
Soll der Tooltip über der gesamten Oberfläche des Forms erscheinen, sorgen Sie im Resize-Ereignis des Forms für eine flächendeckende Positionierung des Labels:
Private Sub Form_Resize()
On Error Resume Next
With Me
Label1.Move 0, 0, .ScaleWidth, .ScaleHeight
Label1.ZOrder 1
End With
End Sub
Die Maus- und Click-Ereignisse werden nun natürlich von dem Label geschluckt. Statt dessen werden die entsprechenden Ereignisse des Labels ausgelöst. Sie können diese problemlos anstelle der gleichbedeutenden Form-Ereignisse verwenden. Sie können sie aber auch an die jeweiligen Form-Ereignis-Prozeduren weiterleiten. Vor allem bei den Mausereignissen könnte dies sinnvoll sein, um die vom Label-Steuerelement, das ja über keine Möglichkeiten verfügt, die Maßeinheiten (ScaleMode) einzustellen, gelieferten Koordinaten vorab in die aktuelle Maßeinheit des Forms umzurechnen. Zur Umrechnung verwenden Sie die Methoden ScaleX und ScaleY des Forms:
Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
With Me
Form_MouseDown Button, Shift, .ScaleX(X, vbTwips, _
.ScaleMode), .ScaleY(Y, vbTwips, .ScaleMode)
End With
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Debug.Print "Form_MouseDown", X, Y
End Sub
Über dem Label erscheint der Tooltip jedoch immer nur einmal und bleibt an einer Position stehen, auch wenn Sie den Mauszeiger weiter bewegen. Soll der Tooltip dem Mauszeiger folgen, können Sie dies über eine kurzzeitige Löschung des Tooltips im MouseMove-Ereignis des Forms erreichen:
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Dim nOldToolTipText As String
With Label1
nOldToolTipText = .ToolTipText
.ToolTipText = ""
.ToolTipText = nOldToolTipText
End With
End Sub
|