CISA FotoGallery

Statistiche

Tot. visite contenuti : 928006
Home Articoli tecnici API Centrare una Form

Centrare una Form

Riposizione la Form CENTRANDOLA nella MDI/Screen

Non sempre l'AUTOCENTER centra in modo corretto una Form. In realtà non è la funzione che sbaglia, quanto l'insieme della ' gestione grafica degli oggetti(menù, Form Popup ecc...)
Questa funzione permette di ottimizzare la centratura.

La funzione tiene conto del fatto che la Form potrebbe essere POPUP pertanto la centratura non verrà fatta rispetto alla MDI di Access ma allo Screen.

Mettere il seguente codice in un Modulo per chiamare la funzione da qualsiasi punto all'interno della Maschera basterà:

Center Me

oppure

Call 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


Alessandro Baraldi