Modules |
5.57 API - Riposizionare una maschera centrandola nella MDI/Screen |
Alessandro Baraldi |
Non sempre l'Autocenter centra in modo corretto una maschera. In realtà non è la funzione che sbaglia, quanto l'insieme della gestione grafica degli oggetti (menù, maschere Popup ecc...) Questa funzione permette di ottimizzare la centratura di una maschera. La funzione tiene conto del fatto che la maschera da centrare potrebbe essere popup, pertanto la centratura non verrà fatta rispetto alla MDI di Access, ma rispetto allo Screen. Per utilizzare questa funzionalità memorizzare il codice che segue in un modulo del database e per richiamare la funzione da un punto qualsiasi del modulo di classe della maschera basterà eseguire la seguente riga di codice VBA: Center Me 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 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 Private Declare Function GetDesktopWindow _ Lib "user32" () As Long 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 Public Sub Center(frm As Form) ' Centra la Maschera nell'Area della MDI parent(Access) ' Se la Form č Popup allora il centraggio avviene ' rispetto all'area dello schermo Dim hWndParent As Long Dim rctParent As RECT Dim rct As RECT Dim intWidth As Integer Dim intHeight As Integer Dim intParentWidth As Integer Dim intParentHeight As Integer On Error GoTo HandleErrors ' Recupera l'Handle della Finestra MDI. hWndParent = GetParent(frm.hWnd) ' Recupera le coordinate della Form. Call GetWindowRect(frm.hWnd, rct) ' Se la Form non č MDI allora hwndParent<>0 e coinciderą ' con l'Handle dell'applicazione, altrimenti la Form č ' Popup. If hWndParent <> Application.hWndAccessApp Then Call GetWindowRect(hWndParent, rctParent) Else ' Get the desktop coordinates. Call GetWindowRect(GetDesktopWindow(), rctParent) End If ' Calcola width/height della Parent (indifferentemente ' che sia Access MDI, oppure lo schermo(se Popup). With rctParent intParentWidth = .Right - .Left intParentHeight = .Bottom - .Top End With ' Calcola width della Form, e le nuove coordinate ' relative alla Parent. With rct intWidth = .Right - .Left intHeight = .Bottom - .Top .Left = (intParentWidth - intWidth) \ 2 .Top = (intParentHeight - intHeight) \ 2 End With ' Sposta la Form nella nuova posizione. Call MoveWindow(frm.hWnd, rct.Left, rct.Top, _ intWidth, intHeight, bRepaint:=True) ExitHere: Exit Sub HandleErrors: Select Case Err.Number Case Else Err.Raise Err.Number, Err.Source, _ Err.Description, Err.HelpFile, Err.HelpContext End Select End Sub |