OVH Cloud OVH Cloud

"Lire" la couleur de fond de la barre de menu

4 réponses
Avatar
Christian HUBERT-HUGOUD- Xtrem7
J'utilise du code pour gérer les menus et y ajouter des icônes. Pour cela,
on s'adresse au système pour trouver la couleur de fond de la barre de menu.

Sous 98 cela fonctionne parfaitement.

Sous XP c'est la galère :

Suivant le mode d'affichage (style XP ou un autre style), les retours sont
différents, et faux. De plus, cela fonctionne en magouillant chez certains,
pas chez d'autres, avec des configurations d'affichage semblables.

Bref, je voudrais "lire" (en VB je le ferais avec point(x, y)) la couleur de
la barre de menu. C'est à dire allez dans la zone non-client de la fenêtre
et pouvoir utiliser un truc similaire à point(x, y)

Une idée ?

Christian

4 réponses

Avatar
Pierre Alexis [MVP]
Salut Christian,

Tu as écrit :

J'utilise du code pour gérer les menus et y ajouter des icônes. Pour cela,
on s'adresse au système pour trouver la couleur de fond de la barre de menu.

Sous 98 cela fonctionne parfaitement.

Sous XP c'est la galère :

Suivant le mode d'affichage (style XP ou un autre style), les retours sont
différents, et faux. De plus, cela fonctionne en magouillant chez certains,
pas chez d'autres, avec des configurations d'affichage semblables.

Bref, je voudrais "lire" (en VB je le ferais avec point(x, y)) la couleur de
la barre de menu. C'est à dire allez dans la zone non-client de la fenêtre
et pouvoir utiliser un truc similaire à point(x, y)

Une idée ?



Facile ! :-) Tu peux utiliser les constantes de couleurs définies dans VB :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vb98/html/vbidxColorConstants.asp

Dans ton cas :

vbActiveTitleBar : &H80000002 - Color of the title bar for the active window

--
Pierre ALEXIS - MVP Visual Basic Classique
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/
Avatar
Christian HUBERT-HUGOUD- Xtrem7
La couleur devrait être vbMenuBar.

Mais pas sous XP ; c'est souvent sous XP la couleur de face du bouton. Mais
pas dans tous les cas... Bref, ça ne marche pas.

Merci quand même.

"Pierre Alexis [MVP]" a écrit dans le message de
news:e0yHZ%
Salut Christian,

Tu as écrit :

> J'utilise du code pour gérer les menus et y ajouter des icônes. Pour


cela,
> on s'adresse au système pour trouver la couleur de fond de la barre de


menu.
>
> Sous 98 cela fonctionne parfaitement.
>
> Sous XP c'est la galère :
>
> Suivant le mode d'affichage (style XP ou un autre style), les retours


sont
> différents, et faux. De plus, cela fonctionne en magouillant chez


certains,
> pas chez d'autres, avec des configurations d'affichage semblables.
>
> Bref, je voudrais "lire" (en VB je le ferais avec point(x, y)) la


couleur de
> la barre de menu. C'est à dire allez dans la zone non-client de la


fenêtre
> et pouvoir utiliser un truc similaire à point(x, y)
>
> Une idée ?

Facile ! :-) Tu peux utiliser les constantes de couleurs définies dans VB


:



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vb98/html/vbidxColorConstants.asp

Dans ton cas :

vbActiveTitleBar : &H80000002 - Color of the title bar for the active


window

--
Pierre ALEXIS - MVP Visual Basic Classique
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/




Avatar
François Picalausa
Hello,

tu peux essayer par APIs:
Option Explicit

#Const WINVER = &H501 'Win XP

Private Enum COLOR
COLOR_SCROLLBAR = 0
COLOR_BACKGROUND = 1
COLOR_ACTIVECAPTION = 2
COLOR_INACTIVECAPTION = 3
COLOR_MENU = 4
COLOR_WINDOW = 5
COLOR_WINDOWFRAME = 6
COLOR_MENUTEXT = 7
COLOR_WINDOWTEXT = 8
COLOR_CAPTIONTEXT = 9
COLOR_ACTIVEBORDER = 10
COLOR_INACTIVEBORDER = 11
COLOR_APPWORKSPACE = 12
COLOR_HIGHLIGHT = 13
COLOR_HIGHLIGHTTEXT = 14
COLOR_BTNFACE = 15
COLOR_BTNSHADOW = 16
COLOR_GRAYTEXT = 17
COLOR_BTNTEXT = 18
COLOR_INACTIVECAPTIONTEXT = 19
COLOR_BTNHIGHLIGHT = 20

#If (WINVER >= &H400) Then
COLOR_3DDKSHADOW = 21
COLOR_3DLIGHT = 22
COLOR_INFOTEXT = 23
COLOR_INFOBK = 24
#End If

#If (WINVER >= &H500) Then
COLOR_HOTLIGHT = 26
COLOR_GRADIENTACTIVECAPTION = 27
COLOR_GRADIENTINACTIVECAPTION = 28
#If (WINVER >= &H501) Then
COLOR_MENUHILIGHT = 29
COLOR_MENUBAR = 30
#End If
#End If

