PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV (earlier versions) → Création de champ super longue
Création de champ super longue
Started by Mimi6257, May, 25 2018 10:01 AM - No answer
Registered member
1 message
Posted on May, 25 2018 - 10:01 AM
Bonjour

Mon application nécessite de créer n * champs de base (combobox, textfield, label, ...) , de les dimensionner et de les positionner , dans une fenêtre interne, tout ça uniquement par programmation.
Cette fenêtre sera le contenu d'un onglet d'un champ onglet déjà existant dans l'IHM.
Il y aura donc autant de fenêtre interne à créer que d'onglet existant.
Le soucis que je rencontre est que la création des champs de base prend énormément de temps, j'ai pu constater sur un mini projet à part que pour créer 100 combobox par programmation, les dimensionner et les placer, l'application prends en moyenne 500 millisecondes (100 combobox dans une fenêtre interne dans un onglet).
Ce qui me donne sur mon projet initial 3,5 seconde pour rafraichir mon IHM ( 7 onglets * une centaine de champs de base en moyenne)
L'idée est de raccourcir ce temps qui n'est pas acceptable pour mon client.

Ma première idée été de créer chaque fenêtre interne de chaque onglet dans un Thread secondaire, mais cela ne fonctionne pas. J'ai une pistes :
- une fois qu'un champ est créer dans son parent (fenêtre interne), il ne peut être uniquement gérer par le thread principal, comme le dis l'article ( http://blogs.pcsoft.fr/fr/manipulation-ihm-ouverture-fenetre-thread-secondaire-preferer-fonctions-wlangage-echange-messages/121/read.awp ), cependant, la méthode DemandeMiseAjourIHM() indique dans sa doc qu'elle peut être utilisée dans le cadre d'une mise à jour de l'interface via des Threads.

Ma seconde idée été de désactivé l'affichage, de créer mes champs, et de réactiver l'affichage des champs et de leur parents ( propriété ..visible et ..affichageActif), mais cela ne me fait gagner à peine 50 millisecondes. On dirai que l'application prend le temps de dessiner quand même les champs même s'ils ne sont pas affichés à l'écran.

Mes questions sont donc :
- est-il possible des créer par programmation des champs (de tout type) , sans parent ou avec un parent déjà affiché à l'écran, dans des threads secondaires, puis une fois les threads secondaires terminés, le thread principal rafraichira l'IHM ?
- est-il possible de forcer l'application à ne rien dessiner du tout pendant la création des champs, et de tout afficher à la fin du processus ? Normalement dessiner 100 combobox par programmation ne devrai pas prendre 500 millisecondes.

J'utilise Windev 21.0.168.7, pour une application bureau qui sera exécutée sur Windows.

Merci d'avance pour vos réponses.