Dessiner un focus [Résolu]

Signaler
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
-
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
-
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?

7 réponses

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

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.
3
Merci

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

Codes Sources 155 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

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

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

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

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
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
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

Du hook?

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

Merci Renfield, je vais etudier ta solution.