#If (WINVER >= &H400) Then
COLOR_DESKTOP = COLOR_BACKGROUND
COLOR_3DFACE = COLOR_BTNFACE
COLOR_3DSHADOW = COLOR_BTNSHADOW
COLOR_3DHIGHLIGHT = COLOR_BTNHIGHLIGHT
COLOR_3DHILIGHT = COLOR_BTNHIGHLIGHT
COLOR_BTNHILIGHT = COLOR_BTNHIGHLIGHT
#End If
End Enum
Private Declare Function GetSysColor Lib "User32" (ByVal nIndex As Long) As
Long

Private Sub Form_Load()
Me.AutoRedraw = True

#If (WINVER >= &H501) Then
Me.Line (0, 0)-(Me.ScaleWidth / 2, Me.ScaleHeight),
GetSysColor(COLOR_MENUBAR), BF
Debug.Print Hex(GetSysColor(COLOR_MENUBAR))
#Else
Me.Line (0, 0)-(Me.ScaleWidth / 2, Me.ScaleHeight),
GetSysColor(COLOR_MENU), BF
Debug.Print Hex(GetSysColor(COLOR_MENU))
#End If

Me.Line (Me.ScaleWidth / 2, 0)-(Me.ScaleWidth, Me.ScaleHeight),
vbMenuBar, BF
Me.Line (Me.ScaleWidth / 2, 0)-(Me.ScaleWidth / 2, Me.ScaleHeight),
vbBlack
End Sub


--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"Christian HUBERT-HUGOUD- Xtrem7" a écrit
dans le message de news:ch7bjr$n5j$
La couleur devrait être vbMenuBar.

Mais pas sous XP ; c'est souvent sous XP la couleur de face du
bouton. Mais pas dans tous les cas... Bref, ça ne marche pas.



Avatar
Christian HUBERT-HUGOUD- Xtrem7
Merci je teste cela de suite...

"François Picalausa" a écrit dans le message de
news:%
Hello,

tu peux essayer par APIs:
Option Explicit

#Const WINVER = &H501 'Win XP

Private Enum COLOR
COLOR_SCROLLBAR = 0
COLOR_BACKGROUND = 1
COLOR_ACTIVECAPTION = 2
COLOR_INACTIVECAPTION = 3
COLOR_MENU = 4
COLOR_WINDOW = 5
COLOR_WINDOWFRAME = 6
COLOR_MENUTEXT = 7
COLOR_WINDOWTEXT = 8
COLOR_CAPTIONTEXT = 9
COLOR_ACTIVEBORDER = 10
COLOR_INACTIVEBORDER = 11
COLOR_APPWORKSPACE = 12
COLOR_HIGHLIGHT = 13
COLOR_HIGHLIGHTTEXT = 14
COLOR_BTNFACE = 15
COLOR_BTNSHADOW = 16
COLOR_GRAYTEXT = 17
COLOR_BTNTEXT = 18
COLOR_INACTIVECAPTIONTEXT = 19
COLOR_BTNHIGHLIGHT = 20

#If (WINVER >= &H400) Then
COLOR_3DDKSHADOW = 21
COLOR_3DLIGHT = 22
COLOR_INFOTEXT = 23
COLOR_INFOBK = 24
#End If

#If (WINVER >= &H500) Then
COLOR_HOTLIGHT = 26
COLOR_GRADIENTACTIVECAPTION = 27
COLOR_GRADIENTINACTIVECAPTION = 28
#If (WINVER >= &H501) Then
COLOR_MENUHILIGHT = 29
COLOR_MENUBAR = 30
#End If
#End If

#If (WINVER >= &H400) Then
COLOR_DESKTOP = COLOR_BACKGROUND
COLOR_3DFACE = COLOR_BTNFACE
COLOR_3DSHADOW = COLOR_BTNSHADOW
COLOR_3DHIGHLIGHT = COLOR_BTNHIGHLIGHT
COLOR_3DHILIGHT = COLOR_BTNHIGHLIGHT
COLOR_BTNHILIGHT = COLOR_BTNHIGHLIGHT
#End If
End Enum
Private Declare Function GetSysColor Lib "User32" (ByVal nIndex As Long)


As
Long

Private Sub Form_Load()
Me.AutoRedraw = True

#If (WINVER >= &H501) Then
Me.Line (0, 0)-(Me.ScaleWidth / 2, Me.ScaleHeight),
GetSysColor(COLOR_MENUBAR), BF
Debug.Print Hex(GetSysColor(COLOR_MENUBAR))
#Else
Me.Line (0, 0)-(Me.ScaleWidth / 2, Me.ScaleHeight),
GetSysColor(COLOR_MENU), BF
Debug.Print Hex(GetSysColor(COLOR_MENU))
#End If

Me.Line (Me.ScaleWidth / 2, 0)-(Me.ScaleWidth, Me.ScaleHeight),
vbMenuBar, BF
Me.Line (Me.ScaleWidth / 2, 0)-(Me.ScaleWidth / 2, Me.ScaleHeight),
vbBlack
End Sub


--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"Christian HUBERT-HUGOUD- Xtrem7" a écrit
dans le message de news:ch7bjr$n5j$
> La couleur devrait être vbMenuBar.
>
> Mais pas sous XP ; c'est souvent sous XP la couleur de face du
> bouton. Mais pas dans tous les cas... Bref, ça ne marche pas.
>