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 :

Ajouter un TProgessBar dans une procédure de recherche !


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 619
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 619
    Par défaut Ajouter un TProgessBar dans une procédure de recherche !
    Bonsoir à toutes et à tous,

    Avec une ancienne procédure de recherche, j'ai un TProgessBar fait maison qui à l'air de fonctionner en utilisant un Timer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    if p1.position = 100 then p1.position := 1 ;
    p1.position := p1.position +1 ;
     
    if p1.position = 100 then begin
     
    timer1.enabled := false;
    w3.Play;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.BchercherClick(Sender: TObject);
    begin
    RichEdit1.Clear;
    timer1.Enabled := true;
    ScruteDossier(Edit1.text,Edit2.Text,attributs,CheckBox8.Checked,False);
     
    end;
    Il me semble que je pourrai me passer du timer en l'incluant directement dans la procédure.

    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
     
    Procedure ScruteDossier(Dossier:string;filtre:string;attributs:integer;recursif:boolean; eff:boolean);
    var
    DossierTrouve:string;
    Resultat:Integer;
    SearchRec:TSearchRec;
    begin
      If Dossier[length(Dossier)]='\' then Dossier:=copy(Dossier,1,length(Dossier)-1);
      if (eff=true) then
       ScruteFichier(Dossier,filtre,attributs,true)
      else ScruteFichier(Dossier,filtre,attributs,false);
     
      if recursif then
      begin
        Resultat:=FindFirst(Dossier+'\'+'*.*',FaDirectory,SearchRec);
        while Resultat=0 do
        begin
          if (SearchRec.Name<>'.') and (SearchRec.Name<>'..')
             and ((SearchRec.Attr and faDirectory)>0)then
          begin
            DossierTrouve:=Dossier+'\'+SearchRec.Name;
     
            // attention, souvent un memo est trop petit pour contenir tous les fichiers d'un disque dur !
            // si vous avez Delphi3 choisisez un TRichEdit vous serez moins limité
            if recursif then
             if (eff=true) then
              ScruteDossier(DossierTrouve,filtre,attributs,recursif,true)
             else ScruteDossier(DossierTrouve,filtre,attributs,recursif,false);
            Application.ProcessMessages;
          end;
          Resultat:=FindNext(SearchRec);
     
        end;
      end;
      FindClose(SearchRec);
     
    end;
    Et mes tests ne sont pas concluants.

    Si quelqu'un avait une idée.

    @+,

    Cincap

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,

    Je ne comprends pas le but du code dans la gestion du timer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if p1.position = 100 then  // (1)
        p1.position := 1;
      p1.position := p1.position + 1;
     
      if p1.position = 100 then    // <=== ICI car le test (1) à vrai ne se fera jamais !
      begin
        timer1.enabled := false;
        w3.Play;
      end;
    end;
    Sinon vous pouvez ajouter dans la procédure ScruteFichier un appel à une procédure qui mettra à jour la progressbar.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure UpdateP1;
    begin
      if Form1.p1.position = 100 then
        Form1.p1.position := 1 ;
      Form1.p1.position := Form1.p1.position +1 ;
     
      if Form1.p1.position = 100 then
      begin
        w3.Play;
      end;
    end;
    Notez que le code n'est pas très propre . Du fait que ce n'est pas une procédure de classe, j'appelle explicitement Form1 !
    D'autre part, cette procédure a toutes les chances d'être appelée plus souvent que si c'était par un événement OnTimer.
    Enfin, dans ce cas et contrairement à la méthode avec timer, la propriété position de la progressbar est réinitialisée dès lors que p1.position = 100...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 619
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 619
    Par défaut
    Bonjour à toutes et à tous,

    @Ph. B., merci pour ta réponse, j'ai donc testé et mon ProgressBar, vacille et ne joue plus son rôle.

    Quant à :

    if p1.position = 100 then // <=== ICI car le test (1) à vrai ne se fera jamais !
    Ce n'est que comme cela que le TProgessBar fonctionne avec le TTimer car si je fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if p1.position = 100 then  begin// (1)
        p1.position := 1;
      p1.position := p1.position + 1;
     
        timer1.enabled := false;
        w3.Play;
      end;
    end;
    end;
    cela ne fonctionne pas.

    @+,

    Cincap

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par cincap Voir le message
    @Ph. B., merci pour ta réponse, j'ai donc testé et mon ProgressBar, vacille et ne joue plus son rôle.
    Vacille ? il tombe de la fenêtre ?

    Plus sérieusement, je voulais dire que le test (1) est inutile...
    Quand position = 100, le timer est arrêté (2° test). La procédure ne sera plus appelée. A moins que la propriété position n'ait été réinitialisé dans du code qui n'a pas été présenté ici ?

    En fait, je voudrais comprendre le but du progressbar ? rendre compte de la progression du traitement (de 0% à 100 % réalisé) ? ou montrer que le traitement est en cours tout simplement (tant que cela bouge) ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 619
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 619
    Par défaut
    @ Ph. B. oups trompé de verbe !

    rendre compte de la progression du traitement (de 0% à 100 % réalisé)
    En fait c'est cela qui m'importe.

    Pour le moment cela le fait avec le timer apparemment mais...

    @+,

    Cincap

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Ok...
    Que fait ScruteFichier(...) que l'on voit être appelé mais dont on ne voit pas le code... Sans vouloir être indiscret !

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. [AC-2003] Comment ajouter un état dans une recherche multicritére
    Par galius21 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/05/2009, 14h17
  3. recherche dans une procédure Stockée
    Par alassane0101 dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 13/07/2008, 03h38
  4. Recherche;ajout et suppression dans une BD via VB
    Par uvany1 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/04/2007, 16h39
  5. ajout et suppression dans une procédure
    Par sissi25 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 30/07/2006, 21h31

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