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

Langage Delphi Discussion :

Attendre qu'une form soit chargée avant d'exécuter du code


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Par défaut Attendre qu'une form soit chargée avant d'exécuter du code
    Hello,

    A l'apparition d'une form, j'aimerais lancer une série de fonctions mais qui doivent s'exécuter uniquement lorsque la form est chargée.

    Le but est que la form s'affiche, et que les résultats des fonctions s'écrivent au fur et à mesure.

    Pour l'instant j'ai mis mes appels de fonctions dans le formShow, et la form n'apparaît qu'une fois toutes les fonctions terminées, ce qui n'est pas terrible (long à charger, et pas d'effet visuel d'incrémentation des résultats).

    Une idée ?

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Salut,

    Et si tu mettais sur ta Form un Timer avec Enabled:=False lors de la conception, ... puis à la fin du formShow (débrassé de l'appel des fonctions) un simple Timer1.Enabled:=True; de façon à ne déclencher l'appel de tes fonctions qu'en différé avec lévénement OnTimer ça devrait marcher et peut-être même avec l'intervalle par défaut de 1000 millisecondes.

    Mais dans l'événement OnTimer n'oublies pas d'achever ce premier appel à tes fonctions par Timer1.Enabled:=False; sinon ça va tourner en rond voire bloquer.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 158
    Par défaut
    Bonjour,

    As tu essayer du coté du OnActivate de ta fiche?

    A+

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Juste avant de lancer la premiere fonction rajoute un Application.ProcessMessages (voir en mettre aussi dans les boucles au endroit clef de tes fonctions).

    Sinon, la solution de GilBert est pas mal non plus

    Citation Envoyé par pitango Voir le message
    Bonjour,

    As tu essayer du coté du OnActivate de ta fiche?

    A+
    Attention avec le OnActivate à chaque fois que la fenêtre à le focus l'évènement est appelé, donc c'est à éviter.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 158
    Par défaut
    Citation Envoyé par Rayek
    Attention avec le OnActivate à chaque fois que la fenêtre à le focus l'évènement est appelé, donc c'est à éviter.
    oups!!

    Effectivement, mauvais idée.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Par défaut
    Merci pour les réponses.

    Le Timer de Gilbert fonctionne parfaitement.

    Par contre j'ai aussi essayé le Application.ProcessMessages dans le FormShow juste avant d'appeler mes fonctions, mais celui-ci ne fonctionne pas : ma form apparaît uniquement lorsque tous les résultats sont calculés.

  7. #7
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    tu peux essayer, dans le formshow, de mettre ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm.Show()
    begin
      inherited;
      Application.ProcessMessages;
      TonTraitement; // avec des Application.ProcessMessages  dans ton traitement à chaque fois que tu veux forcer l'affichage
    end;
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  8. #8
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    @TicTacToe

    Pourquoi un inherited ? Nous sommes sur une procédure TNotifyEvent.

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Re-bonjour,

    avec des Application.ProcessMessages dans ton traitement à chaque fois que tu veux forcer l'affichage
    ... l'autre jour il a été dit (me souviens plus dans quelle discussion) que Application.ProcessMessages donne le main à Windows pour traiter tout ce qui est en attente et que pour forcer uniquement l'affichage fallait utiliser un UpDate (ex : Edit1.UpDate). Non ?

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  10. #10
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    @TicTacToe

    Pourquoi un inherited ? Nous sommes sur une procédure TNotifyEvent.
    Que ce soit TNotifyEvent ou pas ne change rien.
    Je travaille surtout en héritage de form, j'ai mis le inherited pour garantir que le code de la fenêtre mère éventuelle soit appelé.

    Mais je pense aussi qu'il y a de forte chance qu'il n'y en ait pas de fenêtre mère dans le code de notre ami, mais au cas ou, ca ne mange pas de pain

    @Gilbert
    Honnetement Je sais plus pour le Application.ProcessMessages, mais il me semble que c'est uniquement pour l'application (mais il me semble seulement...)
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  11. #11
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Citation Envoyé par TicTacToe Voir le message
    Je travaille surtout en héritage de form, ...
    Ok, ceci explique cela. Comme je n'ai pas cette habitude de travail, ça ne mettait pas venu à l'idée.

    @+

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

Discussions similaires

  1. Attendre qu'un recalcul soit effectué avant de continuer le code
    Par ANOVA dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/08/2010, 15h27
  2. Attendre qu'une fenetre soit fermée avant de continuer.
    Par parp1 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/05/2007, 18h43
  3. Attendre qu'une tâche soit terminée avant d'en lancer une autre
    Par guidav dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/04/2007, 18h07
  4. Comment faire pour qu'une Form reste en avant-plan?
    Par Bodom-Child dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/08/2005, 11h28
  5. [API Windows]Attendre qu'une fenetre soit dessinee
    Par VoLc0m dans le forum Windows
    Réponses: 21
    Dernier message: 13/05/2005, 16h11

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