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

C++Builder Discussion :

Afficher une progressbar dans un TListItem


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut Afficher une progressbar dans un TListItem
    Bonjour,

    Comment afficher une progress bar dynamique dans un TListItem.
    Un peu comme emule le fait?

    Merci

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Une petite proposition...Non pas avec un vrai ProgressBar, mais avec le dessin dans la zone du TListItem.
    Dans le cas ci dessous, je lance un TTimer, mais il faudra tester et adapter en fonction de tes besoins.
    ' LVstb ' correspond simplement au nom de la TListView utilisée...

    Dans le .h de la fiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private:	// Déclarations de l'utilisateur
    	TListItem *pItem;
    	int Decal;
    Dans le .cpp de la fiche
    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
     
    void __fastcall TForm3::Button6Click(TObject *Sender)
    {
    	pItem = LVstb->Items->Item[0];
    	Timer1->Enabled = true;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm3::Timer1Timer(TObject *Sender)
    {
    Decal++;
    TRect rect, arect;
    rect = pItem->DisplayRect(drLabel);
    	arect.top = rect.top;
    	arect.bottom = rect.bottom;
    	arect.left = rect.left;
    	arect.right = rect.left + Decal;
     
    LVstb->Canvas->Brush->Color = clRed;
    	LVstb->Canvas->FillRect(arect);
    }
    //---------------------------------------------------------------------------
    En espérant t'aider,
    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut
    Merci c'est déjà un bon début!!!

    Comment faire pour que cette progressBar s'affiche dans une autre colonne que la première? Exemple sur la 6ème?

  4. #4
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Désolé, je n'aurais pas accès a un bout de Borland de la journée.
    Donc je jette un oeil ce soir.

    En attendant, il faudrait regarder du côté des SubItems et cie (mas pas sur)

    Bon courage,
    @ +

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut
    J'ai regardé mais en vain car je ne maitrise pas trop la class TCanvas...
    Je vais attendre alors merci

  6. #6
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Citation Envoyé par James_ Voir le message
    J'ai regardé mais en vain car je ne maitrise pas trop la class TCanvas...
    Bonsoir,

    Faut fouiner ....
    Donc ci joint juste une proposition, ya peut être plus 'propre':
    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
     
    void __fastcall TForm3::Button6Click(TObject *Sender)
    {
    	pItem = LVstb->Items->Item[0];
    	Timer1->Enabled = true;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm3::Timer1Timer(TObject *Sender)
    {
    Decal++;
    TRect rect, arect;
    rect = pItem->DisplayRect(drLabel);
    	arect.top = rect.top;
    	arect.bottom = rect.bottom;
    	arect.left = ( LVstb->Columns->Items[0]->Width + LVstb->Columns->Items[1]->Width );
    	arect.right = arect.left + Decal;
     
    LVstb->Canvas->Brush->Color = clRed;
    	LVstb->Canvas->FillRect(arect);
    }
    Et cela rempli la troisième colonne de la première ligne.

    En espérant t'aider,
    @+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut
    Ok je tests ça mais du coup c une astuce, que se passe-t-il si on modifie la taille des champs?
    En tout cas c quand même un moyen relativement simple d'afficher une progression, est-elle professionnelle?

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Par défaut
    Salut,

    Je vais peut-etre dire une bétise, mais pourquoi ne pas essayer de mettre une progressBar dans ton TListView. Il y a un exemple de code pour mettre une TProgressBar dans un TStatusBar, alors tu pourrais essayer de faire la même chose.
    Voici le bout de code de la rubrique Trucs et Astuces pour la TStatusBar :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      StatusBar1->ControlStyle = StatusBar1->ControlStyle << csAcceptsControls ;
      ProgressBar1->Left = 0;
      ProgressBar1->Top = 2;
      ProgressBar1->Parent = StatusBar1;
    }
    Ca vaut peut-etre le coup d'essayer. Tu adaptes bien sur ce code à tes besoins.

  9. #9
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Citation Envoyé par James_ Voir le message
    Ok je tests ça mais du coup c une astuce, que se passe-t-il si on modifie la taille des champs?
    En tout cas c quand même un moyen relativement simple d'afficher une progression, est-elle professionnelle?

    Bonjour,

    Tant que le calcul des coordonnées du TRect sont situées dans l'évènement du TTimer, il n'y a pas de problème au redimensionnement des champs, j'ai testé.

    Pour ce qui est de la dernière question, je ne sais quoi répondre ( -> est-elle professionnelle? ). Qu'est ce qui est 'pro' ou pas .... ? Ca pourrait être un bon débat de la taverne, ça. Non ?
    En tout cas, si tu veux que je te rassure, de mon côté je ne sais pas si on peut me qualifier de 'professionnel' car même si je suis censé être payé dans un proche avenir (dans 10 jours ! youpi !) pour ça, je n'ai fait aucune études .... donc, prends garde!

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut
    Dsl pour l'attente de ma réponse mais j'ai du partir en séminaire...

    Quoiqu'il en soit j'ai voulu réfléchir à la solution de FredericB mais je ne sais pas où trouver les infos pour insérer une progressbar dans une TListView.

    Sunchaser, est-il possible de changer la couleur de texte/ rect de différents champs sur une meme ligne d'une TlistView

  11. #11
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Citation Envoyé par James_ Voir le message
    Dsl pour l'attente de ma réponse mais j'ai du partir en séminaire...
    Un prête-programmeur ?



    Citation Envoyé par James_ Voir le message
    Sunchaser, est-il possible de changer la couleur de texte/ rect de différents champs sur une meme ligne d'une TlistView
    Le TLisView possède un bon paquet d'évènements tels que OnDrawItem, OnDrawSubItem, etc. Donc il doit être possible - en se creusant la tête - d'obtenir les effets escomptés.

    Pour ce qui est de l'insertion d'un TProgressBar dans la ListView, a mon humble avis, cela ne doit pas être beaucoup plus dur/différent que pour le StatusBar.
    En revanche, le positionnement sur un Item ou un des SubItems doit être plus 'coton'.
    Mais surtout, je me demande si l'objet sera fonctionnel -> j'avais essayé d'inserer un TButton (par ex) dans une des cellules d'un TStringGrid, il est bien dessiné effectivement mais totalement inactif (impossible de lui affecter le moindre évènement Click() ou autre).
    Mais je suis peut être passé a côté de quelque chose d'évident ...

    @+

  12. #12
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Re,

    Bon, pour le coup du StatusBar, ca a l'air de marcher pas trop mal:

    .cpp
    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
     
    void __fastcall TForm3::Button7Click(TObject *Sender)
    {
    pItem = LVstb->Items->Item[1];
    TRect rect, arect;
    rect = pItem->DisplayRect(drLabel);
     
    LVstb->ControlStyle = LVstb->ControlStyle << csAcceptsControls ;
    pb = new TProgressBar(this);
    	pb->Parent = LVstb;
    	pb->Name = "Pbar";
    	pb->Top = rect.top;
    	pb->Left = ( LVstb->Columns->Items[0]->Width + LVstb->Columns->Items[1]->Width );
    	pb->Height = rect.Height();
    	pb->Width = LVstb->Columns->Items[2]->Width;
    	pb->Smooth = true;
     
    Timer2->Enabled = true;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm3::Timer2Timer(TObject *Sender)
    {
    	pb->Position ++;
    }
    //---------------------------------------------------------------------------
    .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private:	// Déclarations de l'utilisateur
    	TListItem *pItem;
    	int Decal;
    	TProgressBar *pb;
    Voila un petit début de travail ... en espérant que cela t'aide
    @ +

    //Edit-> Et donc FredericB avait raison ...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut
    Merci Sunchaser je regarderai demain!

    Ok il faut chercher mais comment faire pour raisonner à ta manière?
    Je veux dire que je suis plutôt langage structuré et moins objets, et que j'ai du mal à trouver les infos tel qu'en affectant comment Parent la listView à la progress bar et ainsi de suite... ça me fait penser à qqn qui prendrait des médicaments sans connaître les effets secondaires.

    Enfin, comment faire ou est-il possible de placer +ieurs couleurs dans une progression d'une barre?

  14. #14
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Citation Envoyé par James_ Voir le message
    Ok il faut chercher mais comment faire pour raisonner à ta manière?
    Ben ... moi, je bois de la bière

    Citation Envoyé par James_ Voir le message
    Enfin, comment faire ou est-il possible de placer +ieurs couleurs dans une progression d'une barre?
    J'ai jeté un oeil vite fait sur le net, et a priori il faut passer par un composant 'maison', dérivant du classique TListView...
    Sorry, mais je ne pourrais pas regarder plus loin ce soir, bien que cela doit être bien amusant a faire ...

    Bon courage,
    @+

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut
    Merci ça marche très bien.
    Juste si on pouvait changer les couleurs

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/08/2012, 10h08
  2. Comment afficher un ProgressBar dans une DBGrid
    Par Luc84 dans le forum C++Builder
    Réponses: 4
    Dernier message: 18/02/2010, 11h20
  3. [MFC] afficher une ProgressBar dans une barre d'etat
    Par guillaume21 dans le forum MFC
    Réponses: 5
    Dernier message: 30/03/2007, 11h16
  4. Afficher une icone dans DBgrid
    Par boyerf dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/02/2004, 15h45
  5. Réponses: 3
    Dernier message: 28/01/2004, 14h55

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