Appliquer le look office2000 à un contrôle

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 879 fois - Téléchargée 59 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
DavidT Messages postés 43 Date d'inscription lundi 31 décembre 2001 Statut Membre Dernière intervention 5 février 2005
7 sept. 2002 à 19:46
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
cs_Matt Messages postés 34 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 29 novembre 2005
10 mai 2002 à 15:18
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)
Néo.balastik
21 mai 2001 à 08:32
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

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.