Dessiner un focus [Résolu]

Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
- - Dernière réponse : Silmon
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
- 12 avril 2006 à 14:12
Je cherche le moyen de dessiner un focus (avec ou sans DrawFocusRect) dans un control, par exemple un bouton, une FlexGrid.

QQ a une idée SVP?
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
47
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
11 décembre 2007
3
Merci
Une petite correction :
Ce n'est pas DrawFocusRect(GetDC(Command1.hwnd), cadre), mais :

DrawFocusRect GetDC(Command1.hwnd), cadre

C'est parce que je n'ai pas placé de variables pour recevoir la donnée indiquant si la fonction a réussi ou non. Et de ce fait, je ne dois pas mettre de parenthèses.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Messages postés
47
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
11 décembre 2007
0
Merci
Bonjour, Silmon.

Pour un bouton de commande, c'est assez simple, il suffit de lui donner le focus.
Par Exemple : Command1.SetFocus

Sinon, il faut obtenir le 'hDC' de ton contrôle pour utiliser DrawFocusRect.
Si ton contrôle a une propriété hWnd, utilises la fonction API GetDC, pour obtenir le hDC, et sers-toi de cet identificateur dans DrawFocusRect.

Exemple :
Dim cadre As RECT
With cadre
.Left = 5
.Top = 5
.Right = Command1.Width - 5
.Bottom = Command1.Height - 5
End With
DrawFocusRect(GetDC(Command1.hwnd), cadre)

Il faut bien sûr déclarer les deux fonction API et le type RECT.
Note : Ce code est pour Visual Basic 6.0
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
0
Merci
Merci Schlangan!

ce qui me manquait c'etait le GetDC(monObject.hwnd)
Ça marche super!

Mais t'as une idée pour le probleme de rafraichissement?
Si mon object etait une forme je placerais l'instruction dans le repaint,
mais lá... y a pas.

En fait mon idée est dessiner un focus dans une celule de ma grid
alors qu'elle a la propriété SelectionMode a FlexSelectionbyRow.
Messages postés
47
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
11 décembre 2007
0
Merci
Heu... J'ai peut être unse solution, un peu tordue...

Aparemment les contrôles comme les CommandButton possèdent un rafraîchissement automatique après qu'ils aient été masqués. Dans ce cas, essaie de faire passer un autre contrôle au-dessus du contrôle où tu as tracé le focus, et peut être qu'une fois que le contrôle qui était au-dessus ait été enlevé, le rafraîchissement aura été effectué.

Mais, rien n'est sûr du tout, mais comme je dis toujours, qui ne tente rien n'a rien !
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
0
Merci
Disons que le probleme est que justement quand le controle se redessine,
le framefocus disparait.

L'idée serait donc de capturer l'event genre 'Repaint' du control et d'y placer l'instruction de dessiner le focus.

Dans une forme c'est facil, il y a l'event Paint.
Mais comment faire pour les autres controles?
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
faut SubClasser ton contrôle, et intercepter le message WM_Paint...

http://www.vbfrance.com/codes/DLL-SUBCLASSER-RAPIDEMENT-DANS-VOS-APPLI_19625.aspx

Renfield
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
0
Merci
Du hook?

Je m'en doutais, mais je ne voulais pas en arriver jusqu'à lá.

Merci Renfield, je vais etudier ta solution.