Popup-Form relativ positionieren

11/05/2009 - 10:54 von Andreas Vogt | Report spam
Hallo NG
ich möchte ein Popup-Form relativ zu einem Button eines anderen
(Popup-)Forms positionieren.
Dabei möchte ich prüfen ob das zu positionierte Form auch im
sichtbaren Bereich sich befindet, und wenn nicht dass es entsprechend
verschoben wird.

frm ist das Popup-Form, callingform das Formobjekt des aufrufenden
Formulars. buttonposx und buttonposy sind die Koordinaten des Buttons,
zu dem das Popupform positioniert werden soll.
Der obere Teil sollte bekannt sein, der kommt aus dem Beispiel
Fensterpositionen (KnowHow DB).

Der Teil für die Prüfung am rechten Bildschirmrand funktioniert, die
Prüfung für den unteren Bildschirmrand aber nicht so ganz. Auch der
Verschiebewert ist nicht korrekt, das Popup-Form wird zu tief und ist
teilweise im nicht sichtbaren Bereich. Habt ihr ein Tipp woran es
liegt?

Gruß Andreas

Hier mein Code: (diesmal: Access 97)
Option Compare Database
Option Explicit

Private Type Rect
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As
Long, lpRect As Rect) As Long
Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long)
As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hWnd As Long,
ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight
As Long, ByVal bRepaint As Long) As Long

Public Sub posForm(frm As Form, callingform As Form)
Dim rectFormP As Rect, rectFormC As Rect, rectParent As Rect
Dim hwndParent As Long, lBreite As Long, lHoehe As Long
Dim buttonposx As Long, buttonposy As Long

GetWindowRect callingform.hWnd, rectFormP
hwndParent = GetParent(callingform.hWnd)
GetWindowRect hwndParent, rectParent

GetWindowRect frm.hWnd, rectFormC
hwndParent = GetParent(frm.hWnd)
If hwndParent <> Application.hWndAccessApp Then
GetWindowRect hwndParent, rectParent
rectFormC.Left = rectFormC.Left - rectParent.Left
rectFormC.Top = rectFormC.Top - rectParent.Top
rectFormC.Right = rectFormC.Right - rectParent.Left
rectFormC.Bottom = rectFormC.Bottom - rectParent.Top
End If

lBreite = rectFormC.Right - rectFormC.Left
lHoehe = rectFormC.Bottom - rectFormC.Top

buttonposx = ((rectFormP.Right - rectFormP.Left) * dpbtn.Left) /
callingform.WindowWidth
buttonposy = ((rectFormP.Bottom - rectFormP.Top) * (dpbtn.Top +
dpbtn.Height)) / callingform.WindowHeight

If rectFormP.Left + buttonposx + lBreite >= rectParent.Right Then
rectFormP.Left = rectFormP.Left - ((rectFormP.Left +
buttonposx + lBreite) - rectParent.Right)
End If

If rectFormP.Top + buttonposy + lHoehe >= rectParent.Bottom Then
rectFormP.Top = rectFormP.Top - ((rectFormP.Top + buttonposy +
lHoehe) - rectParent.Bottom)
End If

If frm.BorderStyle > 0 Then
MoveWindow frm.hWnd, rectFormP.Left + CLng(buttonleft / 56.7)
+ 220, rectFormP.Top + CLng(buttontop / 56.7) + 90, lBreite, lHoehe,
True
Else
MoveWindow frm.hWnd, rectFormP.Left + CLng(buttonleft / 56.7)
+ 220, rectFormP.Top + CLng(buttontop / 56.7) + 90, lBreite, lHoehe,
True
End If
End Sub
 

Lesen sie die antworten

#1 Jens Schilling
11/05/2009 - 14:02 | Warnen spam
Hallo, Andreas

Andreas Vogt wrote:


ich möchte ein Popup-Form relativ zu einem Button eines anderen
(Popup-)Forms positionieren.



Das gab' doch was von Stephen Lebans:

http://www.lebans.com/openform.htm

Schau mal, ob Du damit was anfangen kannst.

Gruss
Jens

Ähnliche fragen