|
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 |