TChart [Résolu]

yannba 139 Messages postés mercredi 4 janvier 2006Date d'inscription 7 septembre 2010 Dernière intervention - 18 févr. 2006 à 18:56 - Dernière réponse : cs_ibrahimakhalil 28 Messages postés samedi 29 avril 2006Date d'inscription 11 mars 2011 Dernière intervention
- 28 mars 2007 à 14:59
J'utilise un graphique avec une base de données :

procedure CalculGraphique;
var i,j:integer;
donnees : array [0..1000] of real;
begin
With Form5.Chart1 do
Begin
Series1.Clear;
for i:=0 to 1000 do donnees[i]:=0;
i:=0;
j:=0;
DM.ADOTableOperations.First;
With DM.ADOTableOperations do
While not Eof do
begin
donnees[i]:=FieldByName('Montant').Value;
i:=i+1;
Next;
end;
j:=i-1;
for i:=0 to j do Series1.Add(donnees[i]); // Ligne
for i:=0 to j do Series2.Add(donnees[i]); // Histogramme
for i:=0 to j do Series3.Add(donnees[i]); // Sectoriel
for i:=0 to j do Series4.Add(donnees[i]); // Aire
end;
end;


procedure TForm5.FormCreate(Sender: TObject);
Begin
CalculGraphique;
End;

N'ayant pas trouvé de tuto sur les graphiques + ADO, j'ai essayé d'écrire le code. Si vous connaissez plus simple, ou des tutos sur le web, je suis preneur ...

Ceci dit, comprend pas pourquoi :
identificateur non declaré : series1 dans ma procedure calculgraphique ?
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Cirec 4225 Messages postés vendredi 23 juillet 2004Date d'inscription 24 juin 2018 Dernière intervention - 18 févr. 2006 à 19:33
3
Merci
Salut,
je suppose que Series est un TChart si non il faut remplacer par le bon composant
For X := 1 To 4 Do
With TChart(FindComponent('Series' + IntToStr(X))) Do
For i: =0 to j do Add(donnees[i]); // Ligne



@+
Cirec

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 18 févr. 2006 à 23:11
3
Merci
Il faut ajouter une série à la liste des séries et non au graphique lui-même :

procedure Tform1.CalculGraphique;
var
  i, j, x: integer;
  donnees: arrayof real; //tableau dynamique
  s: TChartSeries;
begin
with Chart1 do
begin
    Series1.Clear;
    //plus rapide qu'une boucle
    FillChar(donnees, SizeOf(Donnees), 0);
    i :=  0;
    j := 0;
    DM.ADOTableOperations.First;
    //dimensionner le tableau
    SetLength(donnees, DM.ADOTableOperations.RecordCount);

     with  DM.ADOTableOperations do
whilenot Eof do
begin
        donnees[i] : = FieldByName('Montant').AsFloat;
        inc(i);
        Next;
      end;
    for X :=  1 to 4do
begin
if FindComponent('Series' + intToStr(X)) is TChartSeries then
begin
        S : = FindComponent('Series' + intToStr(X)) as TChartSeries;
        with S do
//attention : j est toujours égal à zéro
for i :=  0 to  j do
            Add(donnees[i]); // Ligne
end;
    end;
  end;
end;

Comme je ne comprends pas bien ton algorithme, je ne l'ai pas retouché. En effet, je ne vois pas pourquoi tu veux stocker les données dans un tableau avant de les affecter aux séries. De plus, la variable J est initialisée à zéro, ce qui fait que dans la dernière boucle, il ne se passera rien. Sans doute as-tu oublié d'affecter i à j quelque part...

A mon avis, t'es pas tiré d'affaire et un peu de réflexion avant de poser un tas de questions sur le forum serait une bonne formule pour apprendre.

<HR color =#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
Cirec 4225 Messages postés vendredi 23 juillet 2004Date d'inscription 24 juin 2018 Dernière intervention - 18 févr. 2006 à 19:17
0
Merci
Salut,
si tu as un message identificateur non déclarer c'est que tu as oublier de le faire où il est pas visible dans cette procedure.
si c'est un composant que tu as déposé sur la form dans ce cas il faut faire :

Form5.Serie1..... puisque ta procédure est extèrne à Form5 " procedure CalculGraphique;"

Pour que le composant soit visible à l'intérieur de ta procédure il aurait fallu que tu la déclares comme ceci:

procedure TForm5.CalculGraphique;

@+
Cirec
Commenter la réponse de Cirec
yannba 139 Messages postés mercredi 4 janvier 2006Date d'inscription 7 septembre 2010 Dernière intervention - 18 févr. 2006 à 19:25
0
Merci
Je l'avais deja fait et ca marchait pas, et je viens de redemarrer Delphi, et là ca marche ... C'est pas la 1° fois qu'il me fait ca ! Fa falloir que je reinstalle delphi, moi !

