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 :

Comment implementer un WaitMessage sous Delphi


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut Comment implementer un WaitMessage sous Delphi
    salut, je veux faire un traitement, et pendant ce traitement j'affiche un progressBar (avec la propriété marquee activée) implémenté dans un autre Form...
    Résultat : Le deuxième Form ne s'affiche pas correctement et le ProgressBar ne bouge pas.
    Une idée ?
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var i : Integer;
    begin
      Form2.Show;
      for i := 0 to 3000 do
        begin
    
            Button1.Caption := 'Patientez svp.';
            Button1.Caption := 'Patientez svp..';
            Button1.Caption := 'Patientez svp...';
    
        end;
    
      Form2.Close;
      Button1.Caption := 'Démarrer' ;
    end;

  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 : 56
    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
    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var i : Integer;
    begin
      Form2.Show;
      for i := 0 to 3000 do
        begin
     
            Button1.Caption := 'Patientez svp.' + IntToStr(i);
            Application.ProcessMessages;
     
        end;
     
      Form2.Close;
      Button1.Caption := 'Démarrer' ;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    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 086
    Par défaut
    Pour ton code, c'est juste un Button1.Refresh,
    un peu plus lourd Application.ProcessMessages(),
    Sinon un Thread et tout cela implique pour la synchro avec IHM
    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 actif
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Pour ton code, c'est juste un Button1.Refresh,
    un peu plus lourd Application.ProcessMessages(),
    Sinon un Thread et tout cela implique pour la synchro avec IHM
    Justement... l'opération effectuée prend à peu près 45sec.. ouverture d'une connexion à une bd firebird ...ouverture de plusieurs tables ..peupler une dizaine de combobox..et pendant ce temps je veux afficher un progressBar(marquee) pour indiquer à l'utilisateur que l'application n'est pas bloquée.

  5. #5
    Membre expérimenté Avatar de Moez.B
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Mars 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 219
    Par défaut
    Salut
    La progression doit être relative aux temps d'actions qui sont entrain de dérouler. Autrement, si tu as une connexion à une base, ouverture des tables connectée à cette base, alimentation des combo, alors il faut impliquer l'utilisateur dans l'attente ...
    Ce que je fais généralement dans les traitements longs, c'est de présenter le libellé de l'action dans un panel d'un StatusBar et proportionner le nombre d'actions avec le Progress Bar. exemple: pour une connexion à la base + ouverture de 30 tables + alimentation de 15 combo avec en totalité 3000 valeurs possibles ( je dis n'importe quoi car normalement, si on est dans le cas d'une alimentation dynamique, on doit prévoir le nombre de champs avec une RecordCount par exemple ), j'ai 3031 pas dans le Progress avec dans chaque passage un ProcessMessages...
    ShaiLeTroll
    Pour ton code, c'est juste un Button1.Refresh,
    un peu plus lourd Application.ProcessMessages(),
    Sinon un Thread et tout cela implique pour la synchro avec IHM
    Est ce que tu peux expliquer pour le cas des Thread ?

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    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 086
    Par défaut
    Tu déporte la tache lente dans un thread
    l'IHM n'est pas bloqué, tu peux ainsi mettre une patience avec une animation ou encore mieux initialiser d'autres éléments qui n'ont pas de dépendance avec la tache threadé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

  7. #7
    Membre expérimenté Avatar de Moez.B
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Mars 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 219
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Tu déporte la tache lente dans un thread
    l'IHM n'est pas bloqué, tu peux ainsi mettre une patience avec une animation ou encore mieux initialiser d'autres éléments qui n'ont pas de dépendance avec la tache threadée
    J'ai par exemple ce bout de code
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i, Haut, Gauche  :integer;
    begin
      Haut := 10; Gauche := 10;
      Try
      Button1.Enabled := False;
      for i:=0 to 2000 do
        with TLabel.Create(Self)do
        begin
          Parent := Form1;
          Top := Haut + i*20;
          Left := 20;
          Caption := 'Hello';
          Application.ProcessMessages;
        end;
      Finally
        Button1.Enabled := True;
      End;
    end;
    Comment je fais pour incorporer le traitement du bouton dans un Thread pour pouvoir créer en alternative d'autres composants en dynamique par exemple ?

Discussions similaires

  1. Comment utiliser un joystick sous Delphi 6 ?
    Par PimpW dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 12/11/2007, 22h58
  2. Comment faire une temporisation sous Delphi ?
    Par vodasan dans le forum Langage
    Réponses: 8
    Dernier message: 17/09/2007, 11h29
  3. Comment importer un activeX sous delphi 2005
    Par Akim13 dans le forum EDI
    Réponses: 1
    Dernier message: 08/09/2005, 21h08
  4. Comment créér une collection sous Delphi
    Par PsyKroPack dans le forum Langage
    Réponses: 6
    Dernier message: 11/02/2003, 13h20

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