Dessiner un focus

Résolu
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007 - 5 avril 2006 à 15:04
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?

7 réponses

Schlangan Messages postés 47 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 11 décembre 2007
5 avril 2006 à 15:14
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
Schlangan Messages postés 47 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 11 décembre 2007
5 avril 2006 à 15:12
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
0
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
6 avril 2006 à 15:07
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.
0
Schlangan Messages postés 47 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 11 décembre 2007
6 avril 2006 à 15:14
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 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
10 avril 2006 à 14:47
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?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 avril 2006 à 14:53
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
0
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
Du hook?

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

Merci Renfield, je vais etudier ta solution.
0
Rejoignez-nous