Rubrik: Oberfläche · Fenster | VB-Versionen: VB4, VB5, VB6 | 28.05.03 |
Form exakt positionieren Dieses Beispiel zeigt, wie sich eine Form an der aktuellen Mauszeigerposition oder unterhalb eines bestimmten Controls positionieren lässt. | ||
Autor: Dieter Otter | Bewertung: | Views: 14.743 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Manchmal soll eine 2. Form aus der Hauptanwendung heraus nicht unbedingt "irgendwo" angezeigt werden, sondern z.B. direkt an der aktuellen Mauszeigerposition... oder auch unterhalb eines bestehenden Controls auf der Hauptform.
Wie das geht, erfahren Sie jetzt
Form an der aktuellen Mauszeigerposition anzeigen
Hierzu müssen wir lediglich die aktuelle Mauszeigerposition bezogen auf den Desktop ermitteln, und können dann die Form via Move-Methode neu positionieren.
' Benötigte API-Deklaration Private Declare Function GetCursorPos Lib "user32" ( _ lpPoint As POINTAPI) As Long Private Type POINTAPI x As Long y As Long End Type
' Form an Mauszeiger positioniern Dim P As POINTAPI ' Aktuelle Mausposition ermitteln GetCursorPos P ' 2. Form laden und positionieren Load Form2 Form2.Move P.x * Screen.TwipsPerPixelX, _ P.y * Screen.TwipsPerPixelY Form2.Show vbModal
Form unterhalb eines Controls auf der Hauptform positionieren
Hier müssen wir zunächst die Größe und Position des Controls ermitteln. Auch diesmal benötigen wir wieder das Windows-API. Danach wird die Form direkt unterhalb des Controls positioniert. Im nachfolgenden Beispiel wird die Form unterhalb eines Buttons positioniert (Command1).
' Benötigte API-Deklaration Private Declare Function GetCursorPos Lib "user32" ( _ lpPoint As POINTAPI) As Long Private Declare Function GetWindowRect Lib "user32" ( _ ByVal hwnd As Long, _ lpRect As RECT) As Long Private Declare Function ClientToScreen Lib "user32" ( _ ByVal hwnd As Long, _ lpPoint As POINTAPI) As Long Private Type POINTAPI x As Long y As Long End Type Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type
Dim P As POINTAPI Dim R As RECT ' Größe des Controls ermitteln GetWindowRect Command1.hwnd, R ' Koordinaten bezogen auf den Screen ClientToScreen Command1.hwnd, P ' 2. Form laden und positionieren Load Form2 Form2.Move P.x * Screen.TwipsPerPixelX, _ (P.y + (R.Bottom - R.Top)) * Screen.TwipsPerPixelY Form2.Show vbModal