Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

focus

19 réponses
Avatar
michael
Bonjour, j'ai du mal a programmer des focus... sur des bouton command, ou
checkbox, option box etc... Quelle est la notation à utiliser?? quelqu'un
aurait t'il un exemple simple a me donner???

Y a t'il aussi dans le meme ordre d'idée de placer le curseur de la souris
sur l'objet qui a le focus (essentiellement sur le bouton commande)???
merci d'avance mais c'est un détail qui me gache mon programme...

9 réponses

1 2
Avatar
LE TROLL
Eh ben:

objet.TanStop = True
objet.TabIndex = 0

Et ce sera le premier de ta feuille , sans rien
n'avoir à mettre...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"michael" a
écrit dans le message de news:

| Moi ce que je veux c'est uniquement placer le
curseur de la souris sur le
| bouton 'command1' avec dessus ecris 'OK' qui
n'est qu'une form pour confirmé
| un choix, je ne crois pas que se soit si rare
que ca?
| merci
|
| "Jacques93" a écrit :
|
| > Bonjour jean-marc, michael, LE TROLL, et tout
le monde,
| > jean-marc a écrit :
| > > "michael"
wrote in
message
| > >
news:
| > >> Bonjour, j'ai du mal a programmer des
focus... sur des bouton command, ou
| > >> checkbox, option box etc... Quelle est la
notation à utiliser?? quelqu'un
| > >> aurait t'il un exemple simple a me
donner???
| > >>
| > >> Y a t'il aussi dans le meme ordre d'idée de
placer le curseur de la souris
| > >> sur l'objet qui a le focus (essentiellement
sur le bouton commande)???
| > >
| > > Hello,
| > >
| > > Comme jacques l'a signalé, même si c'est
techniquement faisable,
| > > ce n'est certainement pas une bonne idée de
déplacer la souris.
| > > C'est contre toutes les rêgles de design
graphique, donc sauf à
| > > avoir une vraie bonne raison (accès à des
personnes porteuses
| > > d'un handicap ou autre contraintes), c'est
vraiment déconseillé.
| > >
| >
| > Je proposerai une autre raison, tout à fait
valable et légitime : avoir
| > l'humour taquin.
| > D'ailleurs chez MS ils n'en manque pas...
Ayant oublié de signaler le
| > lien de l'API mouse_event chez MSDN, et
n'ayant pas expliqué le pourquoi
| > du comment du calcul des coordonnées, tout est
ici :
| >
| >
http://msdn2.microsoft.com/en-us/library/ms646260(VS.85).aspx
| >
| > l'unité de déplacement, et de positionnement
de la souris se fais en ...
| > MICKEY !!!
| >
| > Walt Disney touche t-il des royalties a chaque
déplacement de souris ?
| >
| > :-D
| >
| > --
| > Cordialement,
| >
| > Jacques.
| >
Avatar
michael
Désolé mais je comprend pas trop... je dois mettre çà dans l'évenement Load
ou Activate?
Ca me met le curseur de ma souris sur le bouton que je veux?? ou ca met le
focus?

"LE TROLL" a écrit :

Eh ben:

objet.TanStop = True
objet.TabIndex = 0

Et ce sera le premier de ta feuille , sans rien
n'avoir à mettre...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"michael" a
écrit dans le message de news:

| Moi ce que je veux c'est uniquement placer le
curseur de la souris sur le
| bouton 'command1' avec dessus ecris 'OK' qui
n'est qu'une form pour confirmé
| un choix, je ne crois pas que se soit si rare
que ca?
| merci
|
| "Jacques93" a écrit :
|
| > Bonjour jean-marc, michael, LE TROLL, et tout
le monde,
| > jean-marc a écrit :
| > > "michael"
wrote in
message
| > >
news:
| > >> Bonjour, j'ai du mal a programmer des
focus... sur des bouton command, ou
| > >> checkbox, option box etc... Quelle est la
notation à utiliser?? quelqu'un
| > >> aurait t'il un exemple simple a me
donner???
| > >>
| > >> Y a t'il aussi dans le meme ordre d'idée de
placer le curseur de la souris
| > >> sur l'objet qui a le focus (essentiellement
sur le bouton commande)???
| > >
| > > Hello,
| > >
| > > Comme jacques l'a signalé, même si c'est
techniquement faisable,
| > > ce n'est certainement pas une bonne idée de
déplacer la souris.
| > > C'est contre toutes les rêgles de design
graphique, donc sauf à
| > > avoir une vraie bonne raison (accès à des
personnes porteuses
| > > d'un handicap ou autre contraintes), c'est
vraiment déconseillé.
| > >
| >
| > Je proposerai une autre raison, tout à fait
valable et légitime : avoir
| > l'humour taquin.
| > D'ailleurs chez MS ils n'en manque pas...
Ayant oublié de signaler le
| > lien de l'API mouse_event chez MSDN, et
n'ayant pas expliqué le pourquoi
| > du comment du calcul des coordonnées, tout est
ici :
| >
| >
http://msdn2.microsoft.com/en-us/library/ms646260(VS.85).aspx
| >
| > l'unité de déplacement, et de positionnement
de la souris se fais en ...
| > MICKEY !!!
| >
| > Walt Disney touche t-il des royalties a chaque
déplacement de souris ?
| >
| > :-D
| >
| > --
| > Cordialement,
| >
| > Jacques.
| >





Avatar
michael
Pour cette histoire d'activate, comment cet évenement se produit t'il?? à
l'ouverture??

"jean-marc" a écrit :


"michael" wrote in message
news:
> Ok j'ai vu qu'il fallait que je mette ca dans l'evenement activate de la
> form...
> autant pour moi...

Hello,

ne pas oublier que l'évènement form_activate peut être appellé
plusieurs fois et pas seulement une seule fois à l'ouverture du programme.

Si ta forme en lance une autre par exemple, Activate sera déclenché après
la fermeture de la seconde.

Pour se prémunir d'éventuels effets non désirés et garantir que l'exécution
ne se fera qu'une fois et une seule, on a en général recours à une
variable statique, qu'on utilise comme ceci:

Private Sub Form_Activate()
Static b_done As Boolean

If Not b_done Then
'
' Mettre ici les setfocus
'
b_done = True
End If

End Sub

Ainsi, on a la garantie que le code ne sera exécuté réellement qu'une fois.

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
michael
Si je veux que la souris se trouve sur le command1 dans ma forme à son
ouverture à quoi devrait ressembler le code?? car il n'y a alors aucun
evenement de click sur la souris, mais juste l'ouverture de la forme...
merci encore à tous!!

"Jacques93" a écrit :

Bonjour michael,
michael a écrit :
> Bonjour, j'ai du mal a programmer des focus... sur des bouton command, ou
> checkbox, option box etc... Quelle est la notation à utiliser?? quelqu'un
> aurait t'il un exemple simple a me donner???
>
> Y a t'il aussi dans le meme ordre d'idée de placer le curseur de la souris
> sur l'objet qui a le focus (essentiellement sur le bouton commande)???
> merci d'avance mais c'est un détail qui me gache mon programme...

Pour donner le focus à un contrôle utilisant le clavier (Textbox, par
exemple), la méthode SetFocus est normalement suffisante), les curseurs
clavier et souris étant indépendants.