Sinon, que penses tu de ce code ? Y a pas moyen de faire mieux ?
Commenter la réponse de yannba
yannba 139 Messages postés mercredi 4 janvier 2006Date d'inscription 7 septembre 2010 Dernière intervention - 18 févr. 2006 à 19:50
0
Merci
procedure Tform5.CalculGraphique;
var i,j,x:integer;
donnees : array [0..1000] of real;
begin
With Chart1 do
Begin
Series1.Clear;
for i:=0 to 1000 do donnees[i]:=0;
i:=0;
j:=0;
DM.ADOTableOperations.First;
With DM.ADOTableOperations do
While not Eof do
begin
donnees[i]:=FieldByName('Montant').Value;
i:=i+1;
Next;
end;
For X := 1 To 4 Do
With TChart(FindComponent('Series' + IntToStr(X))) Do
For i:=0 to j do Add(donnees[i]); // Ligne
end;
end;

Series est bien un TChart.
add : identificateur non déclaré ... toujours le meme probleme ....
Commenter la réponse de yannba
yannba 139 Messages postés mercredi 4 janvier 2006Date d'inscription 7 septembre 2010 Dernière intervention - 3 mars 2006 à 11:20
0
Merci
Pour Delphiprog :
"A mon avis, t'es pas tiré d'affaire et un peu de réflexion avant de poser un tas de questions sur le forum serait une bonne formule pour apprendre"

Le problème était que j'avais trouvé des codes sur le net, et qu'ils utilisaient tous un tableau ... Vu que l'aide de Delphi, à moins d'etre un informaticien, on n'y comprend rien, je suis obligé de m'inspirer du savoir-faire des autres pour avancer ... J'ai juste derrière moi que 2 MOIS d'informatique en PROGRAMMATION.
Ceci dit :
- J'ai reglé effectivement mon problème en enlevant le tableau
- Ton code, m'a permis de comprendre comment fonctionner le "array" que j'ai aussitot mis en application, avec pour cette fois une utilisation adéquate !

Merci également à Cirec !! ... avec un peu de retard, certes, mais j'avance doucement.
Commenter la réponse de yannba
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 4 mars 2006 à 23:52
0
Merci
Excuse-moi si ma remarque t'a blessé. Mais le mélange de problèmes avec un algorithme qui ne semblait mener nul part me faisait penser que tu avais les idées confuses. Mais s'il s'agit de code récupéré sur le net, sois prudent. Même dans les bouquins les codes fournis ne marchent pas souvent tels quels.

Dire que l'aide en ligne fournie avec Delphi est mal fichue c'est parler un peu vite.
Et d'une, elle est en français. Et de deux, c'est surement l'une des plus claires. En revanche, elle n'est pas toujours en phase avec les nouvelles classes proposées dans chacune des versions. Certains concepts ou fonctionnalités avancés sont bien souvent restés dans l'ombre faute de documentation. Il ne suffit pas de faire un bon produit ou un bon composant. Sans documentation il n'est rien et tombe vite dans les oubliettes.
Imagine que le composant TChart ait été livré sans documentation !
Ce magnifique et puissant composant aurait été relégué au 10e sous-sol.
C'est vrai que, pour quelqu'un qui débute, s'attaquer à l'utilisation de TChart ça ne doit pas être évident si on ne possède pas les bases.
Courage, tiens bon


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
cs_ibrahimakhalil 28 Messages postés samedi 29 avril 2006Date d'inscription 11 mars 2011 Dernière intervention - 28 mars 2007 à 14:59
0
Merci
    je travail sur un projet avec tchart et je dois tracer beaucoup de droites en les lier avec des points que j'ai designé comme un série de points les autres séries sont des lignes, mais je n'arrive pas à joindre aux points les lignes
je veux qu'à chaque fois qu'on clique sur le bouton qui trace la droite qu'une série se crée automatiquement mais mis
 Tpoint=record
    x:integer;
    y:integer;end;
dans la procedure qui place les points j'ai mis
with serie1 do
addxy(strtoint(edit1.text),strtoint(edit2.text),edit3.text,clteecolor);
// edit3.text est le nom du noeud
et dans celui qui tarce les droites j'i mis
series:=Tlineseris.create(self);
series.parentChart:=chart1;
addxy(c.x,c.y,'',clteecolor);// c.x,c.y sont les point qui séront joint

si j'execute le côte gauche du chart se bouré de chiffre
priere de bien vouloir m'aider
Commenter la réponse de cs_ibrahimakhalil

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.