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

Delphi Discussion :

[Delphi 7] Petit problème événementiel


Sujet :

Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut [Delphi 7] Petit problème événementiel
    Bonjour à tous.
    Le ridicule ne tuant pas (paraît-il), je vous soumets mon petit problème événementiel : dans une procédure FormActivate, je charge des données dans un ComboBox, ce qui met un peu de temps... Je souhaite donc en faire part à l'utilisateur par un message dans un Edit. Seulement, le message ne s'affiche que quand tout est chargé (ce qui ne sert à rien) ! Toutefois, si j'ajoute un ShowMessage (ce que je ne souhaite pas) ça marche...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm2.FormActivate(Sender: TObject);
    var Article,Libelle:string;
    begin
      Form2.Width:=Screen.Width;
      Form2.Height:=Screen.Height-25;
      Form2.Top:=0;
      Form2.Left:=0;
      EditMessage.Visible:=True;
      EditMessage.Text:='Chargement des noms de communes en cours...';
     
      ShowMessage('toto');
     
      // ici, début du chargement des données
    Avec le code ci-dessus, c'est Ok ! Si je supprime le ShowMessage, ça foire
    D'avance merci !

    Alain

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    attention, Activate n'est pas forcément le meilleur évènement pour ce genre de chose.

    j'utilise souvent la méthode suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.OnCreate(Sender:TObject);
    begin
     PostMessage(Handle,WM_USER,0,0);
    // c'est bien un POST et non un SEND car on veux sortir du OnCreate
    end;
     
    procedure TForm1.WMUser(var Msg:TMessage); // message WM_USER
    begin
     // chargement...
    end;
    l'autre solution que je vois souvent est l'utilisation d'un Timer qui déclenche un l'événement au début de l'application...mais je trouve ça moins propre

    mais si le chargement est vraiment long, le mieux est un Thread puisque sinon la fenêtre deviendra blanche dès qu'on la bouge (pas de traitement du message Paint)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Par défaut
    salut
    - soit tu ajoutes un application.processmessages
    - soit tu fait un EditMessage.Paint

    JP

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 245
    Par défaut
    Tu peux rajouter un Application.ProcessMessages.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm2.FormActivate(Sender: TObject);
    var Article,Libelle:string;
    begin
      Form2.Width:=Screen.Width;
      Form2.Height:=Screen.Height-25;
      Form2.Top:=0;
      Form2.Left:=0;
      EditMessage.Visible:=True;
      EditMessage.Text:='Chargement des noms de communes en cours...';
      Application.ProcessMessages;
     
      // ici, début du chargement des données

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Merci à tout deux, tothpaul et J-P-B

    La solution avec un application.processmessages (je ne connaissais pas) me satisfait totalement.
    Ce que me propose tothpaul me semble un trop fort vu mes connaissances

    Bonne soirée. Amicalement

    Alain

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Merci à toi également, Ben_Le_Cool, mais tu as dégainé un peu tard

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 245
    Par défaut
    Citation Envoyé par alainvh
    Merci à toi également, Ben_Le_Cool, mais tu as dégainé un peu tard
    Surement a cause de l'age

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

Discussions similaires

  1. Petits problèmes de traduction de C vers Delphi
    Par Gilbert Geyer dans le forum Langage
    Réponses: 14
    Dernier message: 28/06/2011, 16h19
  2. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  3. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  4. Guide du développeur Delphi devant un problème
    Par Bestiol dans le forum Delphi
    Réponses: 0
    Dernier message: 24/03/2004, 22h51
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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