Par contre si tu veux positionner le curseur de la souris à un endroit
précis, un bouton de commande par exemple, tu peux adapter ceci, où un
click sur le bouton 1, positionnera le pointeur de la souris sur le
bouton 2 :

Private Declare Sub mouse_event Lib "User32" (ByVal dwFlags As Long, _
ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, _
ByVal dwExtraInfo As Long)

Private Const MOUSEEVENTF_ABSOLUTE = &H8000
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_MIDDLEDO = &H20
Private Const MOUSEEVENTF_MIDDLEUP = &H40
Private Const MOUSEEVENTF_MOVE = &H1
Private Const MOUSEEVENTF_RIGHTDOW = &H8
Private Const MOUSEEVENTF_RIGHTUP = &H10

Private Sub Command1_Click()
mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, _
(Me.Left + Me.Command2.Left + Me.Command2.Width / 2) / _
Screen.Width * 65535, _
(Me.Top + Me.Command2.Top + Me.Command2.Width / 2) / _
Screen.Height * 65535, _
0&, 0&
End Sub


Mais ce type de fonctionnement est parfois (souvent en ce qui me
concerne), déconcertant pour l'utilisateur : on ne sait plus où est
passée la souris !!! Ou qui l'a fait bouger ? ;-)

--
Cordialement,

Jacques.



Avatar
jean-marc
"michael" wrote in message
news:
Pour cette histoire d'activate, comment cet évenement se produit t'il?? à
l'ouverture??



Hello,

