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 :

Programmer un Progress bar avec la procédure de recherche


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 Programmer un Progress bar avec la procédure de recherche
    Bonjour à tous,
    Voilà, j'ai implémenté une procédure de recherche qui a pour but de parcourir 2 tables et d'y retrouver les enregistrements communs aux deux tables, ceux retrouvés sont ensuite insérés au niveau d'une 3ème table...!
    Jusque là, tout va bien, j'ai ensuite placé sur ma fiche un ProgressBAr qui devrait donner un aperçu sur l'avancement de la recherche!!
    Je l'ai implémenté comme suit au niveau de l'événement OnClick:

    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
    procedure TFAbsence.SearchButtonClick(Sender: TObject);
    Var
    trouv:boolean;
    i,j,k:integer;
    begin
     DataModule3.personnel.First;
     DataModule5.TableEvent.First;
     trouv:=false;
      i:=0;
      j:=0;
      k:=1;
      editAbs.Text:='0';
      editAbs.Update;
      editPrs.Text:='0';
      editPrs.Update;
      searchProgBar.Min:=0;
      searchProgBar.max:=datamodule3.personnel.RecordCount;
    While not  DataModule3.personnel.Eof do
        begin
         while not DataModule5.TableEvent.Eof do
             begin
               if (DataModule3.personnel.FieldValues['PUCE']=DataModule5.TableEvent.FieldValues['PUCE']) and (trouv=false) then
                  begin
                   DataModule5.TabTempPrs.Append;
                   DataModule5.TabTempPrs.FieldValues['NUM']:=k;
                   DataModule5.TabTempPrs.FieldValues['MATRICULE']:=DataModule3.personnel.FieldValues['MATRICULE'];
                   DataModule5.TabTempPrs.FieldValues['PUCE']:=DataModule3.personnel.FieldValues['PUCE'];
                   DataModule5.TabTempPrs.FieldValues['NOM']:=DataModule3.personnel.FieldValues['NOM'];
                   DataModule5.TabTempPrs.FieldValues['PRENOM']:=DataModule3.personnel.FieldValues['PRENOM'];
                   DataModule5.TabTempPrs.FieldValues['FONCTION']:=DataModule3.personnel.FieldValues['FONCTION'];
                   DataModule5.TabTempPrs.FieldValues['DEPT']:=DataModule3.personnel.FieldValues['DEPT'];
                   DataModule5.TabTempPrs.FieldValues['EVENT']:=DataModule5.TableEvent.FieldValues['EVENT'];
                   DataModule5.TabTempPrs.FieldValues['DATES']:=DataModule5.TableEvent.FieldValues['DATE'];
                   DataModule5.TabTempPrs.FieldValues['HEURE']:=DataModule5.TableEvent.FieldValues['HEURE'];
                   DataModule5.TabTempPrs.post;
                   i:=i+1;
                   k:=k+1;
                   editPrs.Text:=inttostr(i);
                   editPrs.Update;
                   DataModule5.TabTempPrs.Next;
                   trouv:=true;
                end;   //end if
    
                DataModule5.TableEvent.Next;
    
         end;
    
                if (trouv=false) then
                 begin
                  DataModule5.TabTempAbs.Append;
                  DataModule5.TabTempAbs.FieldValues['MATRICULE']:=DataModule3.personnel.FieldValues['MATRICULE'];
                  DataModule5.TabTempAbs.FieldValues['PUCE']:=DataModule3.personnel.FieldValues['PUCE'];
                  DataModule5.TabTempAbs.FieldValues['NOM']:=DataModule3.personnel.FieldValues['NOM'];
                  DataModule5.TabTempAbs.FieldValues['PRENOM']:=DataModule3.personnel.FieldValues['PRENOM'];
                  DataModule5.TabTempAbs.FieldValues['FONCTION']:=DataModule3.personnel.FieldValues['FONCTION'];
                  DataModule5.TabTempAbs.FieldValues['DEPT']:=DataModule3.personnel.FieldValues['DEPT'];
                  DataModule5.TabTempAbs.FieldValues['DATES']:=DataModule5.TableEvent.FieldValues['DATE'];
                   DataModule5.TabTempAbs.Post;
                   j:=j+1;
                   editAbs.Text:=inttostr(j);
                   editAbs.update;
                  DataModule5.TabTempAbs.Next;
                  DataModule5.TableEvent.First;
                  DataModule3.personnel.Next;
    
                 end; //end if
    
                  if (trouv=true) then
                  begin
                  DataModule5.TableEvent.First;
                  DataModule3.personnel.Next;
                  trouv:=false;
                  end;
    
    with suiprogressbar4 do
    begin
    Min:=0;
    Max:=datamodule16.DONNEBACS.recordcount;
    datamodule16.DONNEBACS.first;
    for i:= Min to Max do
    begin
    position:=i;
    datamodule16.DONNEBACS.Next;
    edit2.text:=inttostr(Max);
    end;       end; //end While
     end;
    le problème est que le progressbar passe directement de : 0% à 100% à la fin du traitement de recherche sans faire de progression...
    Merci de m'eclairer sur ce point!

    Merci Merci Merci

  2. #2
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Ben j'ai l'impression que tu incrémentes ta progressBar après ta recherche donc le comportement me semble normal.
    (mais ton code est pas super facile à lire faute d'indentation... je te conseille : http://sourceforge.net/projects/jedicodeformat/ )

  3. #3
    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
    Bonjour,
    Merci pour le conseil d'indentation, c'est vrai que j'écris mon code sans trop faire attention, j'essaye tout de même d'espacer et d'aligner les mots clés srutout ceux des boucles et autres blocs, bref, j'en tiendrais compte bien sur, mais pour l'instant , j'ai pas trés bien saisi...???

    Tu dis que le progressBAr devrait marcher???!!!! ça ne pourrait pas être un problème d'actualisation par hasard??? j'ai rencontré le même problème avec un Edit qui ne s'incrémentais pas , jusqu'a ce que l'exécution ne s'achève!!! donc j'ai juste ajouté un Update et le tout été joué!!

    Est ce que ça ne serait pas juste un truc de ce genre???

    Merci +++

  4. #4
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Euh non j'ai dit qu'il me semble normal qu'elle ne marche pas.
    Il me semble que l'incrémentation (la ligne position=...) doit se faire DANS la boucle de recherche alors que tu la fais à la fin de ta recherche.
    Perso je mettrais cette ligne après ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    While not  DataModule3.personnel.Eof do
        begin
    avec peut être une fonction de rafraichissement.

  5. #5
    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
    oui, je l'ai placé comme tu me l'as suggéré, mais idem!!! maintenant il passe au 25% puis au 100%????
    Moi je voudrais un progressbar qui avance progressivement d'où le progressbar!!!

    merci

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 119
    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 119
    Par défaut
    datamodule3, datamodule5, datamodule16, tu t'y retrouve ?
    Aucun outil n'aide a nommer ses composants, et c'est pour cela qu'ensuite, la maintenance est horriblement couteuse à ton employeur,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (trouv=false) then
    if (trouv=true) then
    en pascal cela DOIT s'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if not trouv then
    if trouv then
    les booléens c'est fait pour cela !
    Et en plus, c'est plus rapide ...

    Cela me rappelle, mon test de recrutement pour mon contrat d'apprentissage en entreprise en 1999, la seule question du programmeur fut d'optimiser ce code (j'avais fait du pascal une après-midi chez un pote, la veille de l'entretien, sachant qu'il faisait du delphi, et que je ne connaissais que la HP48Gx et n'ayant pas d'ordi)

    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
     
    function Compare(A, B: Integer; out D: Integer): Boolean;
    var
      C: Boolean;
    begin
      if A < B then
        C := True
      else
        C := False;
     
      if C = False then
        D := 0
      else
        D := B - A;
      Result := C;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function Compare(A, B: Integer; out D: Integer): Boolean;
    begin
      Result := (A < B); 
      if Result then
        D := 0
      else
        D := B - A;
    end;
    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

Discussions similaires

  1. créer une sorte de progress bar avec jsp
    Par p1xl_01 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/02/2010, 09h50
  2. Progress bar avec asp.net
    Par Khalid.bounouader dans le forum ASP.NET
    Réponses: 1
    Dernier message: 29/09/2008, 09h01
  3. utilisation d'une progress bar avec un timer
    Par devock dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/12/2006, 12h57
  4. progress bar avec JSP
    Par srodrigues dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 11/07/2006, 15h48
  5. Progress Bar avec texte superposé
    Par Tenguryu dans le forum C++Builder
    Réponses: 5
    Dernier message: 14/05/2006, 13h31

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