Gambas France BETA


Pas de compte ? Incription

Le Setfocus

Ce sujet est résolu.

1
AuteurMessages
Foromus#1 Posté le 15/12/2016 à 16:21:33

Bonjour à tous,

Sur mon projet, j'ai plusieurs pages assez semblables, et sur chacune, un bouton de sortie permet de revenir à la page d'entrée, seule page depuis laquelle je puis accéder aux autres.
J'avais remarqué que sur la page appelée, le bouton "Quitter" (Arrêter l'application) avait le focus d'emblée, et, pour peu qu'une frappe involontaire ou réflexe heurte la touche Return, et voilà le bouzin arrêté. J'ai donc opté pour mettre le focus, au départ, sur la touche "Retour", celle qui ramène à l'entrée. Ça marchait tout à fait normalement, jusqu'au 5ème formulaire, lequel refuse la contrainte ! Rien à faire, il n'en veut pas. Et seulement lui, pas les autres !
Il me semble avoir connu, dans une vie antérieure, une situation un peu ressemblante, à savoir qu'un "Setfocus", fonctionne assez mal ou pas du tout dans la première procédure, soit "Open_Form", et je pense que j'avais utilisé un timer au mini pour effectuer le manœuvre. En l 'absence d'autre solution, je pense que je vais recommencer, mais la commande en elle-même est tout de même plus simple !
Merci !
Flachy Joe#2 Posté le 15/12/2016 à 18:49:42
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut foromus,
sinon tu as la propriété Default qui est faite pour ça :
"Retourne ou définit si le bouton est un bouton par défaut ou non. Si l'utilisateur presse la touche RETURN, cela activera automatiquement le bouton par défaut."
http://gambaswiki.org/wiki/comp/gb.qt4/button/default?l=fr

et réciproquement avec la propriété Cancel et la touche ESC
;) Flachy Joe ;)
Foromus#3 Posté le 15/12/2016 à 21:26:27
C'est vrai qu'il y a des propriétés dont je ne sais pas trop à quoi elles servent...
Je vais voir ça...
Merci !
Foromus#4 Posté le 17/12/2016 à 12:11:02
Bonjour à tous,

La propriété "Défaut" ne résout rien en fait, tout au moins dans ce cas précis.
J'ai 8 formulaires quasi similaires dans mon projet, et un qui peut être considéré comme de base. On doit toujours passer par la base pour accéder aux autres, le truc est conçu comme ça, donc, je mets le focus sur le bouton "Retour" de chaque satellite.
Il se trouve, et c'est là que je ne comprends plus rien, ça fonctionne bien pour 7 formulaires, seul le quatrième refuse le focus, alors que ce bouton a été copié depuis un précédent, qui fonctionne donc, forcément.
La question, est : Pourquoi un seul récalcitrant parmi les 8 ?..
Par moments, l'informatique, ça donne des coups assez tordus....
linuxos#5 Posté le 17/12/2016 à 19:19:30
Un peu de sel, de poivre et la crevette sera... Bonjour Foromus,

Je pense mais ce n'est qu'une déduction des quelques heures passées sur Gambas, que l'événement Form_Open() est monté lorsqu'un Formulaire apparait a l'écran mais pas forcement lorsqu'il est complètement dessiné a l'écran.
Dans ces conditions l'idée du Timer (très court) que j'utilise comme solution fonctionne très bien pour moi et toi comme tu le décrits aussi.
Il se peut que le Formulaire récalcitrant dans ton cas, ne soit pas ordonné au niveau de ses objets, dans le même ordre et donc lors de l'affichage, l'objet qui doit avoir le Focus n'est pas encore dessiné.
Je précise que ce n'est qu'une supposition bien sur.
Il existe 2 onglets dans la colonne de droite de l'éditeur, le 1er affichant toutes les propriétés d'un formulaire et un 2ème onglet affichant toute l'arborescence des objets du formulaire avec leur imbrication les uns dans les autres.
Peut être pourrais tu vérifier si le Formulaire récalcitrant apparait différemment dans cet onglet par rapport aux autres qui fonctionne comme tu veux.
De plus il est possible de modifier dans certaines limites l'ordre des objets dans l'arborescence.

Je ne sais pas si cela résoudra ton problème, mais c'est une piste.
Bon courage
Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
Foromus#6 Posté le 17/12/2016 à 23:01:20
A linuxos,

Merci pour le tuyau, même si le souci était ailleurs. Mais ça m'a permis de mieux cerner le problème.
J'utilise souvent le second onglet des propriétés, c'est bien pratique, surtout quand on a des contrôles empilés les uns sur les autres, au bout d'un moment, on ne sait plus trop.
Je n'y croyais pas trop à cette histoire de hiérarchie, aussi, quand j'ai vu que mon bouton récalcitrant n'était pas au même étage que les autres - bien qu'étant dans la bonne parenté - je me suis donc mis en devoir de le déplacer, d'autant qu'il y a des flèches prévues à cet usage. Et une fois à la bonne place ... rien de changé...
Bon, j'ai tout essayé : le timer, la procédure supp, j'ai ajouté un autre formulaire, ça marchait, mais rien qui me renseigne.
Finalement, c'était, comme bien souvent, trop simple.
Dans mon formulaire de base, j'ai autant de procédures d'appels que de satellites, aussi, j'ai du les fabriquer par copier / coller. Dans chaque procédure, j'appelle ma destination par .show, ensuite, je ferme l'appelante par .close, donc, que du banal en somme.
Pour une raison qui m'échappe complètement, il se trouve que dans l'appel de la récalcitrante, la ligne .show s'est trouvée APRÈS la .close. Une fois les lignes inversées, tout est rentré dans l'ordre !
Bon, j'avoue humblement que sur ce coup-là, je n'ai pas été transcendant, je le reconnais volontiers. Enfin, j'espère sincèrement surmonter ma niaiserie... Mais j'ai quand même galéré plusieurs heures sur le truc. Du coup, j'ai moins mal à la tête...
Merci pour l'aide, même morale !
1