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

Lazarus Pascal Discussion :

Petit problème avec les barres de progression


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Points : 63
    Points
    63
    Par défaut Petit problème avec les barres de progression
    Bonjour,
    merci pour toute votre aide si précieuse.
    //-------
    J'ai un problème avec les barres de progression.
    elles n'arrivent pas au bout, tout du moins visuellement et j'aimerais savoir pourquoi ?
    je trouve que cela ne fait pas très bien.
    (je n'avais pas de problème sous Delphi 7 avec le même 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, StdCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        OpenDialog1: TOpenDialog;
        ProgressBar1: TProgressBar;
        SaveDialog1: TSaveDialog;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
     
      public
     
      end;
     
    Const
      NbOctet = 5000000;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.Button1Click(Sender: TObject);
      var
        i                   : integer;                                              // compteur de boucles
        FSourceL            : TFileStream;                                          // Fichier à construire
        NomDuFichier        : String;                                               // nom du fichier à construire
      begin
        SaveDialog1.Filter:='*.Sav';
        if Savedialog1.Execute then begin                                           // ouvre la boîte de dialogue 'enregistrer sous...'
          ProgressBar1.Visible:=true;                                               // Affichage de la barre de progression pendant la sauvegarde
          NomDuFichier:='';
          Repeat
            NomDuFichier:=SaveDialog1.FileName;                                     // récupère le nom du fichier
          until (NomDuFichier<>'');
          FSourceL:=TFileStream.Create(NomDuFichier, fmCreate or fmOpenWrite);      // ouvre le fichier d'entrée en Stream File
          try
            for i:=1 to NbOctet do begin                                            // pour toutes les impulsions du filtre actif
              ProgressBar1.Position:=round(i*100/NbOctet);                          // Position dans la barre de progression
              FSourceL.Write(i, SizeOf(i));
            end;
          finally
            if assigned (FSourceL) then FSourceL.Free;                              // destruction de l'objet TfileStream
            ProgressBar1.Visible:=false;                                            // Fin de l'affichage de la barre de progression
            Button2.Enabled:=true;                                                  // active le bouton 'Restauration'
          end;
        end;
      end;
     
    procedure TForm1.Button2Click(Sender: TObject);
      var
        i                   : integer;                                              // compteur de boucles
        FSourceL            : TFileStream;                                          // Fichier à construire
        NomDuFichier        : String;                                               // nom du fichier à construire
        Entier              : integer;                                              // entier à restaurer
      begin
        Entier:=0;
        OpenDialog1.Filter:='*.Sav';
        if OpenDialog1.Execute then begin                                           // ouvre la boîte de dialogue 'enregistrer sous...'
          ProgressBar1.Visible:=true;                                               // Affichage de la barre de progression pendant la sauvegarde
          NomDuFichier:='';
          Repeat
            NomDuFichier:=OpenDialog1.FileName;                                     // récupère le nom du fichier
          until (NomDuFichier<>'');
          FSourceL:=TFileStream.Create(NomDuFichier, fmOpenRead);                   // ouvre le fichier d'entrée en Stream File
          try
            for i:=1 to NbOctet do begin                                            // pour toutes les impulsions du filtre actif
              ProgressBar1.Position:=round(i*100/NbOctet);                          // Position dans la barre de progression
              FSourceL.Read(Entier, SizeOf(Entier));
            end;
          finally
            if assigned (FSourceL) then FSourceL.Free;                              // destruction de l'objet TfileStream
            ProgressBar1.Visible:=false;                                            // Fin de l'affichage de la barre de progression
          end;
        end;
      end;
     
     
    end.
    le bout de code complet est joint au fichier.
    merci et bonne journée à tous
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonsoir,

    Citation Envoyé par neho88 Voir le message
    elles n'arrivent pas au bout, tout du moins visuellement et j'aimerais savoir pourquoi ?
    Comment peux-tu le voir puisque une fois au bout de la boucle tu masques la progression ?
    (code un poil allégé pour aller à l'essentiel et montrer l'idée) :

    Citation Envoyé par neho88 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            for i:=1 to NbOctet do ProgressBar1.Position:=round(i*100/NbOctet); 
          finally
            ProgressBar1.Visible:=false;
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Ici (sous Linux), même la progression ne s'affiche pas. Il faut que je rajoute ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
              ProgressBar1.Position:=round(i*100/NbOctet);                          // Position dans la barre de progression
              Application.ProcessMessages; // <---
    Pour voir la barre entièrement remplie, je supprime cette ligne (comme Jipété l'a suggéré) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            //ProgressBar1.Visible:=false;
    Enfin, je note qu'il n'est pas utile de mettre à jour la barre de progression cinq millions de fois, puisqu'elle n'a que 280 pixels de largeur.

    Donc j'aurais peut-être fait quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        step: integer;
      begin
        // ...
          try
            step := NbOctet div ProgressBar1.Width;
            for i:=1 to NbOctet do begin
              if i mod step = 0 then
              begin
                ProgressBar1.Position:=round(i*100/NbOctet);
                Application.ProcessMessages; // <---
              end;
    Rien qu'à l'oreille, j'ai l'impression que la machine me dit merci.

    Mais ce n'est pas encore optimal, puisque la variable Position, dans l'état actuel du programme, ne peut avoir que 101 valeurs différentes...
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    il faut juste calculer un coefficient


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Position := (NbOctet*100) Div NbTotOctect; //
    PS : pour info le 100 correspond à la taille maxi de position dans un progessbar
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Points : 63
    Points
    63
    Par défaut Petit problème avec les barres de progression
    Bonjour,
    merci pour toutes vos réponses.
    //-----
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Comment peux-tu le voir puisque une fois au bout de la boucle tu masques la progression ?
    effectivement, le but n'est pas de voir la barre de progression, mais qu'elle indique à l'utilisateur la progression dans la tache en cours.
    donc, sur une tâche assez longue, j'affiche une barre de progression qui s'effacera quand la tâche est finie.
    et tant qu'a faire, autant que la barre reflète réellement la progression.
    or, sur certain chargement, elle ne dépasse pas 20% de la barre.
    autant ne rien afficher, plutôt qu'une information fausse.
    //-----
    2) l'ajout de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.ProcessMessages; // <---
    ne change rien.
    par contre,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "je note qu'il n'est pas utile de mettre à jour la barre de progression cinq millions de fois, puisqu'elle n'a que 280 pixels de largeur."
    est très pertinent.
    //-----
    3)Le calcul du coefficient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Position := (NbOctet*100) Div NbTotOctect; //
    ne change rien.

    Bonne journée

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Points : 63
    Points
    63
    Par défaut Petit problème avec les barres de progression
    Bonjour,
    dans l'exemple suivant, la barre ne dépasse pas les 50 %.
    bonne journé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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, StdCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        OpenDialog1: TOpenDialog;
        ProgressBar1: TProgressBar;
        SaveDialog1: TSaveDialog;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
     
      public
     
      end;
     
    Const
      NbOctet = 5000;
     
    var
      Form1: TForm1;
      TgRestore   : boolean    = false;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.Button1Click(Sender: TObject);
      var
        i                   : integer;                                              // compteur de boucles
        FSourceL            : TFileStream;                                          // Fichier à construire
        NomDuFichier        : String;                                               // nom du fichier à construire
        Step                : integer;                                              // limitation de l'affichage de la barre de progression
      begin
        SaveDialog1.Filter:='*.Sav';
        if Savedialog1.Execute then begin                                           // ouvre la boîte de dialogue 'enregistrer sous...'
          ProgressBar1.Visible:=true;                                               // Affichage de la barre de progression pendant la sauvegarde
          NomDuFichier:='';
          Repeat
            NomDuFichier:=SaveDialog1.FileName;                                     // récupère le nom du fichier
          until (NomDuFichier<>'');
          FSourceL:=TFileStream.Create(NomDuFichier, fmCreate or fmOpenWrite);      // ouvre le fichier d'entrée en Stream File
          try
            step:=NbOctet div ProgressBar1.Width;
            for i:=1 to NbOctet do begin                                            // pour toutes les impulsions du filtre actif
              if i mod step = 0 then begin
                ProgressBar1.Position:=round(i*100 div NbOctet);                    // Position dans la barre de progression
                Application.ProcessMessages;
              end;
              FSourceL.Write(i, SizeOf(i));
              Button1.Caption:=IntToStr(i);                                         // juste pour ralentir !
            end;
          finally
            if assigned (FSourceL) then FSourceL.Free;                              // destruction de l'objet TfileStream
            ProgressBar1.Visible:=false;                                            // Fin de l'affichage de la barre de progression
            Button2.Enabled:=true;                                                  // active le bouton 'Restauration'
          end;
        end;
      end;
     
    procedure TForm1.Button2Click(Sender: TObject);
      var
        i                   : integer;                                              // compteur de boucles
        FSourceL            : TFileStream;                                          // Fichier à construire
        NomDuFichier        : String;                                               // nom du fichier à construire
        Entier              : integer;                                              // entier à restaurer
        Step                : integer;                                              // limitation de l'affichage de la barre de progression
      begin
        Entier:=0;
        OpenDialog1.Filter:='*.Sav';
        if OpenDialog1.Execute then begin                                           // ouvre la boîte de dialogue 'enregistrer sous...'
          ProgressBar1.Visible:=true;                                               // Affichage de la barre de progression pendant la sauvegarde
          NomDuFichier:='';
          Repeat
            NomDuFichier:=OpenDialog1.FileName;                                     // récupère le nom du fichier
          until (NomDuFichier<>'');
          FSourceL:=TFileStream.Create(NomDuFichier, fmOpenRead);                   // ouvre le fichier d'entrée en Stream File
          try
            step:=NbOctet div ProgressBar1.Width;
            for i:=1 to NbOctet do begin                                            // pour toutes les impulsions du filtre actif
              if i mod step = 0 then begin
                ProgressBar1.Position:=round(i*100 div NbOctet);                    // Position dans la barre de progression
                Application.ProcessMessages;
              end;
              FSourceL.Read(Entier, SizeOf(Entier));
              Button1.Caption:=IntToStr(i);                                         // juste pour ralentir !
            end;
          finally
            if assigned (FSourceL) then FSourceL.Free;                              // destruction de l'objet TfileStream
            ProgressBar1.Visible:=false;                                            // Fin de l'affichage de la barre de progression
          end;
        end;
      end;
     
     
    end.
    Fichiers attachés Fichiers attachés

  7. #7
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut essayes comme ça :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    const 
      NbOctet = 5000;
      step = 10; // mise à jour de la barre de progression tous les 10% 
     
    procedure TForm1.Button1Click(Sender: TObject);
      var
        i                     : integer;                                              // compteur de boucles
        FSourceL        : TFileStream;                                       // Fichier à construire
        NomDuFichier : String;                                               // nom du fichier à construire
        pos                : integer;                                             // limitation de l'affichage de la barre de progression
     begin
        SaveDialog1.Filter:='*.Sav';
        if Savedialog1.Execute then 
        begin                                           // ouvre la boîte de dialogue 'enregistrer sous...'      
          NomDuFichier:='';
          Repeat
            NomDuFichier:=SaveDialog1.FileName;     // récupère le nom du fichier
          until (NomDuFichier<>'');
     
          ProgressBar1.Visible:=true;                                               // Affichage de la barre de progression pendant la sauvegarde
          FSourceL:=TFileStream.Create(NomDuFichier, fmCreate or fmOpenWrite); 
          try       
            for i:=1 to NbOctet do   // pour toutes les impulsions du filtre actif
            begin          
              pos = (i*100) div NbOctet;
              if ((i mod step) = 0) then 
              begin
                ProgressBar1.Position:=pos;                    // Position dans la barre de progression
                Application.ProcessMessages;
              end;
              FSourceL.Write(i, SizeOf(i));
              sleep(1000); // pour ralentir
            end;
            ProgressBar1.Position:=100; // au cas ou le dernier "pos" ferai 98 ou 99;
          finally   
            FSourceL.Free;                              // destruction de l'objet TfileStream
            ProgressBar1.Visible:=false;           // Fin de l'affichage de la barre de progression
            Button2.Enabled:=true;                 // active le bouton 'Restauration'
          end;
      end;
    end;
    A+
    Jerome
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  8. #8
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Je ferais juste glisser le Sleep en fin de boucle, pour laisser voir la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
              if ((i mod step) = 0) then 
              begin
                ProgressBar1.Position:=pos;                    // Position dans la barre de progression
                Application.ProcessMessages;
              end;
              FSourceL.Write(i, SizeOf(i));
     
            end;
            ProgressBar1.Position:=100; // au cas ou le dernier "pos" ferai 98 ou 99;
          finally   
            FSourceL.Free;                              // destruction de l'objet TfileStream
            Sleep(500); // pour laisser le temps de voir la complétude
            ProgressBar1.Visible:=false;
    Mais si c'est trop rapide dans certains cas, c'est qu'il n'y a pas besoin de barre de progression mais juste d'un curseur ou d'une animation.

    Au passage, j'ai du mal à comprendre le repeat until filename <> '' qui ne repasse pas par le dialog.execute
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Si on voulait calculer Step de cette façon, il serait logique de l'utiliser dans l'incrémentation par StepBy. Ici on a un pas de 17 (5000 div 280) mais la position n'est effectivement modifiée que tous les 50. 2/3 des rafraîchissements sont inutiles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ProgressBar1.Max := NbOctets;
     
    Step := NbOctets div ProgressBar1.ClientWidth;
     
    for var i := 1 to NbOctets do
    begin
      if i mod Step = 0 then
        ProgressBar1.StepBy(Step);
    end;
     
    ProgressBar1.Position := ProgressBar1.Max;  // Si vraiment utile
    Ou par la méthode StepIt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ProgressBar1.Max  := NbOctets;
    ProgressBar1.Step := NbOctets div ProgressBar1.ClientWidth;
     
    for i := 1 to NbOctets do
    begin
      if i mod ProgressBar1.Step = 0 then
        ProgressBar1.StepIt;
    end;
     
    ProgressBar1.Position := ProgressBar1.Max;  // Si vraiment utile
    Et au moins sous Windows, StepIt et StepBy rafraîchissent automatiquement l'affichage, pas besoin de Application.ProcessMessages.

  10. #10
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 332
    Points : 4 153
    Points
    4 153
    Par défaut Barres barres ?
    Bonjour,

    Les barres de progression s'avèrent très consommatrices de ressources (à tel point que je les évite dans les processus critiques). Il faut donc effectivement éviter de les actualiser trop souvent.

    Aux démarches précitées basées sur le pas élémentaire, il est possible d'ajouter celle sur le temps. Si l'œil perçoit des vitesses de 1/10 de seconde (plus court si on s'intéresse à la stabilité perçue), le cerveau met plus de 1/3 de seconde pour "lire" la position. Aussi aller plus vite ne sert pratiquement à rien (sauf peut être donner un sentiment de vitesse alors même que le processus est ralenti).

    Pour revenir sur le fonctionnement en pas, sauf si nous avons une barre de progression qui fait du yoyo, nous pouvons utiliser le fait d'une incrémentation systématique pour éviter tout modulo en créant une variable i_next = 0 puis Step puis 2*Step , 3*Step... L'affichage est alors actualisé à chaque fois que i >= i_next (et i_next augmenté de Step). Cela suppose, comme dans l'exemple donné, que i ne franchit pas plusieurs Step entre deux tests d'opportunité d"affichage.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

Discussions similaires

  1. Petit problème avec les pointeurs et variable
    Par mitherkiller dans le forum C
    Réponses: 5
    Dernier message: 09/03/2007, 22h05
  2. Problème avec une Barre de Progression
    Par hugo69 dans le forum Access
    Réponses: 1
    Dernier message: 15/12/2006, 15h37
  3. [VBA-Excel] Petit problème avec les formulaires
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/08/2006, 09h22
  4. Petit problème avec les accents circonflexes...
    Par Harvester dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 29/11/2005, 18h44

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