PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV Mobile 2024 → Fermeture fenetre fille differences Android / iOS
Fermeture fenetre fille differences Android / iOS
Started by Eric, Nov., 29 2019 3:06 PM - 13 replies
Posted on November, 29 2019 - 3:06 PM
Bonjour,

Je rencontre un problème sous iOs que je n'ai pas sous Android:

J'ai sur ma_fenêtre_mère un bouton dans lequel j'ai le code
OuvreFenêtreMobile(ma_fenêtre_fille_1)

Dans le code de 'Fermeture d'une fenêtre fille de ma_fenêtre_mère j'ai:

SELON MaFenêtreFille..Nom
CAS "ma_fenêtre_fille_1"
OuvreFenêtreMobile(ma_fenêtre_fille_2)
FIN

Sous Android, pas de problème : ma_fenêtre_fille_2 s'ouvre bien lorsque
ma_fenêtre_fille_1 se ferme.
Sous iOs, cela provoque l'exception suivante :
Exception : Il n'est pas possible d'appeler cette fonction dans le
traitement de fermeture d'une fenêtre fille. La fenêtre est en train de
se fermer, on ne peut pas en ré-ouvrir une autre en même temps.

Avez-vous rencontré ce problème ?
Si oui, comment l'avez-vous résolu ?

Merci d'avance pour vos retours.

Eric
Posted on December, 02 2019 - 11:38 AM
Bonjour,

J'ai fait un tout petit projet qui démontre le bug.
Vous pouvez le télécharger à cette adresse:
https://fromsmash.com/5vwukV3cQ9-c0
Si vous voulez-bien me faire un retour pour savoir si cela se reproduit
chez vous, merci d'avance.

Eric
Registered member
449 messages
Popularité : +31 (43 votes)
Posted on December, 02 2019 - 12:03 PM
Bonjour,

J'ai téléchargé votre projet test et j'ai le même bug que vous.
Personnellement je travail beaucoup avec les plan sous windev mobile je trouve cela moins lourd à gérer surtout dans un environnement multi os (ios,android)
Message modified, December, 02 2019 - 12:08 PM
Posted on December, 02 2019 - 2:05 PM
Merci Dimitri.
Cela me rassure un peu, je vais donc transmettre le projet au ST.
Utiliser les Plans est une bonne idée mais mon projet existe déjà sous
Android et ce ne sera pas évident de toute reprendre avec des Plans.
Je garde quand même cette pseudo-solution sous le coude au cas où le ST
ne trouverait pas de remède.
Registered member
309 messages
Popularité : +31 (37 votes)
Posted on December, 02 2019 - 2:38 PM
Bonjour,
Problème connu.
Pour contourner ce problème, j'ai l'habitude de déclencher l'ouverture de la seconde fenêtre dans un timer (qui effectue la dite ouverture au bout d 1/2 seconde) ...Il s'agit de différer l'ouverture de la fenêtre 2 de la fermeture de la fenêtre 1 (qui peut prendre quelques centiemes de secondes)

Bon dev
Registered member
477 messages
Popularité : +20 (20 votes)
Posted on December, 02 2019 - 3:46 PM
Le délai de fermeture ou d'ouverture de la fenêtre varie suivant le périphérique donc le mieux est de tester la fermeture effective avec Fenetat dans une boucle avec une temporisation
Registered member
309 messages
Popularité : +31 (37 votes)
Posted on December, 02 2019 - 3:57 PM
+1 pour stef, très bonne suggestion.

bon dev.
Posted on December, 02 2019 - 5:57 PM
Merci Samir et Stef1811,
Mais ça ne fonctionne toujours pas même avec un Multitâche(-300) avant
l'ouverture de la fenetre_2.
On dirait que la fenêtre_1 est toujours considérée comme étant ouverte
tant qu'on est dans la procédure 'Fermeture d'une fenêtre fille'.
D'ailleurs FenEnCours() renvoie toujours le nom de la fenêtre_1 et
DonneFocus(FEN_Main) ne fonctionne pas dans la procédure.
Ce qui est dingue c'est que tout fonctionne à merveille sous Android !
Registered member
309 messages
Popularité : +31 (37 votes)
Posted on December, 03 2019 - 9:47 AM
Essayez de faire :

TANTQUE FenEtat(ma_fenêtre_fille_1)<>Inexistant
Multitâche(-100)
FIN
OuvreFenêtreMobile(ma_fenêtre_fille_2)


bon dev
Posted on December, 04 2019 - 11:50 AM
Merci Samir mais j'ai déjà essayé.
Malheureusement la boucle devient infinie car
fenetat(ma_fenêtre_fille_1) renvoie toujours 0.
Si je n'ai pas de réponse du ST alors je vais opter pour la solution
suivante qui fonctionne:
- Avant l'ouverture de Fen1, je lance un Thread qui boucle tant qu'un
booleen est False.
- En sortie de cette boucle, je lance dans le Thread Principal
l'ouverture de Fen2
- Dans la procédure 'Fermeture d'une fenêtre fille', je mets ce booleen
à True.

Voici le code:

// Thread AttendFermetureFen1
TANTQUE PAS gbFen1Ferme
ThreadPause(10)
FIN
gbFen1Ferme=Faux
ExécuteThreadPrincipal(OuvreFen2)


// Fermeture d'une fenêtre fille de FEN_Main
SELON MaFenêtreFille..Nom
CAS "FEN_fen1"
gbFen1Ferme=Vrai

AUTRE CAS

FIN


//PROCÉDURE OuvreFen2()
OuvreFenêtreMobile(FEN_Fen2)
Posted on May, 24 2020 - 3:51 PM
Bonjour,

J'ai le même problème sur IOS/WM 25 (Update 3) ...

Pourriez-vous nous dire quelle a été la réponse du ST ?

D'avance merci beaucoup...


Cyril
Posted on May, 25 2020 - 11:31 AM
Voici la réponse du ST:
"Malheureusement sous iOS, l’ouverture des fenêtres n’est pas possible
pendant la fermeture d’une fenêtre. C’est une contrainte liée au
fonctionnement de iOS.
Vous pouvez soit utiliser une procédure avec un automatisme permettant
de décaler l’ouverture de la fenêtre (Timer pour procédure différée).
Toutefois, souvent l’utilisation d’une seule fenêtre contenant une
fenêtre interne qui pourra être changée par ChangeFenêtreSource est
également une bonne alternative."
Posted on May, 25 2020 - 2:49 PM
Merci beaucoup pour la réponse ...
S'ils l'avaient mentionné dans la doc nous aurions, je pense, gagné du temps !
Posted on May, 25 2020 - 6:01 PM
Tout à fait !
Je te conseille d'utiliser la méthode que j'ai décrite.
Elle à le mérite de ne pas être dépendante des possibles mises à jour
et fonctionne dans tous les environnements.

Eric