J'ai cherché sur tout le site et je n'ai pas trouvé comment il faut faire pour changer l'espace utilisable de l'écran : j'entend par cela le bureau et les dimensions des fenêtres maximisées.
Ce code me sert pour une barre d'outils qui se place à droite de l'écran, alors j'ai isolé le code et je vous ai fait une petite présentation avec des commentaires.
Source / Exemple :
Dans une form avec un bouton Command1 :
Public BLeft As Long
Public BRight As Long
Public BTop As Long
Public BBottom As Long
' Met les nouveaux paramêtres
Private Sub Form_Load()
' Toujours au premier plan
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
' Sauvegarde les dimensions actuelles pour les rétablir après
BLeft = Get_DimBureau(GDB_Left)
BRight = Get_DimBureau(GDB_Right)
BTop = Get_DimBureau(GDB_Top)
BBottom = Get_DimBureau(GDB_Bottom)
' Positionne la fenêtre à droite
Me.Top = BTop
Me.Height = BBottom - BTop
Me.Left = BRight - Me.Width
' Change les dimensions du bureau
Set_DimBureau BLeft, BTop, Me.Left, BBottom
End Sub
' Remet les anciens paramêtres
Private Sub Command1_Click()
Set_DimBureau BLeft, BTop, Screen.Width, BBottom
End
End Sub
' Dans un module :
' Pour récupérer les dimensions utilisables du bureau
Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As RECT, ByVal fuWinIni As Long) As Long
Public Const SPI_GETWORKAREA = 48
Private Const SPI_SETWORKAREA = 47
Private Const SPI_SENDCHANGE = 2
' Pour définir quelle dimension on veut récupérer
Public Const GDB_Left = 0
Public Const GDB_Top = 1
Public Const GDB_Right = 2
Public Const GDB_Bottom = 3
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
' Activer toujours la fenêtre au dessus des autres
Public 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
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
' Le rafraichissement
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const HWND_BROADCAST = 65535
Public Const WM_WININICHANGE = 26
Public Const WM_SETTINGCHANGE = 26
' Récupère les dimensions utilisables du bureau
Public Function Get_DimBureau(ByVal Cote As Long) As Long
Dim TRect As RECT
If SystemParametersInfo(SPI_GETWORKAREA, 0, TRect, 0) Then
Select Case Cote
Case GDB_Left
Get_DimBureau = TRect.Left * Screen.TwipsPerPixelX
Case GDB_Top
Get_DimBureau = TRect.Top * Screen.TwipsPerPixelY
Case GDB_Right
Get_DimBureau = TRect.Right * Screen.TwipsPerPixelX
Case GDB_Bottom
Get_DimBureau = TRect.Bottom * Screen.TwipsPerPixelY
End Select
End If
End Function
' Change les dimensions de la zone utilisable du bureau
Public Function Set_DimBureau(Left As Long, Top As Long, Right As Long, Bottom As Long)
On Error Resume Next
Dim TRect As RECT
TRect.Left = Left / Screen.TwipsPerPixelX
TRect.Top = Top / Screen.TwipsPerPixelY
TRect.Right = Right / Screen.TwipsPerPixelX
TRect.Bottom = Bottom / Screen.TwipsPerPixelY
Set_DimBureau = SystemParametersInfo(SPI_SETWORKAREA, 0, TRect, SPI_SENDCHANGE)
' Rafraichit le bureau
SendMessage HWND_BROADCAST, WM_WININICHANGE, 0, 0
SendMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
End Function
Conclusion :
Je vous ai mis un zip, c'est assez joli et chez moi ça marche nickel
Pensez bien à quitter en cliquant sur le bouton !!!!
voilà j'espère que ça vous servira !
@ +
MadMatt
Source mise à jour SP1 lol
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.