Courbe de bézier [Résolu]

Signaler
Messages postés
72
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
30 août 2007
-
Messages postés
72
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
30 août 2007
-
bonjour j'aimerais que quelqu'un m'aide à résoudre un soucis !

voici mon code ( la form7 sert a afficher la courbe ! )

procedure TForm1.ButGraphClick(Sender: TObject);
var
point : array of Tpoint;
i:integer; // variable de boucle for
pixel:integer;
begin
with TableauAffichageChantiers do
begin
pixel:=5; // on commence au pixel numéro 5
setlength(pusat,12); // tableau de 12 points
//
le problème est ci dessus , si je met 12 rien ne s'affiche et si je met 13 la courbe s'affiche mais
le 13eme point est faux puisque je n'en ai que 12  !
//
for i:= 1 to 12 do
  begin

    point[i-1].X:=pixel;

    point[i-1].Y:= 400-strtoint(cells[i,LIGCA+1]); // 400=hauteur de la form  moins la valeur extraite // du tableau.Pour que la courbe soit en bas de la fiche .

    pixel:=pixel+35;   // on décale de 35 pixels.

  end;

Form7.Visible:=true;
  Form7.SetFocus;
  Form7.image1.Canvas.Pen.Color := clBlue;
  Form7.image1.Canvas.Pen.Width := 3;
  Form7.Image1.Canvas.PolyBezier(point);

 //Form7.Canvas.Refresh;

  end;

end;

merci de votre aide

5 réponses


Salut TooSpeed :

Si tu me permets , on y véra plus clair :

procedure TForm1.FormCreate(Sender: TObject); // On renomme ces composants
var
  ArrayOfPoint : array[0..11] of Tpoint;//Si tu as besoin que de 12 lignes autant le dire de suite. Puis on évite d'utiliser n'importe quoi comme nom de variable : un point est un type.
Index,pixel:Cardinal; //Bonjour les fuites mémoires.
begin
with TuDevraisEncorePrendreUnMotPlusLongCommeAntiConstitutionnellement do
   begin
     pixel:= 5; // on commence au pixel numéro 5
     setlength(ArrayOfPoint,12); //Pusat c'est quoi ? Attention au code que tu passes tout  speed
    Initialize (ArrayOfPoint,12); // On initialise le tableau ca fait pas de mal
     for Index: = 0 to 11 do //dans un tableau on commence toujours à zéro
        begin
          point[Index].X:=pixel;
          point[Index].Y:= 400-strtoint(cells[Index+1,LIGCA+1]);
          pixel:=pixel+35;
       end;

    With myGraphForm Do
      Begin
        Visible:=true;
        SetFocus;
        GraphImage.Canvas.Pen.Color := clBlue;
        GraphImage.Canvas.Pen.Width := 3;
        GraphImage.Canvas.PolyBezier(point);
        GraphImage.Canvas.Refresh;
        Finalize(ArrayOfPoint);//On libère la mémoire : tu es le roi des fuites mémoires toi nan ?
      end;
   end;
end;

end.

Voila déja un code plus propre est plus digeste .

Normalement ca devrait etre bon à condition que toutes tes cellulues contiennent des valeurs.

@+
Messages postés
72
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
30 août 2007

il semble que j'ai trouver une partie de la solution, il faut multiplier l enombre de point a relier par 3 et ajouter 1 ! le seul soucis et le dernier point !

je précise :   ArrayOfPoint : array[0..11] of Tpoint; => Dans ce cas pas besoin   SentLength et Initialize et Finalize
Messages postés
72
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
30 août 2007

Merci de m'avoir répondu

j'ai trouver tout seul en faite

cela ne marche rpas a cause du fait que la fonction polybezier utilise un point de depart puis2 autres et un point de fin  donc 4 , puis on reprend le dernier point et les 3 suivant! 
donc choix possible

4 7 10 13 16 19 22 25 ....

peut etre que je me trompe mais en totu cas cela marche super bien comme cela !

voila mon code

désolé pour les fuite de mémoire je savais pas !

et pusat viens d'un bout de code qui ma permis de comprendre comment marche polybezier.

promis je vais suivre tes conseilles .merci.
Messages postés
72
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
30 août 2007

lol

with TuDevraisEncorePrendreUnMotPlusLongCommeAntiConstitutionnellement do

oui mais on ma conseiller d'éclaicir mon code pour mieux le comprencre alors voila lol

c'est vrai j'ai un peu beaucoup abusé .....