Voir à ce sujet la documentation Microsoft sur MSDN:
http://msdn2.microsoft.com/en-us/library/aa445402(VS.60).aspx

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jacques93
michael a écrit :
Désolé mais je comprend pas trop... je dois mettre çà dans l'évenement Load
ou Activate?
Ca me met le curseur de ma souris sur le bouton que je veux?? ou ca met le
focus?

"LE TROLL" a écrit :

Eh ben:

objet.TanStop = True
objet.TabIndex = 0

Et ce sera le premier de ta feuille , sans rien
n'avoir à mettre...






Dans l'un ou l'autre, ou les deux, ça dépend de ce que tu veux obtenir.
Le code du TROLL affecte bien le focus à l'objet concerné, mais le Focus
clavier uniquement.Tu peux aussi affecter ces propriétés dans l'IDE.

Si tu tiens réellement à positionner la souris, tu places le code que je
t'ai indiqué dans Form_Load ou Form_Activate.

Le truc à éviter est d'utiliser la méthode SetFocus dans Form_Load, ce
qui génère une erreur 5 (Argument ou appel de procédure incorrecte).
L'événement Load correspondant au chargement d la feuille, on ne peut
donner le focus à un de ses contrôles, car il ne sont pas encore visibles.

--
Cordialement,

Jacques.
Avatar
LE TROLL
Et précision, ni à des contrôles qui ne sont pas
prévus pour le recevoir, par exemple un label...

*

Je vais m'expliquer, car tu as eu, en fait, trop
d'informations sur différentes possibilités
d'arriver au même résultat :o)

Commençons par le commencement.
Une feuille doit être chargée (load)
Elle peut d'ailleurs être utilisée ainsi, sans
jamais être vu par l'utilisateur. Par exemple,
moi, pour un jeu de tarot, dans ma form2, je mets
toutes les photos des cartes (j'embarque, je
préfère), mais jamais je ne mets la form2 à Show,
non, je vais simplement puiser grâce au load lancé
au début du programme, et fermé à la fin. Les
cartes voulues seront ainsi choisies sans que
personne ne le voit. En plus, ça charge plus
rapidement les objets et leur éventuel contenu.
Ceci est donc un exemple d'utilisation d'un load,
d'une feuille qui ne sera jamais Show, elle reste
Hide (le contraire de Show).

Après le Load donc, on appelle le Show, si on veut
montrer la feuille.
Mais la feuille peut directement être appelée
Show, ce qui de facto, la charge préalablement
(Load)

Résumé:
- Seulement load, on peut dialoguer avec la
feuille, mais pas la voir.
- Load, puis, cuisine sur la feuille, puis on la
voit Show
- Show, directement, on n'a rien faire
préalablement sur la feuille avant de la voir,
donc, on la voit.

Alors, la feuille appelée, va passer par son load
personnel, chaque feuille de ce type en ayant.
En effet, tu peux gérer ce qui ne doit pas être vu
dans une feuille, soit, depuis la forme appelante,
avant de la rendre la forme appelée visible, soit
directement, depuis la forme appelée, tout dépend
de la structure des variables et du code...

Exemple, la form1 doit appeler la form2, mais au
préalable, sans que ça se voit, mettre 1000
valeurs dans la list1 de la form2, soit:

- de form1
load form2
for i = 1 to 1000
form2.list1.additem = i
next i
form2.show

Mais tu peux faire aussi:
- depuis la form1
show form2

- Et, depuis la form 2
sub load()
for i = 1 to 1000
form2.list1.additem = i
next i
end sub

Etant entendu, que la variable i est déclarée en
forme 2 (dim i as long), ou alors qu'elle est
déclarée en form1 (public i as long), et qu'en
form2, tu reprendra le i de la sorte: (form1.i)
C'est pourquoi je disais tout à l'heure, que ça
dépend du code et des variables...

Donc, chaque form ayant dans ce cas, un load qui
gère la feuille, et certains objets, puis un
Activate, qui gère la visibilité des objets et
leur accessibilité...

Toi, quand tu mettais ton setfocus dans ton load,
ça ne marchait pas, car ça portait sur un objet
non encore exploitable visuellement, par rapport à
son focus. Si ton objet avait été une liste, comme
susdit, à ce stade, tu aurais pu la remplir, mais
pas lui donner le focus, car elle n'est pas encore
gérable visuellement, et il faut que ça devienne
visuelle pour donner le focus (ce qui est le but,
en somme...). Bien évidement, si ça avait été, par
exemple, un bouton, au niveau du Load, tu n'aurais
pas pu, ni lui donner le focus, ni lui passer un
contenu, par contre, tu aurais pu le
redimensionner...

