Appliquer le look office2000 à un contrôle

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 551 fois - Téléchargée 58 fois

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

Ajouter un commentaire Commentaires
Messages postés
43
Date d'inscription
lundi 31 décembre 2001
Statut
Membre
Dernière intervention
5 février 2005

La duplication des informations est un mal nécéssaire. elle permet dans ce cadre de montrer ques les français savent aussi bien trouver des informations ques les americains
Messages postés
34
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
29 novembre 2005

Classique, on le retrouve partout....
A en croire ce qui est écrit, ce code n'est pas de toi, mais merci de le diffuser sur ce site que je découvre.
Salut,
Tu va aussi sur le site de Microsoft (trucform) pour piqué l'astuce de quelqu'un d'autre en supprimmant les commentaires !

@++

(ceci dit ce n'est pas grave)

Comment je fais pour trouver...

Tu piques à droite et à gauche, tu testes, tu essaye de comprendre, tu adaptes le code, tu découvres de nouvelles possibilités. Et puis le net, c'est une mine d'or pour découvrir les API...

A+
Néo.balastik
Afficher les 6 commentaires

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.