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 :

EDIT désactivé lors de l'exécution


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Par défaut EDIT désactivé lors de l'exécution
    Bonjour à tous,
    Voilà, dans mon application, j'ai un bouton Recherche que j'utilise pour comparer les enregistrements de 2 tables, ceux qui existent au niveau des 2 tables, sont ensuite repris (insérés) dans une 3 ième table!!!
    Le problème est que lorsque l'application commence à s'exécuter (Bouton recherche) tout se fige en attendant que la procédure s'éxécute entièrement!! Mais voilà, pour calculer le nombre d'enregistrements trouvés, j'ai implémenté un compteur à l'aide d'une variable I: Integer; donc à chaque enregistrement trouvé aprés comparaison, (A l'intérieur de la boucle while...) et un Edit: reçois la valeur de I
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit1.text:=inttostr(i);
    Mon problème est que je ne vois pas l'incrémentation du compteur à travers l'édit sur mon interface, j'attend la fin de la procédure de recherche (parcours entier des 2 tables...) Pour que le résultat final des enregistrements trouvés (La valeur de I) soit visible au niveau du composant edit!!
    J'espère avoir été assez clair!!!
    Merci

  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,

    C'est normal avec Edit1.text:=inttostr(i); à l'intérieur d'une boucle.
    par contre avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          while Condition do
          begin ...
                  Edit1.text:=inttostr(i);
                  Edit1.Update; // < mise à jour de l'affichage
                  ... 
          end;
    ... tu n'auras plus à attendre la fin de la boucle pour voir l'affichage
    ... sauf que cela va défiler à la vitesse d'exécution de la boucle ce qui permet tout juste de voir que cela avance.

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

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Il y a aussi le Application.ProcessMessages

    Soit le test suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    begin
      Edit1.Text:='toto';
      for i:=0 to 10000 do
      begin
        Edit2.Text:=IntToStr(i);
        Edit2.Update;
      end;
    end;
    Ici l'instruction Edit1.Text:='toto' ne sera visible que lorsque mon traitement entier sera terminé, c'est à dire une fois la boucle terminée.

    Second test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    begin
      Edit1.Text:='toto';
      for i:=0 to 10000 do
      begin
        Edit2.Text:=IntToStr(i);
        Application.ProcessMessages;
      end;
    end;
    Ici on traite les messages en attente donc la première instruction sera traitée lors du premier passage dans la boucle.

    Sinon, on peut faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    begin
      //NextGrid1.AddRow(5);
      Edit2.Text:='oto';
      Application.ProcessMessages;
      for i:=0 to 10000 do
      begin
        Edit1.Text:=IntToStr(i);
        Edit1.Update;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    begin
      Edit1.Text:='toto';
      // On traite le premier message
      Edit1.Update;
      for i:=0 to 10000 do
      begin
        Edit1.Text:=IntToStr(i);
        // On actualise l'affichage de l'Edit
        Edit1.Update;
      end;
    end;
    Donc je me demande une chose ... Dans quel cas c'est intéressant de mettre le Application.ProcessMessages et le Update

    Merci de m'éclairer

  4. #4
    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
    Salut

    Citation Envoyé par ero-sennin Voir le message
    Donc je me demande une chose ... Dans quel cas c'est intéressant de mettre le Application.ProcessMessages et le Update

    Merci de m'éclairer
    La méthode Update de TControl ne va traiter que les messages de réaffichage du contrôle. Alors qu'un ProcessMessages va traiter l'intégralité des messages Windows en attente quelque soit leur nature.

    @+ Claudius.

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut

    La méthode Update de TControl ne va traiter que les messages de réaffichage du contrôle. Alors qu'un ProcessMessages va traiter l'intégralité des messages Windows en attente quelque soit leur nature.

    @+ Claudius.
    Ok ok. Donc ici il est plus judicieux de placer un Update qu'un ProcessMessages vu qu'il s'agit d'un simple rafraichissement ?

    Et moi qui utilisait tout le temps le ProcessMessages, là je me rend compte que je ne l'utilisait surement pas à bon essient et j'ai pas trop de méthode qui me vient à l'esprit pour illustrer un cas pour l'utiliser ...

    Merci de ces infos

  6. #6
    Membre éclairé Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Par défaut Pourquoi l'instruction qui devance le While n'ai pas traité en premier??
    Bonjour;
    merci de vos explications, j'ai essayé le update et ça marche, mais je n'ai pas saisi pourquoi l'instruction : edit1.text:='toto' n'est visible qu'à la fin du traitement!!! (J'ai testé le truc au niveau de mon application) J'ai certainement une vision assez simpliste de la programmation, mais une instruction qui devance un While est à ma connaissance traitée en premier non????

    N.B: Au risque de passer pour une idiote, je crois qu'il y'a erreur de frappe dans le code suivant non??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    begin
      Edit1.Text:='toto';
      for i:=0 to 10000 do
      begin
        Edit2.Text:=IntToStr(i);
        Edit2.Update;
      end;
    end;
    on initialise le edit1 par la chaine de caractères: ToTo, puis on travaille sur Edit2 dans la boucle!!???

    Merci bien de votre aide!!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/04/2009, 00h21
  2. Réponses: 8
    Dernier message: 10/11/2005, 15h58
  3. Analyser les exceptions survenues lors de l'exécution
    Par cedricgirard dans le forum Langage
    Réponses: 10
    Dernier message: 13/10/2005, 15h22
  4. Problème lors de l'exécution de mes programmes
    Par darkmalak01 dans le forum Langage
    Réponses: 7
    Dernier message: 27/09/2005, 18h35
  5. Message d'erreur Windows lors de l'exécution de l'appli D6-
    Par kolac dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/12/2004, 17h55

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