yannba
Messages postés133Date d'inscriptionmercredi 4 janvier 2006StatutMembreDernière intervention 7 septembre 2010
-
18 févr. 2006 à 18:56
cs_ibrahimakhalil
Messages postés28Date d'inscriptionsamedi 29 avril 2006StatutMembreDernière intervention11 mars 2011
-
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 ?
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 18 févr. 2006 à 19:33
Salut,
je suppose que Series est un TChart si non il faut remplacer par le bon composant
For X := 1 To 4 Do WithTChart(FindComponent('Series' + IntToStr(X))) Do For i: =0 to j do Add(donnees[i]); // Ligne
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 18 févr. 2006 à 23:11
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.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 18 févr. 2006 à 19:17
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:
yannba
Messages postés133Date d'inscriptionmercredi 4 janvier 2006StatutMembreDernière intervention 7 septembre 2010 18 févr. 2006 à 19:25
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
yannba
Messages postés133Date d'inscriptionmercredi 4 janvier 2006StatutMembreDernière intervention 7 septembre 2010 18 févr. 2006 à 19:50
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 ....
yannba
Messages postés133Date d'inscriptionmercredi 4 janvier 2006StatutMembreDernière intervention 7 septembre 2010 3 mars 2006 à 11:20
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.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 4 mars 2006 à 23:52
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.
cs_ibrahimakhalil
Messages postés28Date d'inscriptionsamedi 29 avril 2006StatutMembreDernière intervention11 mars 2011 28 mars 2007 à 14:59
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