Et, c'est pourquoi, il faut mettre dans l'Activate
le setfocus, car c'est à ce moment que la feuille
affiche ses objets et les rend visuels, si ceci
est voulu.
Notons que, le load et l'activate, comme l'unLoad,
sont présents, ipso facto, même s'ils ne sont pas
visibles. Je veux par là, que tu peux avoir une
feuille sans procédure load, activate, unload
écrite en code, mais que ta feuille sera quand
même gérée comme si ces procédure étaient écrites
(elles le sont, mais cachées, quand on n'a rien à
mettre dedans), l'évènement se produisant
néanmoins.

Tu demandais aussi, si tu devais mettre dans le
load, ou l'activate, finissant par comprendre que
c'était l'activate, concernant le set focus. Oui,
mais tu peux aussi le mettre ailleurs si tu n'en a
pas besoin tout de suite. En effet, admettons que
tu aies des objets cachés au lancement, et qu'un
bouton va les faire apparaître, et qu'à ce moment,
donc (dans la procédure du bouton qui fait
apparaître), tu veux donner le focus à un de ces
objets nouveaux, ben, c'est à ce stade que tu vas
octroyer le setfocus au nouvel objet, ici, parce
qu'avant, il n'était pas visible, et dans d'autres
cas, ce sera parce que tu n'as pas d'utilité
immédiate à donner le focus forcé (setfocus). Ça
dépend de tes besoins.
En conclusion, un setfocus, ne se donne pas dans
le load, mais peut se donner ailleurs que dans
l'activate, du moment que ton objet existe, il
peut recevoir le focus, et a l'autorisation de le
recevoir.

Exemple, un procédure de saisie de texte, validé
(text1 + command1)
sub command1_click()
if text1 <> "dix" then
msgbox "erreur de saisie, nombre 'dix' seul
accepté, remédier... ", vbexclamation
text1.setfocus
endif
end sub


