IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

problème dans le chargement de la form


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Par défaut problème dans le chargement de la form
    Bonjour,

    Je travail actuellement sur C++Builder 6 et voila mon problème.

    Je crée une centaine des composants dynamiquement lors d'un formActivate.
    Mon problème est que cela provoque un temps de chargement de la form d'environ 1 seconde, ce qui provoque un scintillement de l'affichage durant cette période. J'aimerais bien le supprimer. pour rendre l'affichage plus fluide.

    Merci de votre aide.

  2. #2
    Membre éclairé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Par défaut
    Bonjour,

    je ne sais pas si ça réglera ton problème de scintillement (j'ai d'ailleurs un peu de mal à voir ce que tu décris) mais essaye d'appliquer un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application->ProcessMessages();
    après chaque création de composant, qui permet à l'application de "reprendre la main".

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    Pourquoi utiliser OnActivate ?

    Tu peux créer tes composants dans le OnCreate, ou encore mieux, dans le Constructeur, après tout, C++Builder te génère le code d'un constructeur vide automatiquement !

    Tu n'es pas en Delphi 3 (voir OldCreateOrder), c'est une mauvaise technique de cette époque pour contourner le lancement de OnCreate avant que la DFM ne soit complètement chargé !
    Je n'ai jamais compris cette méthode du OnActivate d'ailleurs, c'est comme ci dès que l'on faisait du Builder, tout le monde oubliait les fondamentaux objets !

    En plus OnActivate, il faut penser qu'il faut le faire qu'une seule fois !
    Sinon lorsque tu changes de fenêtre dans ton application, cela le relance !

    Une petite barre de progression peut-être utile (dans une form séparée), souvent l'execution en prod est plus lent que sur un developpeur sur-équipé !

    J'ai maintenu une appli avec une fenêtre contenant 20 onglets, plus de 1000 contrôles (tout étant conçu dans un designer intégré à l'appli, chaque client ayant ses propres écrans et sa prop DB), la DFM étant stocké en DB sous la forme d'un XML qui via un XSLT prenait le format DFM
    Les Ecrans devenant un peu lourd (bcp de données scientifiques, virologie, génétique...), ça devenait un long dans les 5-6 secondes !

    J'ai ajouté une petite progession à chaque step (Load an UnZip XML, XSL XML To DFM, Opération sur le Owner et les références publiées, lecture d'un autre XML affectant le DFM, chargement données Client...) avec la barre de progression, le temps perçu est moindre qu'avec une application bloquée, et j'ai surtout améliorer le code, mais ça reste pour le plus gros 2-3 secondes !


    Evidemment Application.ProcessMessages ne fera que ralentir le traitement, va empirer le phénonème de scintillement (on verra mieux le fait que les composants arrivent les un après les autres), c'est une très mauvaise idée !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Par défaut
    Merci beaucoup pour cette réponse très rapide.

    Cela a en effet améliorer l'affichage, mais le scintillement est toujours là.

    J'aurais en fait voulu que la form se charge (avec tous les composants) et qu'elle ne s'affiche seulement une fois charger (ou après un temps défini)

    Merci

  5. #5
    Membre éclairé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Par défaut
    Citation Envoyé par noahsaga Voir le message
    Merci beaucoup pour cette réponse très rapide.

    Cela a en effet améliorer l'affichage, mais le scintillement est toujours là.

    J'aurais en fait voulu que la form se charge (avec tous les composants) et qu'elle ne s'affiche seulement une fois charger (ou après un temps défini)

    Merci
    Et bien comme le dit ShaiLeTroll, créé tes composants dans ton OnCreate de ta Form, ou dans ton constructeur (conseillé) , plutôt que dans le OnActivate.

    Si tu veux qu'elle s'affiche une fois tes composants créés, mets initialement sa propriété Visible à false, puis rends la visible une fois tes composants créés.

    Si il s'agit de la form principal de ton programme, tu peux éventuellement penser à faire un splashscreen.

    EDIT : ha je n'avais pas vu ton second message...
    Il ne s'agit donc pas de ta form principale, donc pas de splash screen.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Par défaut
    Pour apporter un peu plus de détail sur mon application, je crée les composants dynamiquement sur le OnActivate car le nombre dépend du nombre et des propriétés de composants présents sur une autre form.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Par défaut
    Merci encore pour vos réponses.

    Il m'est obligatoire de créer ces composants sur le OnActivate. En effet, leur nombre et leurs valeurs (numéro d'item de la combobox par exemple) dépendent de plusieurs éléments qui évoluent tout au long du process

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Par défaut
    C'est bon, j'ai trouvé (grâce à l'ensemble de vos messages) une solution.

    Je crée un panel que je rend visible au début du formActivate. J'actualise l'affichage grâce au Apllication->ProcessMessages(), puis je le rend invisible à la fin de mon formActivate. J'ai même mis une progressbar dans panel, ce qui rend l'affichage plus propre.

    Merci à tous pour votre aide

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Par défaut
    Arf ça fait toujours bizarre de lire un message sous son pseudo qui n'est pas de soi... (Nous utilisons le même compte mon formidable stagiaire et moi)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème dans le chargement d'image
    Par yann_72 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 03/08/2011, 17h08
  2. [XHTML] [FORM] problème lors du chargement d'un formulaire
    Par NikoBe dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/02/2009, 14h12
  3. Réponses: 10
    Dernier message: 04/06/2007, 09h50
  4. [C#] Problème action bloquante: chargement d'une form
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 5
    Dernier message: 24/05/2006, 16h00
  5. Réponses: 3
    Dernier message: 19/05/2006, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo