Appliquer le look office2000 à un contrôle

Contenu du snippet

Office 2000 propose un nouveau look pour ses contrôles. Les contours 3D sont plus affinés.
Voici comment faire (à coller dans un module):

Source / Exemple :


Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private 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

'Déclaration des constantes
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_CLIENTEDGE = &H200
Private Const WS_EX_STATICEDGE = &H20000
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOOWNERZORDER = &H200
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4

Public Function ThinBorder(ByVal lhWnd As Long, ByVal bState As Boolean)
    
    Dim rtnVal As Long
    
    ' Récupère le style actuel
    rtnVal = GetWindowLong(lhWnd, GWL_EXSTYLE)
    
    ' Crée un nouveau style selon bState
    If Not (bState) Then
    'Enlève le look Office 2000
    rtnVal = rtnVal Or WS_EX_CLIENTEDGE And Not WS_EX_STATICEDGE
    Else
    ' Crée le style Office 2000
    rtnVal = rtnVal Or WS_EX_STATICEDGE And Not WS_EX_CLIENTEDGE
    End If
    
    ' Applique la modification
    SetWindowLong lhWnd, GWL_EXSTYLE, rtnVal
    SetWindowPos lhWnd, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or _
    SWP_NOOWNERZORDER Or SWP_NOZORDER Or SWP_FRAMECHANGED

End Function

Public Sub OfficeThinBorder(ByVal lhWnd As Long, ByVal bState As Boolean)
    
    'Crée un bord de composants au style Office 2000
    'Mettre BorderStyle à 0 du contrôle pour voir de l'effet...
    'Exemple :
    'OfficeThinBorder Text1.Hwnd, True '<= Applique le Style Office 2000
    'OfficeThinBorder Text1.Hwnd, False '<= Enlève le Style Office 2000
    ThinBorder lhWnd, bState
    
End Sub

Conclusion :


Il n'est pas possible d'attribuer ce style à tous les contrôles car ceux-ci ne possèdent pas la propriété BorderStyle (qu'il faut impérativement mettre à zéro)... Je ne 'ai pas encore trouvé la façon de le faire via API... Su qqun à une idée.

A voir également

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.