PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 27 → Popup sur Android et iOS
Popup sur Android et iOS
Débuté par Romain SIMON, 06 aoû. 2022 20:20 - 3 réponses
Membre enregistré
5 messages
Posté le 06 août 2022 - 20:20
Bonjour !

Je cherche desesperement comment faire une fenêtre modal (ou popup) avec Windev Mobile sur Android (et aussi iOS).

Sur l'émulateur, une fenêtre interne que j'ouvre avec "OuvreFenêtreMobile" fonctionne parfaitement, mais une fois sur un vrai device, cela ne fonctionne pas. La fenêtre interne ne s'ouvre pas, et ma fenêtre actuelle se recharge.

En parcourant les forums, je suis tombé sur un message indiquant que les fenêtres internes ne s'utilisent pas de cette manière.

J'ai donc cherché une autre solution, et voici ce que j'ai trouvé : Je créer une fenêtre interne qui contient le contenu de la popup, je l'ajoute dans le plan 1 ou 2 de ma fenêtre parente, puis lorsque je veux ouvrir la popup, j'affiche le plan 1 ou 2 et j'appelle la procédure "Initialise" de ma fenêtre interne.

Cela fonctionne plutôt bien, mais uniquement parce que ma fenêtre parente n'utilise pas les plans (je m'en sert juste pour les popups). Mais si je devais utiliser les plans, ma méthode ne fonctionne plus.

Je voudrais donc savoir si il existait un moyen plus simple et plus propre d'ouvrir une popup sur Android et iOS en version 26 de WinDev Mobile. Egalement, est-ce qu'en version 27 la méthode change ou ça reste pareil ?

J'ai cru comprendre que Android n'avait pas de système de popup. Pourtant, j'ai déjà utilisé des applications qui en utilisaient (par exemple, sur un logiciel de caisse, quand on clique sur "Encaisser", cela ouvre une popup pour choisir le montant, le mode de paiement, etc...)

Avez-vous des astuces pour ça ?

Idéalement, si la popup pouvait retourner une valeur, ce serait top. Sinon, je peux toujours passer une procédure en Callback.

Merci ! :)
Membre enregistré
2 251 messages
Popularité : +93 (137 votes)
Posté le 06 août 2022 - 22:14
Plusieurs solutions
- Une fenêtre non maximiser
- la personnalisation des fenêtres de dialogue pcsoft
https://doc.pcsoft.fr/fr-FR/?3021003
Qui sont elles aussi des fenêtres non maximiser.
Membre enregistré
604 messages
Popularité : +16 (20 votes)
Posté le 07 août 2022 - 11:23
Personnellement j'ai opté pour des fenêtres non maximalisées qui affiche un champ HTML et des boutons personnalisables (texte, couleur...)