Ce qui nous amène à l'octroie de focus au
démarrage, en effet: dans ta fenêtre de propriétés
(F4). Au regard de chaque objet pouvant recevoir
le focus, (en cliquant sur l'objet), du as deux
propriété concernant ce focus:
- TabStop (true par défaut), il reçoit ipso facto
le focus, peut être mis à false, afin de ne pas
recevoir le focus. Ainsi, ton objet, pour avoir le
focus forcé (setFocus), doit avoir et la
possibilité de le recevoir, et que son TabStop
soit à = True.
- TabIndex, délivré automatiquement selon l'ordre
de création, peut être modifié. Cet élément qui
part de 0, est un valeur qui indique l'ordre des
tabulation, de 0 à n...

C'est pourquoi, je te disais, que si tu veux le
focus sur ton objet, il te suffit de mettre pour
ce dernier: tabStop=true + tabIndex = 0.
D'ailleurs, ce tabIndex te permet tu t'en doutes
de sauter des objet, ou d'avoir un ordre différent
de celui des disposition visuelles. Par exemple,
si tu as des objets a, b et c, tu peux
respectivement en tab index mettre: 0, 2, 1, ce
qui fera qu'avec la touche tab: a, c, b.

Tu peux aussi le mettre dans le code, sur trois
boutons par exemple (command):
Sub Form_Load()
Command1.TabStop = False
Command3.TabIndex = 0
End Sub

Ce code, peut d'ailleurs être un contre-ordre à ce
que tu aurais prévu dans la fenêtre de propriétés
auparavant.

Pour ceci, à la visualisation, le bouton3 aura le
focus, et le bouton1 n'aura jamais le focus, sauf
si tu cliques dessus, il répondra évidemment. De
même, en faisant de la sorte, si tu lui interdis,
au 1, d'avoir le focus, lui donner un focus forcé,
sans rien changer: command1.setFocus, serait une
erreur, puisque non prévu pour le recevoir.
Certains objets ne peuvent recevoir certaines
propriétés par le code, tu auras une erreur en
tant utile...

Bon, je laisse de côté les création dynamique
d'objet, car là, ça complique, surtout si c'est un
mélange avec des objets physiques (il s'agit
d'objet non mis sur la feuilles, mais déclaré par
le code, qui vous être ensuite sur la feuille).

Je crois que tu devrais te prendre un livre de VB
de base, pour initier à tous ces détails, ou les
infos qu'il y a sur le net.

Bon courage.

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jacques93" a écrit dans le
message de news:
%
| michael a écrit :
| > Désolé mais je comprend pas trop... je dois
mettre çà dans l'évenement Load
| > ou Activate?
| > Ca me met le curseur de ma souris sur le
bouton que je veux?? ou ca met le
| > focus?
| >
| > "LE TROLL" a écrit :
| >
| >> Eh ben:
| >>
| >> objet.TanStop = True
| >> objet.TabIndex = 0
| >>
| >> Et ce sera le premier de ta feuille , sans
rien
| >> n'avoir à mettre...
| >>
|
| Dans l'un ou l'autre, ou les deux, ça dépend de
ce que tu veux obtenir.
| Le code du TROLL affecte bien le focus à l'objet
concerné, mais le Focus
| clavier uniquement.Tu peux aussi affecter ces
propriétés dans l'IDE.
|
| Si tu tiens réellement à positionner la souris,
tu places le code que je
| t'ai indiqué dans Form_Load ou Form_Activate.
|
| Le truc à éviter est d'utiliser la méthode
SetFocus dans Form_Load, ce
| qui génère une erreur 5 (Argument ou appel de
procédure incorrecte).
| L'événement Load correspondant au chargement d
la feuille, on ne peut
| donner le focus à un de ses contrôles, car il ne
sont pas encore visibles.
|
| --
| Cordialement,
|
| Jacques.
Avatar
jean-marc
"LE TROLL" <le wrote in message
news:

Exemple, un procédure de saisie de texte, validé
(text1 + command1)



sub command1_click()
if text1 <> "dix" then
msgbox "erreur de saisie, nombre 'dix' seul
accepté, remédier... ", vbexclamation
text1.setfocus
endif
end sub



Hello,

j'en profite pour indiquer qu'il est aussi possible
de faire la même chose de façon souple
et non hard-codée :


Option Explicit

Const CHK_VAL As String = "dix,vingt,trente"

Function ValideSaisie(ByVal s As String, _
ByVal CheckValues As String) As Boolean

Dim t() As String
Dim i As Long

t = Split(CheckValues, ",")
For i = 0 To UBound(t())
If s = Trim$(t(i)) Then
ValideSaisie = True
Exit For
End If
Next i

End Function

Sub Command1_Click()

Dim txtVal As String
Dim ret As Boolean

txtVal = Text1.Text
ret = ValideSaisie(txtVal, CHK_VAL)

If Not ret Then
MsgBox "Erreur de saisie. Valeurs autorisées : " & CHK_VAL,
vbExclamation, "Erreur Saisie"
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
Text1.SetFocus
Exit Sub
Else
MsgBox "Saisie correcte"
End If
' suite éventuelle du traitement

End Sub

Il suffit alors de modifier CHK_VAL pour valider une autre expression.
On peut aussi créer plusieurs constantes en fonction de ce qui
doit être vérifié et il suffit alors d'appeler
la fonction ValideSaisie avec la constante idoine, tout le
reste restant égal par ailleurs.

Le programme devient lisible et aisé à maintenir.

Cordialement;


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
michael
bon j'ai enfin réussi à me connecter sur le newsgroup après pas mal de sueur
passé sur ce site pour arriver a poser une question!
je tenait a remercier tous ceux qui on contribuer aux réponses, j'arrive
pratiquement à faire tous ce que je veux, seule quelque petit problême à
certains endroits pour metre le curseur ou je veux... mais ca marche à
d'autre, donc je suppose que je trouverais bien le petit détail qui me manque
encore...
bonne soirée a tous

"LE TROLL" wrote:

Bonjour,

objet.SetFocus

Pour la souris, (peut être d'autre méthodes),
exemple

objet.SetFocus
pointeur_colonne = objet_focus.Left + x_unités
pointeur_ligne = objet_focus.Top + x_unités

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"michael" a
écrit dans le message de news:

| Bonjour, j'ai du mal a programmer des focus...
sur des bouton command, ou
| checkbox, option box etc... Quelle est la
notation à utiliser?? quelqu'un
| aurait t'il un exemple simple a me donner???
|
| Y a t'il aussi dans le meme ordre d'idée de
placer le curseur de la souris
| sur l'objet qui a le focus (essentiellement sur
le bouton commande)???
| merci d'avance mais c'est un détail qui me gache
mon programme...





1 2