Bonjour,
Comment afficher une progress bar dynamique dans un TListItem.
Un peu comme emule le fait?
Merci
Bonjour,
Comment afficher une progress bar dynamique dans un TListItem.
Un peu comme emule le fait?
Merci
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
Dans le .cpp 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;
En espérant t'aider,
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); } //---------------------------------------------------------------------------
@+![]()
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?
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,
@ +![]()
J'ai regardé mais en vain car je ne maitrise pas trop la class TCanvas...
Je vais attendre alorsmerci
Bonsoir,
Faut fouiner ....
Donc ci joint juste une proposition, ya peut être plus 'propre':
Et cela rempli la troisième colonne de la première ligne.
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); }
En espérant t'aider,
@+![]()
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?
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 :
Ca vaut peut-etre le coup d'essayer. Tu adaptes bien sur ce code à tes besoins.
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; }
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!![]()
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
Un prête-programmeur ?
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 ...
@+![]()
Re,
Bon, pour le coup du StatusBar, ca a l'air de marcher pas trop mal:
.cpp
.h
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 ++; } //---------------------------------------------------------------------------
Voila un petit début de travail ... en espérant que cela t'aide
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;
@ +
//Edit-> Et donc FredericB avait raison ...
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?
Ben ... moi, je bois de la bière
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,
@+![]()
Merci ça marche très bien.
Juste si on pouvait changer les couleurs![]()
Partager