Le problème reste le modal pour lequel WM ne propose rien }:(

On argumentera qu'il ne faut pas faire de modal mais des fois, la réponse "de la modale" influe sur des choix applicatifs.

Ce qui est râlant, c'est que quand on fait un bête "info", le code ne continue qu'après la réponse.

Le problème des fenêtres info, dialogue... c'est leur pauvreté du graphisme.

J'ai donc surchargé les méthodes info, dialogue... avec mes propres procédures (voir procédure plus bas)

Deux avantages :
Je fais le design que je veux avec autre chose que des "Oui" et des "Non".
De plus, je ne change rien à mes réflexes de programmation, je continue à coder des info("truc chouette") mais
dans ma procédure je règle le problème de l'application en arrière plan pour laquelle Android > 10 interdit les affichages.






Comment j'ai réglais l'aspect modal ?

Dans les événements (typiquement le clic sur un bouton) fermant la fenêtre "FEN_INFO", je passe à vrai un booléen global (gbFEN_INFO_LOOP_END) ce booléen étant testé après le OuvreFenêtreMobile (voir dans le code).

Procedure Info(vParmLigne1,vParmLigne2="",vParmLigne3 ="",vParmLigne4 ="",vParmLigne5 ="",vParmLigne6 ="",vParmLigne7 ="",vParmLigne8 ="",vParmLigne9 ="",vParmLigne10 ="",vParmLigne11 ="",vParmLigne12 ="",vParmLigne13 ="",vParmLigne14 ="",vParmLigne15 ="")
sMyNL_Debut est une chaîne = ""
sMyNL_Fin est une chaîne = ""
nIndice est un entier = 0
nIndiceMax est un entier = 0
vLigne est un Variant
vLignes est un tableau de Variant
SI Majuscule(vParmLigne1)=vParmLigne1 ALORS
gsFEN_INFO_TITRE=vParmLigne1
AjouteLigne(vLignes,vParmLigne2)
AjouteLigne(vLignes,vParmLigne3)
AjouteLigne(vLignes,vParmLigne4)
AjouteLigne(vLignes,vParmLigne5)
AjouteLigne(vLignes,vParmLigne6)
AjouteLigne(vLignes,vParmLigne7)
AjouteLigne(vLignes,vParmLigne8)
AjouteLigne(vLignes,vParmLigne9)
AjouteLigne(vLignes,vParmLigne10)
AjouteLigne(vLignes,vParmLigne11)
AjouteLigne(vLignes,vParmLigne12)
AjouteLigne(vLignes,vParmLigne13)
AjouteLigne(vLignes,vParmLigne14)
AjouteLigne(vLignes,vParmLigne15)
AjouteLigne(vLignes,"")

SINON
gsFEN_INFO_TITRE=""
AjouteLigne(vLignes,vParmLigne1)
AjouteLigne(vLignes,vParmLigne2)
AjouteLigne(vLignes,vParmLigne3)
AjouteLigne(vLignes,vParmLigne4)
AjouteLigne(vLignes,vParmLigne5)
AjouteLigne(vLignes,vParmLigne6)
AjouteLigne(vLignes,vParmLigne7)
AjouteLigne(vLignes,vParmLigne8)
AjouteLigne(vLignes,vParmLigne9)
AjouteLigne(vLignes,vParmLigne10)
AjouteLigne(vLignes,vParmLigne11)
AjouteLigne(vLignes,vParmLigne12)
AjouteLigne(vLignes,vParmLigne13)
AjouteLigne(vLignes,vParmLigne14)
AjouteLigne(vLignes,vParmLigne15)
FIN

POUR nIndiceMax = 15 À 1 PAS -1
QUAND EXCEPTIONEXCEPTION DANS
vLigne=vLignes[nIndiceMax]
SI vLigne<>"" ALORS
SORTIR
FIN
FAIRE
SORTIR
FIN

FIN

<Compile SI TypeConfiguration=iOS>
sMyNL_Debut=CRLF
sMyNL_Fin = ""
<FIN>

<Compile SI TypeConfiguration=Android>
sMyNL_Debut="<p Class='ligne'>"
sMyNL_Fin=" </p>"
SI gbIsTelephoneBizarre=Vrai ALORS
sMyNL_Debut = RC
sMyNL_Fin = ""
FIN

<FIN>

vLigne=""
POUR nIndice = 1 À nIndiceMax
SI SansEspace(vLignes[nIndice])="" ALORS
vLignes[nIndice]=sMyNL_Debut+sMyNL_Fin
FIN
vLigne+=sMyNL_Debut+vLignes[nIndice]+sMyNL_Fin

FIN


SI EnModeArrièrePlan() ALORS

SINON

<Compile SI TypeConfiguration=iOS>
WL.TitreSuivant(gsFEN_INFO_TITRE)
vLigne=Remplace(vLigne,"<strong>","")
vLigne=Remplace(vLigne,"</strong>","")
WL.Info(vLigne)
<FIN>

<Compile SI TypeConfiguration=Android>
SI gbIsTelephoneBizarre=Vrai ALORS
WL.TitreSuivant(gsFEN_INFO_TITRE)
WL.Info(vLigne)
SINON

gbFEN_INFO_LOOP_END=Faux
OuvreFenêtreMobile(FEN_INFO,gsFEN_INFO_TITRE,vLigne,"ok")
gsFEN_INFO_TITRE=""
TANTQUE gbFEN_INFO_LOOP_END=Faux
SI PAS EnModeSimulateur() ALORS
<Compile SI TypeConfiguration=iOS>
Multitâche(-1)
<FIN>
<Compile SI TypeConfiguration=Android>
Multitâche(-100)
<FIN>
SINON
Multitâche(-1)
FIN
FIN
FIN
<FIN>

FIN


--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membre enregistré
5 messages
Posté le 07 août 2022 - 20:51
En effet, les fenêtres non maximisées font exactement ce que je souhaite. C'est parfait ! :)

Concernant l'apparence des Popups "Oui/Non" etc, je ne peux pas les personnaliser pour le moment, car je suis en version Express le temps de recevoir ma licence.