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

  1. #1
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    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 chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    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 régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    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 chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    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 régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    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 sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 447
    Points : 24 844
    Points
    24 844
    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

  7. #7
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Bonjour

    Merci à ShaiLeTroll pour ses recommandations, en fait je débute en delphi, et ce n'est pas vraiment mon travail, je suis plutôt responsable du réseau interne de notre entreprise, Cisco et compagnie... on ne m'a chargé que de cette petite application pour aider un peu, alors je m'exerce tant que je peux à mes heures perdues...
    Bref, le fait est que mon progressbar n'avance toujours pas, en fait la procédure de recherche suit cette logique:

    Ouvrir table1, se positionner sur 1er enregistrement
    Ouvrir table2, se positionner sur 1er enregistrement
    Parcourir toute la table2, en vue de rechercher tout enregistrement ayant le même num de puce que le premier enregistrement de table1.
    ensuite, rebelotte pour tous les enregistrements de ta table1...

    Alors dans cette configuration des choses, comment insérer les instructions relatives à mon progressbar au niveau de la procédure de recherche pour qu'il soit synchronisé avec l'avancement de la recherche...

    Merci merci merci++++

  8. #8
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Mille excuses, en fait j'ai recopier la partie du progressbar d'un test que j'avais fais, le code source est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with searchprogbar do
    begin
    Min:=0;
    Max:=datamodule3.Personnel.recordcount;
    datamodule3.Personnel.first;
    for i:= Min to Max do
    begin
    position:=i;
    datamodule3.Personnel.Next;
    end;
    end;
    Voilà, c'est plutôt ça, (Ta table personnel est celle sur laquelle je me positionne en premier, pour vérifier au niveau de table 2 si il n'ya pas d'occurence...

    Désolée encore!!!!

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 447
    Points : 24 844
    Points
    24 844
    Par défaut
    Sinon un SELECT DISTINCT PUCE avec un INNER JOIN avec comme clause les champ en commun (PUCE) ne ferait-il pas le travail aussi bien (valable pour les bases SQL, pour Access, DBase ou Paradox, le traitement via TTable sera plus rapide)
    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

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    et un truc style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    with searchprogbar do
    begin
      Min:=0;
      Max:=datamodule3.Personnel.recordcount;
      datamodule3.Personnel.first;
      for i:= Min to Max do
      begin
        position:=i;
        datamodule3.Personnel.Next;
        refresh;
      end;
    end;
    ???

  11. #11
    Membre régulier Avatar de djeckelle
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2004
    Messages : 87
    Points : 101
    Points
    101
    Par défaut
    Bonjour à tous,

    Je suis d'accord avec le code proposé par philnext je préciserais juste qu'il faut aussi vérifier la propriété step de l'objet TprogressBar.
    "Il vaut mieux échouer, apprendre et s'améliorer
    que ne pas avancer."

    [Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

    PS : Pensez au petit

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 447
    Points : 24 844
    Points
    24 844
    Par défaut
    Cela arrive à quelqu'un de rechercher un peu sur le forum
    Comment mettre à jour une Progressbar en temps réel ?

    Personnellement, j'ai énormément de boucle sur DataSet avec ProgressBar, et je n'ai jamais eu de soucis, par contre je spécifie toujours un Step à 1, et j'utilise StepIt, il semble que selon la puissance de la machine StepIt soit plus effiace que Position ... ce n'est surement qu'une impression ...

    Sinon, si le traitement dure moins d'une seconde, tu n'auras jamais le temps de le voir progresser ...

    Sinon, moi j'écrit ceci pour rigoler, cela progresse fluidement à part que cela va tellement vite que cela clignote un peu ... d'ailleurs souminet, tu pourrais utiliser directement l'objet TMultiProgressBarForm, avec deux barres, l'une bougeant avec Table1, et l'autre Table2 ...

    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
    procedure TFrmTestProgressBar.BtnMultiClick(Sender: TObject);
    var
      I, J: Integer;
    begin
      with TMultiProgressBarForm.Create(nil, 2) do
      begin
        try
          Max[0] := 100;
          for I := 0 to 99 do
          begin
            Position[0] := I;
     
            Max[1] := 100;
            for J := 0 to 99 do
            begin
              Position[1] := J; 
            end;
          end;
        finally
          Free();
        end;
      end;
    end;
    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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    unit uMultiProgressBar;
     
    interface
     
    uses
       Classes, Forms, Controls, ComCtrls;
     
    type
      TMultiProgressBarForm = class(TForm)
      private
        FBarCount: Integer;
        function GetBars(const Index: Integer): TProgressBar;
        function GetBarCount(): Integer;
        function GetMax(const Index: Integer): Integer;
        procedure SetMax(const Index, Value: Integer);
        function GetPosition(const Index: Integer): Integer;
        procedure SetPosition(const Index, Value: Integer);
      protected
        property Bars[const Index: Integer]: TProgressBar read GetBars;
      public
        constructor Create(AOwner: TComponent; BarCount: Integer); reintroduce;
        procedure StepBy(const Index: Integer; Delta: Integer = 1);
        property Max[const Index: Integer]: Integer read GetMax write SetMax;
        property Position[const Index: Integer]: Integer read GetPosition write SetPosition;
        property BarCount: Integer read GetBarCount;
      end;
     
    implementation
     
     
    constructor TMultiProgressBarForm.Create(AOwner: TComponent; BarCount: Integer);
    var
      I: Integer;
      ProgressBar: TProgressBar;
    begin
      inherited CreateNew(AOwner); // Pas de DFM
     
      FBarCount := BarCount;
      if FBarCount > 0 then
      begin
        Width := Screen.WorkAreaWidth div 2;
     
        for I := 0 to BarCount - 1 do
        begin
          ProgressBar := TProgressBar.Create(Self);
          ProgressBar.Parent := Self;
          ProgressBar.Align := alTop;
          ProgressBar.Tag := I;
          ProgressBar.Max := 100;
          ProgressBar.Smooth := True;
        end;
     
        BorderStyle := bsToolWindow;
        inherited Position := poScreenCenter;
        FormStyle := fsStayOnTop;
        Enabled := False;
        AutoSize := True;
     
        Show();
        BringToFront();
      end;
    end;
     
    procedure TMultiProgressBarForm.StepBy(const Index: Integer; Delta: Integer = 1);
    begin
      if Index < FBarCount then
        Bars[Index].StepBy(Delta);
    end;
     
    function TMultiProgressBarForm.GetBars(const Index: Integer): TProgressBar;
    var
      I: Integer;
    begin
      if Index < FBarCount then
      begin
        for I := 0 to ComponentCount - 1 do
        begin
          if (Components[I] is TProgressBar) and (TProgressBar(Components[I]).Tag = Index) then
          begin
            Result := TProgressBar(Components[I]);
            Exit;
          end;
        end;
      end;
     
      Result := nil;
    end;
     
    function TMultiProgressBarForm.GetBarCount(): Integer;
    begin
      Result := FBarCount;
    end;
     
    function TMultiProgressBarForm.GetMax(const Index: Integer): Integer;
    begin
      if Index < FBarCount then
        Result := Bars[Index].Max
      else
        Result := 0;
    end;
     
    procedure TMultiProgressBarForm.SetMax(const Index, Value: Integer);
    begin
      if Index < FBarCount then
        with Bars[Index] do
        begin
          Max := Value;
          Position := 0;
        end;
    end;
     
    function TMultiProgressBarForm.GetPosition(const Index: Integer): Integer;
    begin
      if Index < FBarCount then
        Result := Bars[Index].Position
      else
        Result := 0;
    end;
     
    procedure TMultiProgressBarForm.SetPosition(const Index, Value: Integer);
    begin
      if Index < FBarCount then
      begin
        Bars[Index].Position := Value;
      end;
    end;
     
    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