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

Composants VCL Delphi Discussion :

JVGradientProgressbar : ProgressBar qui tourne en continue


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 84
    Par défaut JVGradientProgressbar : ProgressBar qui tourne en continue
    salut a tous

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure Tmenu.FormCreate(Sender: TObject);
    begin
    StatusBar1.ControlStyle := StatusBar1.ControlStyle +[csAcceptsControls];
    JvGradientProgressBar1.Parent := StatusBar1;
    JvGradientProgressBar1.SetBounds(600, 2, 150, 16);
    JvGradientProgressBar1.BringToFront;
    end;
     
    procedure Tmenu.Timer1Timer(Sender: TObject);
    begin
    JvGradientProgressBar1.Position:=JvGradientProgressBar1.Position+5;
    end;
    La question que je pose c'est : je veux que mon progressbar tourne en continue ici il tourne 1 fois et il s'arrete, moi je veux qu'il tourne en continue , ma 2eme question je veux faire apparaitre mon texte en couleur dans le statubar et qu'il clignote en même temps, pour que ca fasse jolie.
    merci d'avance

  2. #2
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Première réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JvGradientProgressBar1.Position:=(JvGradientProgressBar1.Position+5) mod (JvGradientProgressBar1.max+5);

  3. #3
    Membre confirmé Avatar de Tchaill39
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 110
    Par défaut
    Ce qui se passe, c'est que lors de l'incrémentation de ton progressba, tu ne vérifie pas le dépassement de la borne max, du coup il ne se remet pas à 0.
    Essaye un truc du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure Tmenu.Timer1Timer(Sender: TObject); 
    var 
    nouvelle_position : integer
    begin
    nouvelle_position:= JvGradientProgressBar1.Position+5;
    if nouvelle_position > JvGradientProgressBar1.max then 
                begin
               JvGradientProgressBar1.Position:=JvGradientProgressBar1.min
               end;
    JvGradientProgressBar1.Position:=JvGradientProgressBar1.Position+5; 
    end;

  4. #4
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Avec un modulo, ça rend le code plus clair.

  5. #5
    Membre confirmé Avatar de Tchaill39
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 110
    Par défaut
    oui modulo c'est bien mais il faut faire attention à la borne mini du progressbar qui n'est pas forcement nulle

  6. #6
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Première et deuxième réponse combinées :

    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 Tmenu.FormCreate(Sender: TObject);
    begin
    StatusBar1.ControlStyle := StatusBar1.ControlStyle +[csAcceptsControls];
    JvGradientProgressBar1.Parent := StatusBar1;
    JvGradientProgressBar1.SetBounds(600, 2, 150, 16);
    JvGradientProgressBar1.BringToFront;
    end; 
     
    procedure Tmenu.Timer1Timer(Sender: TObject);
    begin
      JvGradientProgressBar1.Position:=(JvGradientProgressBar1.Position+5) mod (JvGradientProgressBar1.max+5);
     
      //si la police de caractère est de la même couleur que le fond (texte invisible)
      if StatusBar1.font.color=StatusBar1.color 
    //alors on fait apparaître le texte en rouge
      then  StatusBar1.font.color:=clRed
    //sinon, on fait disparaître le texte
      else StatusBar1.font.color:=StatusBar1.color;
      Application.ProcessMessages; //(pour que ça redessine correctement...
    end;

  7. #7
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Citation Envoyé par Tchaill39
    oui modulo c'est bien mais il faut faire attention à la borne mini du progressbar qui n'est pas forcement nulle
    Effectivement on supposait que c'était zéro, sinon, on aurait écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with JvGradientProgressBar1 do
      Position:=((Position+5-Min) mod (Max+5-Min))+Min;

  8. #8
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 84
    Par défaut
    merci beaucoup pour la réponse

    mais si je doit faire bouger mon texte dans le statusbar , de droite a gauche et en continue comment doit je faire

    merci d'avance

  9. #9
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    L'idée est de mettre ton texte dans une variable string, avec une dizaine de caractères "espaces" supplémentaires ajoutés au début .
    A partir de là il suffit de déplacer le premier caractère en fin de chaîne à chaque boucle. Comme ça, le texte semblera bouger de droite à gauche.

    Comme ça, par exemple :

    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
     
    TForm1=Class(TForm)
    ...
    ...
    ...
    public
      UnMessage:string;
      ...
    end;
     
    procedure Tmenu.FormCreate(Sender: TObject);
    begin
    UnMessage:='                                                                      *** Le message qui apparait dans ta SatusBar ***';
    StatusBar1.ControlStyle := StatusBar1.ControlStyle +[csAcceptsControls];
    JvGradientProgressBar1.Parent := StatusBar1;
    JvGradientProgressBar1.SetBounds(600, 2, 150, 16);
    JvGradientProgressBar1.BringToFront;
    end;
     
    procedure Tmenu.Timer1Timer(Sender: TObject);
    begin
      JvGradientProgressBar1.Position:=(JvGradientProgressBar1.Position+5) mod (JvGradientProgressBar1.max+5);
     
      //si la police de caractère est de la même couleur que le fond (texte invisible)
      if StatusBar1.font.color=StatusBar1.color
    //alors on fait apparaître le texte en rouge
      then  begin
                 StatusBar1.Text:=UnMessage; //Ou StatusBar1.Caption (J'ai pas mon Delphi avec moi, donc c'est écrit à l'aveugle, à vérifier donc) 
                 StatusBar1.font.color:=clRed;
                 UnMessage:=copy(UnMessage,2,length(UnMessage)-1)+UnMessage[1];
              end;
    //sinon, on fait disparaître le texte
      else StatusBar1.font.color:=StatusBar1.color;
      Application.ProcessMessages; //(pour que ça redessine correctement...
    end;
    voilà le principe.

  10. #10
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 84
    Par défaut
    merci beaucoup

    j'y vais de ce pas pour l'intégrer dans mon projet, et encore une fois merci

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/03/2010, 22h36
  2. [VB6] Un prog. qui tourne en continu en parallèle d'autre appli?
    Par jackazerty dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/08/2004, 19h24
  3. Pb de rand() qui tourne en boucle
    Par MadChris dans le forum MFC
    Réponses: 3
    Dernier message: 26/06/2004, 16h24
  4. Réponses: 5
    Dernier message: 25/06/2004, 15h57
  5. Réponses: 19
    Dernier message: 07/11/2003, 08h10

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