CentreCommonDialog



Option Explicit
Private Sub Command1_Click()
PosizionaDLG 100, 50
End Sub

'Nel modulo bas metti invece il seguente codice:

Option Explicit
'----- dichiarazione per centrare i common dialog

Type CWPSTRUCT
lParam As Long
WParam As Long
Message As Long
hwnd As Long
End Type
'Costanti per OnTop

Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_SHOWWINDOW = &H40
Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Public Const WH_CALLWNDPROC& = 4
Public Const WH_CALLWNDPROCRET& = 12
Public Const WH_CBT& = 5
Public Const WH_DEBUG& = 9
Public Const WH_FOREGROUNDIDLE& = 11
Public Const WH_GETMESSAGE& = 3
Public Const WH_HARDWARE& = 8
Public Const WH_JOURNALPLAYBACK& = 1
Public Const WH_JOURNALRECORD& = 0
Public Const WH_KEYBOARD& = 2
Public Const WH_MAX& = 11
Public Const WH_MIN& = (-1)
Public Const WH_MOUSE& = 7
Public Const WH_MSGFILTER& = (-1)
Public Const WH_SHELL& = 10
Public Const WH_SYSMSGFILTER& = 6
Declare Function SetWindowsHookEx Lib "user32" Alias _
"SetWindowsHookExA" (ByVal idhook&, ByVal lpfn&, ByVal hmod&, _
ByVal dwthreadid&) As Long
Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Declare Function GetClassName Lib "user32" Alias _
"GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName _
As String, ByVal nMaxCount As Long) As Long
Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X _
As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long
' variabili per PosizionaDLG

Dim PosHook&, PosX&, PosY&
Function PosProc(ByVal nCode&, ByVal WParam&, Inf As CWPSTRUCT) As Long
Dim S As String * 7
If Inf.Message <> 1 Then Exit Function
GetClassName Inf.hwnd, S, 7
If Left(S, 6) = "#32770" Then
SetWindowPos Inf.hwnd, 0, PosX, PosY, 0, 0, 1
UnhookWindowsHookEx PosHook
End If
End Function

Sub PosizionaDLG(X&, Y&)
PosX = X& ' 200 'Screen.Width / 2
PosY = Y& '200 'Screen.Height / 2
PosHook = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf _
PosProc, 0, App.ThreadID)
Form1.cd.ShowOpen
End Sub

Sub OnTop(Controllo As Object, Stato As Boolean)
If Stato = True Then
Call SetWindowPos(Controllo.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
Else
Call SetWindowPos(Controllo.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
End If
End Sub


(centrecommondialog.html)- by Paolo Puglisi - Modifica del 25/3/2019