PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → initialisation fenetre et ancrage
initialisation fenetre et ancrage
Débuté par jérôme, 02 mar. 2018 16:17 - 3 réponses
Membre enregistré
34 messages
Popularité : +1 (1 vote)
Posté le 02 mars 2018 - 16:17
Bonjour,
J'ai un petit soucis depuis un moment que je n'arrivais pas à identifier et je viens de mettre la main dessus. Par contre je ne vois pas comment le résoudre et là vous allez peut être pouvoir me donner une idée ^^

en gros, j'ai un model de fenetre qui ne sert qu'à une chose: ancrer mes champs.
Je m'explique, je cherche a obtenir le même affichage, quelque soit l'ecran que j'utilise. J'ai donc créer une fonction qui liste mes champs et leur attribut un ancrage en fonction de leur position initial et leur taille:
Index = 1
champs est une chaîne = EnumèreChamp(fen,Index)
//Boucle sur l'ensemble des champs de la fenêtre
TANTQUE champs <> ""
AncrageChamp(champs)
//lecture du champs suivant
Index++
champs = EnumèreChamp(fen,Index)
FIN

Procedure AncrageChamp(champs est une chaîne)
x1,y1,x2,y2 sont des réels
hInit est un réel
lInit est un réel
QUAND EXCEPTIONEXCEPTION DANS
hInit = MaFenêtre..HauteurInitiale
lInit = MaFenêtre..LargeurInitiale
x1 = {champs,indChamp}..XInitial
y1 = {champs,indChamp}..YInitial
x2 = x1 + {champs,indChamp}..LargeurInitiale
y2 = y1 + {champs,indChamp}..HauteurInitiale
Trace("taille fenetre "+MaFenêtre..Nom+"."+champs+": "+MaFenêtre..Hauteur+"*"+MaFenêtre..Largeur)

{champs,indChamp}..Ancrage = ancreBas + ancreDroite + ancreHauteur + ancreLargeur
{champs,indChamp}..TauxAncrageDroite = x1/lInit*1000
{champs,indChamp}..TauxAncrageBas = y1/hInit*1000
{champs,indChamp}..TauxAncrageLargeur = (x2/lInit*1000)-{champs,indChamp}..TauxAncrageDroite
{champs,indChamp}..TauxAncrageHauteur = (y2/hInit*1000)-{champs,indChamp}..TauxAncrageBas
FAIRE
Trace("Erreur ancrage champ: "+ErreurInfo(errComplet))
FIN

et lors de mon execution en simulateur aucun soucis, sur un telephone qui tient la route idem. mais lorsque j'utilise une tablette un peu moins puissante ou un gsm milieu de gamme j'obtiens celà:

20180302 15333376 - taille fenetre FEN_Config_Adresses.LibTypeDeGroupe: 270*480
20180302 15333391 - taille fenetre FEN_Config_Adresses.Sai_NomDuGroupe: 270*480
20180302 15333408 - taille fenetre FEN_Config_Adresses.LibGrpNumber: 270*480
20180302 15333424 - taille fenetre FEN_Config_Adresses.Btn_RetourConf_groupe: 270*480
20180302 15333439 - taille fenetre FEN_Config_Adresses.ImgSelectionSimulation: 270*480
20180302 15333454 - taille fenetre FEN_Config_Adresses.LibSimulation: 270*480
20180302 15333469 - taille fenetre FEN_Config_Adresses.LibTypeDuGroupe: 270*480
20180302 15333485 - taille fenetre FEN_Config_Adresses.BtnSelectSortieGroupes: 270*480
20180302 15333500 - taille fenetre FEN_Config_Adresses.BtnEnregistreGroupe: 270*480
20180302 15333515 - taille fenetre FEN_Config_Adresses.LibContenuGroupe: 270*480
20180302 15333530 - taille fenetre FEN_Config_Adresses.LibZone: 270*480
20180302 15333546 - taille fenetre FEN_Config_Adresses.SaiNumEvent: 270*480
20180302 15333590 - taille fenetre FEN_Config_Adresses.ZrZoneContenu: 1032*1920
20180302 15333605 - taille fenetre FEN_Config_Adresses.Sai_ZoneName: 1032*1920
20180302 15333620 - taille fenetre FEN_Config_Adresses.Lib_Sai_ZoneName: 1032*1920
20180302 15333635 - taille fenetre FEN_Config_Adresses.BtnEnregistreZones: 1032*1920
20180302 15333651 - taille fenetre FEN_Config_Adresses.BtnEnregistreCapteur: 1032*1920
20180302 15333666 - taille fenetre FEN_Config_Adresses.BtnAvantCapteur: 1032*1920


en gros ma fenêtre change de taille et prend sa dimension final au milieu du traitement de ma déclaration. ce qui implique un ancrage correcte pour la première partie et aucun ancrage pour les suivants (par défaut mes champs ne sont pas ancré en édition)
je pourrai éviter ce problème en ancrant mes champs mais cela voudrait dire que le déplacement d'un champs signifierai le recalcule de son ancrage et vu la quantité de champs présent dans l'application ça va être lourd...


quelqu'un saurait comment bloquer cet affichage le temps de laisser le calcule se finir?
Membre enregistré
34 messages
Popularité : +1 (1 vote)
Posté le 05 mars 2018 - 10:46
Je viens de remarquer que je n'avais pas le problème sous Androïde 7. Uniquement les autres versions.
sous Androïde 7 il semble redimensionner pas mal de choses seul étonnamment (les polices, la hauteurs des lignes d'une table...)
et mon ancrage est bon.
Membre enregistré
34 messages
Popularité : +1 (1 vote)
Posté le 05 mars 2018 - 17:00
En testant je me suis rendu compte que le problème semblait lié aux zone répétée et aux table. j'ai donc passé ma journée à tester (10 fois plus vite n'est-ce pas...) et j'en suis venu à la conclusion que l'initialisation de la fenêtre laisse la main lorsqu'il arrive sur un champ complexe (table, zr, liste...)
j'ai donc déplacé ces champs en fin d'initialisation et effectivement maintenant tous mes champs sont bien placé SAUF eux.

ça avance mais bon... quelqu'un saurait me dire pourquoi ces champs posent ce problème et s'il y aurait un moyen de bloquer l'initialisation le temps nécessaire?
Membre enregistré
34 messages
Popularité : +1 (1 vote)
Posté le 06 mars 2018 - 11:08
J'ai enfin trouvé, merci à moi même du coup :/

Pour ceux qui aurait le même problème voilà la ligne qui posait problème:
{ch,indChamp}..HauteurLigne = ArrondiInférieur({ch,indChamp}..HauteurLigne * grAugmentationY)

je l'avais rajoutée dans les versions < 7 d'Androïde car la hauteur de ligne n’était pas automatiquement ancrée. c'est cette ligne qui lance le repeint de la fenêtre et donc me flanche la fin du traitement.
je l'ai donc retirée et placée après la fin de tous les ancrages. je n'ai plus de soucis.