PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → ChangeStyle() comment accélérer le réaffichage de mon écran ?
ChangeStyle() comment accélérer le réaffichage de mon écran ?
Débuté par Christophe, 16 sep. 2023 17:17 - 6 réponses
Membre enregistré
4 messages
Posté le 16 septembre 2023 - 17:17
Bonjour à tous,

Je développe entre autre un logiciel d'encaissement utilisé bien sûr en tactile.

Dans l'interface de vente, je dispose 80 touches pour la navigation entre les écrans et/ou le choix des articles.

J'ai créé un gabarit pour avoir des couleurs de fond avec effet dégradé. Plutôt joli, on dira...;-)
Et j'utilise la fonction ChangeStyle() dans une moulinette pour afficher chacune de mes touches avec le fond, bien sûr, le Libellé de l'écran/article, le prix, la fonctionnalité de la touche, etc... pour m'adresser à chaque touche j'utilise une indirection du genre

ChangeStyle({"BtnArticleTactile"+cjTabEcranDetails[cjPos].NoTouche,indChamp},cjTabEcranDetails[cjPos].StyleFond,cjGabaritBtn)

{"LibArtT"+cjTabEcranDetails[cjPos].NoTouche,indChamp}..Libellé=cjTabEcranDetails[cjPos].LibTouche



Bien sûr, les différentes infos pour afficher chaque touche sont stockée dans une variable tableau plutôt que de lire à chaque fois dans la BDD.

Le temps d'affichage des écrans est de 500 à 550 ms. Cela a pour effet qu'on voit l'affichage des touches se faire une par une. Plus ou moins vite selon les machines évidemment. Les TPV du type J1900 ont besoin de 600 à 700ms...
Pas terrible, donc.



Pour ce qui est de l'affichage du fond de chaque touche, j'ai testé avec une couleur de fond "fixe" du genre noir, rouge, bleu, etc... les temps d'affichages de mes écrans sont divisés quasiment par 4 à 5. Moins joli mais plus rapide.
La fonction ChangeStyle() est donc chronophage...

J'ai pensé à la notion de TâcheParallèle_xxx mais je ne crois pas que cela puisse arranger mes affaires...
Certes, il faut que je me penche plus longuement sur cette notion. Mais je crois que ce n'est pas la solution pour mon problème.

Que feriez-vous à ma place ?


D'avance un très très grand merci à vous tous pour toutes vos suggestions !

Bonne journée encore,

>Christophe
Membre enregistré
559 messages
Posté le 16 septembre 2023 - 21:20
Bonjour,
Tout appel à la mise à jour de l'interface est chronophage.
Je n'ai pas rencontré votre cas mais avez-vous essayé :

de mettre le code dans l'évènement "Demande de mise à jour de l'affichage" de la fenêtre.
https://doc.pcsoft.fr/?1010021
ou
de mettre AffichageActif de la fenêtre à faux, d'exécuter le code puis AffichageActif à vrai
https://doc.pcsoft.fr/fr-FR/?2510015
ou
de mettre la propriété visible de la fenêtre à faux, d'exécuter le code puis propriété visible à vrai
https://doc.pcsoft.fr/fr-FR/?2510138

Pas sûr du tout, mais ça ne coûte rien d'essayer.
>Cdlt
Membre enregistré
4 messages
Posté le 16 septembre 2023 - 22:18
Cédric_34 a écrit :
Bonjour,
Tout appel à la mise à jour de l'interface est chronophage.
Je n'ai pas rencontré votre cas mais avez-vous essayé :

de mettre le code dans l'évènement "Demande de mise à jour de l'affichage" de la fenêtre.
https://doc.pcsoft.fr/?1010021
ou
de mettre AffichageActif de la fenêtre à faux, d'exécuter le code puis AffichageActif à vrai
https://doc.pcsoft.fr/fr-FR/?2510015
ou
de mettre la propriété visible de la fenêtre à faux, d'exécuter le code puis propriété visible à vrai
https://doc.pcsoft.fr/fr-FR/?2510138

Pas sûr du tout, mais ça ne coûte rien d'essayer.
Cdlt



:)

Alors... déjà testé et un progrès très important !
Merci Cédric !

j'ai d'abord essayé avec "AffichageActif": Le jour et la nuit grâce à 2 effets positifs qui se cumulent:
- le temps d'affichage des écrans est passé de 500/550ms à 250/260ms
- De plus, l'écran s'affiche en 1 seule fois. Ce qui renforce la sensation d'un affichage immédiat.

Puis j'ai essayé de cumuler la propriété "visible" = faux/vrai non pas sur la fenêtre mais sur le groupe auquel l'ensemble des touches est lié.
Le code de réaffichage des 80 touches est dans une fonction/procédure dont le nom est cjArticleTactileRemplirEcrans(NoEcran)

j'ai donc rajouté au début du code :

MaFenêtre..AffichageActif=Faux
GRP_BoutonsTactiles..Visible=Faux
GRP_PrixSurTouche..Visible=Faux


Puis à la fin
MaFenêtre..AffichageActif=Vrai
GRP_BoutonsTactiles..Visible=Vrai
GRP_PrixSurTouche..Visible=Vrai


le temps d'affichage de 250/260ms est passé à 190/200ms: Donc encore un gain grâce à se cumul.
En plus très facile à appliquer !


L'appel de l'affichage peut se faire à plusieurs niveaux ET sur chaque touche qui serait configurée en touche d'appel d'écran.
Ce que j'appelle les touches de navigation...

Pour ce qui est de mettre le code dans l'évènement "Demande de mise à jour de l'affichage" de la fenêtre :
Je n'ai pas essayé car seule une partie de la fenêtre est rafraichie...

En tout cas, avec 2 pistes sur 3 proposées, l'affichage s'est considérablement amélioré !

>Encore une fois, un très grand MERCI !
Membre enregistré
4 messages
Posté le 16 septembre 2023 - 22:21
Je vais tout de même tester la mise du code dans l'évènement "Demande de mise à jour de l'affichage" de la fenêtre :
>Il y peut-être aussi des ms à récupérer !
Membre enregistré
559 messages
Posté le 17 septembre 2023 - 00:28
Christophe a écrit :

Puis à la fin
MaFenêtre..AffichageActif=Vrai
GRP_BoutonsTactiles..Visible=Vrai
GRP_PrixSurTouche..Visible=Vrai


Vu le nombre important de contrôles sur la fenêtre, essayez l'inverse :
GRP_BoutonsTactiles..Visible=Vrai
GRP_PrixSurTouche..Visible=Vrai
MaFenêtre..AffichageActif=Vrai

>Peut-être quelques ms de plus à récupérer.
Membre enregistré
4 messages
Posté le 23 septembre 2023 - 18:57
Bien vu, Cédric !
Je n'avais pas fait attention à ce détail.

Une fois le code de fin modifié selon ton conseil...
GRP_BoutonsTactiles..Visible=Vrai
GRP_PrixSurTouche..Visible=Vrai
MaFenêtre..AffichageActif=Vrai


Je suis passé de 190/200ms à 100/110 ms...
Pas mal !

>Encore une fois, MERCI
Membre enregistré
559 messages
Posté le 23 septembre 2023 - 22:57
Heureux d'avoir pu vous aider.
>Salutations.