PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → RepriseSaisie ou DonneFocus suite à modification du volet affiché sur onglet dynamique
RepriseSaisie ou DonneFocus suite à modification du volet affiché sur onglet dynamique
Iniciado por Julien V, 01,oct. 2020 09:13 - 7 respuestas
Miembro registrado
134 mensajes
Publicado el 01,octubre 2020 - 09:13
Bonjour,

Dans une fenêtre comportant un champ onglet dynamique, j'ai besoin lorsque que l'on change d'onglet (déjà ouvert) de faire une reprise saisie ou une prise de focus sur un champ de saisie de certaines fenêtres internes.

A l'ouverture de l'onglet dynamique ça fonctionne très bien avec un DonneFocus sur le champ en question à l'initialisation de la fenêtre interne.

Dans la fenêtre comportant le champ onglet dynamique j'ai le code suivant au traitement Modification du volet affiché
proc est une Procedure

proc = ChercheProcédure( ExtraitChaîne( ONG_menu, 1, TAB ) + "." + "lproc_focus" )
SI proc <> Null ALORS proc()

Ainsi si j'ai une procédure locale lproc_focus() dans mes fenêtres internes appelées dans le champ onglet dynamique, celle-ci s'exécute.

J'ai essayé du DonneFocus, du RepriseSaisie, du EcranPremier sans succès, c'est toujours l'onglet qui a le focus et non le champ de saisie de la fenêtre interne de l'onglet.

Si quelqu'un a une piste ? Je sèche...
Publicado el 01,octubre 2020 - 10:59
Bonjour

Dans le champs onglet, vous devez ajouter la gestion de l'événement de prise de focus et y inclure ce code :
RepriseSaisie("ONG_menu.MonChamp")


Ce code est à adapter si vous devez donner le focus à un champ particulier en fonction de l'onglet ou si vous avez des onglets qui ne doivent pas donner un focus particulier.

Exemple, si vous avez un premier onglet fixe qui ne doit pas gérer la prise de focus :
SI OngMonOnglet[OngMonOnglet].Libellé <> "Titre de mon onglet fixe" ALORS
RepriseSaisie("OngMonOnglet.MonChamp")
FIN


Bon dev.

Laurent M.
Miembro registrado
296 mensajes
Publicado el 01,octubre 2020 - 11:05
Bonjour Julien j'ai une classe qui s'occupe de gérer mon onglet dynamique et ses onglets ouvert et le traitement dont tu parles je l'ai géré.
Je vais pouvoir t'aider
proc est une Procedure

proc = ChercheProcédure( ExtraitChaîne( ONG_menu, 1, TAB ) + "." + "lproc_focus" )
SI proc <> Null ALORS proc()

Place ce code dans le traitement d'entré de ta fenêtre interne, ça devrait résoudre ton problème

--
Les innocents sont toujours accusés à tord.
Miembro registrado
134 mensajes
Publicado el 01,octubre 2020 - 12:15
Bonjour,

Merci pour la réponse, malheureusement ça ne fonctionne pas

Ci-dessous une capture de ce que cela fait



En espérant que ça soit lisible
Miembro registrado
134 mensajes
Publicado el 01,octubre 2020 - 12:16
Il faut ouvrir l'image à part, sinon on voit que le focus se met quand je fais une tabulation
Miembro registrado
296 mensajes
Publicado el 01,octubre 2020 - 12:50
Excuse moi j'ai oublié une autre partie du code, en plus du traitement sur l'entre de la fenêtre interne
Rajouter sur ton champ onglet ce code (dans le code de déclaration de fenêtre principale)
proc est une Procedure
proc = ChercheProcédure( ExtraitChaîne( ONG_menu, 1, TAB ) + "." + "lproc_focus" )

Evénement(BoutonGaucheRelâché, ChampOnglet..Nom, WM_LBUTTONUP)

Procedure BoutonGaucheRelâché(ParamMessageWindows <utile>, wParam <utile>, lParam <utile>)

SELON ParamMessageWindows
CAS WM_LBUTTONUP
proc()

AUTRE CAS

FIN


--
Les innocents sont toujours accusés à tord.
Miembro registrado
134 mensajes
Publicado el 01,octubre 2020 - 13:23
Impeccable, merci !!
Miembro registrado
296 mensajes
Publicado el 01,octubre 2020 - 13:45
Sinon je t'invite à réfléchir à une classe qui s'occupera de tout ceci, tu es sur la bonne voie mais remarque que tu dois déclarer ton procédure pour récupérer le nom de ton champs dans chacun de tes fenêtres interne, une classe t'éviterai ceci !
Je t'en pris c'est toujours un plaisir de partager

--
Les innocents sont toujours accusés à tord.