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

Langage Delphi Discussion :

gérer un chrono dans un statusbar


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut gérer un chrono dans un statusbar
    salut

    je voudrais pouvoir gérer un chrono de l'exécution d'une tache.
    A la fin de l'exécution je souhaiterais pouvoir mettre le temps d'execution dans dans statusbar.

    merci pour le coup de pouce.
    a+
    La patience est un Chemin d'or

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Déjà, il te faut rajouter un Panel à ta StatusBar en éditant la propriété Panels.
    Ensuite, il te suffit de mettre du texte dans la propriété Text du Panels ...

    Petit 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
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      // On récupère la valeur du Ticket avant le traitement
      start:=GetTickCount;
     
      // On fait le traitement
      //...
      //...
     
      // On récupère la valeur du Ticket après le traitement
      stop:=GetTickCount;
      // Un peu de maths pour en déduire le temps mis (division par 1000 pour l'avoir en secondes)
      StatusBar1.Panels[0].Text:='Temps: '+FloatToStr((stop-start) / 1000)+' seconde(s)';
    end;
    Start et Stop sont soit des cardinaux, soit des integer soit des extended ...

    J'espère t'avoir aidé
    A+

  3. #3
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut re-salut
    super ça marche bien.
    je souhaiterais pouvoir avoir 2 notification dans le statusbar.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     StatusBar1.Panels[0].Text:='Formatage du fichier '+ExtPart+'  effectué';
         StatusBar1.Panels[1].Text:='Temps: '+FloatToStr((stop-start) / 1000)+' seconde(s)';

    mais juste une coquille car j'ai une affichage tronqué du premier panel.que faire?

    puis je colorier le texte d'un panel?

    a+
    La patience est un Chemin d'or

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Re,

    Il suffit juste de définir la propriété Width de ton Panel :

    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
    var
    longueurTexte:Integer;
    MonTexte,ExtPart:String;
    begin
      ExtPart:='UnBiduleMachinChouette';
      MonTexte:='Formatage du fichier '+ExtPart+'  effectué';
      // On va savoir quelle longueur doit avoir le Panel
      longueurTexte:=Canvas.TextWidth(MonTexte);
      // On dit que le Panels[0] aura une longueur de "longueurTexte+10"
      StatusBar1.Panels[0].Width:=longueurTexte+10;
      // On affiche le texte dans le Panel
      StatusBar1.Panels[0].Text:=MonTexte;
      // Au passage, on le centre ...
      StatusBar1.Panels[0].Alignment:=taCenter;
      StatusBar1.Panels[1].Text:='Temps: 10,25 seconde(s)';
    end;
    Voilà ... bien entendu, à toi de coder si tu veux le faire pour d'autres panels

  5. #5
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut merci
    salut

    merci pour le coup de main trèsn sympa.

    peut tu m'indiquer la propriété a associer au panal pour que le texte soit d'une couleur donnée.

    a+
    La patience est un Chemin d'or

  6. #6
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Alors, là c'est un poil plus compliqué.

    En effet, on va dessiner sur le canevas des panel via l'événement OnDrawPanel qu'offre la StatusBar.
    Il faut prendre le soin de mettre la propriété Style de tes Panels à psOwnerDraw, ce qui signifie que c'est nous qui allons définir comment doit être écrit le texte.

    Ensuite, voici un petit exemple d'utilisation :

    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
     
    var
      Form1: TForm1;
      MonTexte1,MonTexte2,ExtPart:String;
     
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
      Panel: TStatusPanel; const Rect: TRect);
    var
    longueurTexte:Integer;
    CentrerX:integer;
    begin
      // Là on teste pour savoir quel texte doit être formaté de tel ou tel façon
      if Panel.DisplayName = MonTexte1 then
      begin
        // On récupère la taille du texte
        longueurTexte:=Canvas.TextWidth(MonTexte1);
        // On définit la taille du Panels qui lui correspond
        StatusBar1.Panels[0].Width:=Canvas.TextWidth(MonTexte1)+10;
        // On défini la couleur de la fonte  
        StatusBar.Canvas.Font.Color:=clRed;
        // On écrit dans la zone du panel
        StatusBar.Canvas.TextRect(Rect,Rect.Left,Rect.Top,MonTexte1);
      end
      else
      begin
        if Panel.DisplayName = MonTexte2 then
        begin
          longueurTexte:=Canvas.TextWidth(MonTexte2);
          // Ici CentrerX va contenir la position du texte en X qui pas permet de centrer le texte
          CentrerX:=Rect.Right-Rect.Left;
          CentrerX:=Rect.Left+CentrerX div 2 - longueurTexte div 2;
          // J'affecte une valeur de 100 en width supplémentaire pour prouver que mon centrage est effectif
          StatusBar1.Panels[1].Width:=Canvas.TextWidth(MonTexte2)+100;
          // On définit la couleur
          StatusBar.Canvas.Font.Color:=clGreen;
          // On écrit dans le Panel concerné
          StatusBar.Canvas.TextRect(Rect,CentrerX,Rect.Top,MonTexte2);
        end;
      end;
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      ExtPart:='UnBiduleMachinChouette';
      MonTexte1:=' Formatage du fichier '+ExtPart+' effectué';
      MonTexte2:='Temps: 10,25 seconde(s)';
      StatusBar1.Panels[0].Text:=MonTexte1;
      StatusBar1.Panels[1].Text:=MonTexte2;
    end;
     
    end.
    J'espère qu'avec ça tu vas t'en sortir
    Si besoin est, n'hésites pas

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/11/2005, 09h52
  2. [VCL] Ajouter bouton dans un StatusBar
    Par Pedro dans le forum Composants VCL
    Réponses: 4
    Dernier message: 15/02/2005, 13h36
  3. Comment gérer le grec dans MySQL ?
    Par LadyArwen dans le forum Requêtes
    Réponses: 14
    Dernier message: 27/01/2005, 09h24
  4. Comment gérer plusieurs icones dans son exécutable ?
    Par declencher dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2003, 10h49
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39

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