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

Langage Delphi Discussion :

Array of array en dynamique


Sujet :

Langage Delphi

  1. #1
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut Array of array en dynamique
    voilà, j'ai besoin d'utiliser un tableau de tableaux de points pour afficher un graphe qui peut possèder plusieurs tracés de courbes.
    je veux joindre un réticule sur mon graphique.
    pour cela, à chaque fois que je déplace la souris, je suis obligé d'obturer, de retracer le repère(axes, quadrillage,graduations) et de retracer les courbes.
    les courbes sont donc stockée dans des tableaux de points qu'il faut que je
    mémorise d'où l'utilité d'un tableau de tableaux de points et en plus dynamique car la quantité de tableaux de points doit être fixée par le nombre de courbes affichées.
    bref avec une courbe, ça marche bien, j'ai testé... en revanche, je ne sais pas comment utiliser setlength dans le cadre d'un array of array (dynamique).
    partie de code pour plus de clarté bien que la proc soit sortie de son contexte...

    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
     
    Procedure Tgraphique.courbe(tailpt:integer;coulpt:Tcolor);
    var tabpt:array of Tpoint;
         i:integer;
         u:extended;
    begin
    u:=0;
    setlength(tabpt,10*tmax);
     
    for i:=0 to 10*tmax-1 do begin
    if permission2 then u:=Umax*(1-exp(-i/(1e4*Form1.R*Form1.C)));
    if permission3 then u:=Umax*exp(-i/(1e4*Form1.R*Form1.C));
    tabpt[i]:=point(round(origine.x+(waxe*(i+1)/(10*tmax))),round(origine.y-4*h*u/50));
    end;
     
    with canvas do begin
    pen.Width:=tailpt;
    pen.Color:=coulpt;
    polyline(tabpt);
    end;
    permission2:=false;
    permission3:=false;
    end;
    j'ai codé un objet Tgraphique que j'utilise dans mon unit principale.
    origine.x correspond en fait à l'origine de mon repère.
    c'est un Trpoint ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Trpoint=record
    x,y:extended;
    end;
    je fais tous mes calculs en réel et seulement à la fin je fais des rounds pour éviter les surprises à l'affichage...

    En fait je veux faire un tabpt:array of array of Tpoint; donc dynamique...
    j'ai une property nbcourbe write setcourbe qui fixe le nb de courbe affichée.
    (property dans Tgraphique)
    il faut que je puisse faire aussi setlength(tabpt[..],setcourbe)
    pour fixer ma quantité de tableaux à stocker pour le réaffichage lors de ma procedure reconstruction de l'unit principale que j'appelle à chaque déplacement de réticule.
    j'espère avoir été clair lol. (pas facile).
    je veux savoir comment fixer les dimensions d'un tableau de tableau dynamique. les dimensions étant variables( c'est là la difficulté)

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 017
    Par défaut
    SAlut
    Ca serait pas tout simplement en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var Tableau : Array of Array Of integer;
    begin
         SetLength(Tableau, 3);
         SetLength(Tableau[0],10);    //1er etage avec des point de 0 à 9
         SetLength(Tableau[1],5);    //2eme etage avec des point de 0 à 4
         SetLength(Tableau[2],20);    //dernier etage avec des point de 0 à 19
         Tableau[0,1] := 45;
         Tableau[2,19] := 666666;
    end;

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    oui, ça ,je sais faire avec des valeurs déterminées mais là je me prends la tête à formaliser mon truc avec des dimensions fluctuantes...
    il faut que je fasse tourner davantage mon ciboulot lol
    merci a+

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 017
    Par défaut
    Re
    Heuuu alors je ne comprend pas ce que tu veux faire
    Je pensais que tu avais I tableau contenant chaqu'un un nombre de J points, ca n'est pas ca ?
    Par ce que bon ok j'ai pas utilisé ca dans mon exemple mais c le meme principe

    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
     
    Public
    var Tableau : Array of Array Of integer;
     
     
    Procedure AjoutTableau(ListDePoint: Array of TPoint);
          I, J: Integer;
    begin
         //Tu rajoute un tableau de point
        J:=High(Tableau)+1;
        SetLength(Tableau,J);     
     
        //Tu dimentionne le tableau
        SetLength(Tableau[High(Tableau)], High(ListDePoint));
     
        For I := 0 to High(ListDePoint) - 1 Do
               Tableau[J,I] := ListPoint[I];
     
    [...]
     
    end;
    Nota: J'ai pas testé le code je l'ai fait "a main levée"... :p
    Et voila banco, enfin je pense... si j'ai compris ce que tu voulais.

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    oui merci, je crois que tu viens de me donner la solution...
    Je n'ai pas eu le temps de regarder cet après-midi car j'avais du boulot.
    je vais essayer d'adapter ça demain.
    merci encore pour tes réponses.
    ps: le j points que tu décris est en fait 10 fois le temps de charge ou de décharge d'un condensateur.
    si tmax=10 s alors ça fait 100 points pour ma courbe.
    je devrais pouvoir m'en sortir avec ton aide. je reposte en cas de prob. sinon
    ce sera résolu

    a+ merci encore

  6. #6
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    En essayant de m'inspirer de tes lumières, j'ai tenté ça :
    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
     
    Procedure Tgraphique.courbe(tailpt:integer;coulpt:Tcolor);
    var tabpt:array of array of Tpoint;
         i,j:integer;
         u:extended;
    begin
    u:=0;
    with canvas do begin
    pen.Width:=tailpt;
    pen.Color:=coulpt;
    end;
     
    setlength(tabpt,setnbcourbes);
    setlength(tabpt[high(tabpt)],10*tmax);
    for j:=0 to setnbcourbes-1 do begin
    for i:=0 to 10*tmax-1 do begin
    if permission2 then u:=Umax*(1-exp(-i/(1e4*Form1.R*Form1.C)));
    if permission3 then u:=Umax*exp(-i/(1e4*Form1.R*Form1.C));
    tabpt[j,i]:=point(round(origine.x+(waxe*(i+1)/(10*tmax))),round(origine.y-4*h*u/50));
    end;
    canvas.polyline(tabpt[j]);
    end;
    permission2:=false;
    permission3:=false;
    end;
    quand je trace la 1ère courbe, pas de problème. En revanche, quand je trace une seconde courbe, là ça plante. setnbcourbes=2.
    En fait de réécrite dans tabpt[0,i] , ça doit pas lui plaire...
    une idée ?

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 017
    Par défaut
    Humm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlength(tabpt[high(tabpt)],10*tmax); // en faisant ca tu ne dimentionne que le dernier de tes tabpts
    Ce code est valable uniquement si tu appelles cette procedure a chaque fois que tu veux créer une nouvelle courbe.

    Je ne comprend pas pourquoi tu melanges la création de tes Tabpts et l'affichage sur le canvas.

    il vaudrait peut etre mieux faire une procedure ou function qui constitue les Tabpt et une autre qui se charge d'afficher les courbes.

    [Edit]
    Je te propose ca, prend ce dont tu as besoin

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    Type TCourbe = record
         Couleur : TColor;
         Width : Integer;
         Visible : Boolean;
         ListPoint : Array of TPoint
    End;
     
    type
      TForm1 = class(TForm)
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        permition2,permition3 : Boolean;
        Tableau : Array Of TCourbe;
        Procedure AffichageCourbe(Canvas : TCanvas);
        Procedure AddCourbe(tailpt:integer;coulpt:Tcolor;tmax : integer);
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    Procedure TForm1.AddCourbe(tailpt:integer;coulpt:Tcolor;tmax,c,r,h,waxe : integer; Umax : Extended; Origine : Tpoint);
    Var i,j : Integer;
        u: extended;
    begin
         setlength(Tableau,High(Tableau)+2);
         j := high(Tableau);
         setlength(Tableau[j].ListPoint,10*tmax); //On enregistre le nombre de point pour cette courbe
         Tableau[J].Couleur := coulpt;            //On enregistre la couleur de la courbe
         Tableau[J].Width := tailpt;              //.... le taille des point de la courbe
         Tableau[J].Visible := True;              //Par defaut on l'affichera lors de l'appel a la procedure d'affichage
         u:=0;
         for i := 0 to high(Tableau[J].ListPoint) do
         begin
              if permition2 then u:=Umax*(1-exp(-i/(1e4*R*C)));
              if permition3 then u:=Umax*exp(-i/(1e4*R*C));
              Tableau[j].ListPoint[I]:=point(round(origine.x+(waxe*(i+1)/(10*tmax))),round(origine.y-4*h*u/50));
         end;
         permition2:=false;
         permition3:=false;
         AffichageCourbe(Form1.Canvas);
    end;
     
    Procedure TForm1.AffichageCourbe(Canvas : TCanvas);
    Var i,j : Integer;
    begin
         For j := 0 to High(Tableau) Do
         Begin
              If Tableau[j].Visible Then  //On verifie que la courbe doit etre affichée
              begin
                   with canvas do
                   begin
                        pen.Width:=Tableau[J].Width;
                        pen.Color:=Tableau[J].Couleur;
                   end;
                   //On trace la courbe point par point
                   For i := 0 To High(Tableau[J].ListPoint) Do canvas.polyline(Tableau[J].ListPoint[I]);
              end;
         end;
    end;
     
    end.
    J'ai dissocié la creation des courbes et l'affichages de celles ci.

    J'ai créé un Type TCourbe, ce qui permet de mettre une couleur et une taille differentes pour chaque courbe et egalement de choisir celles que tu affichera (visible a true, valeur par defaut true).
    Je n'ai pas put tester la totalité de mon code n'ayant pas de reference mais y'a pas de raison que ca fonctionne pas

    les 2 procedures seront incluses dans TGraphique, je te conseil aussi plutot que d'aller rechercher des valeures sur Form1 (C,R,Umax,h,origine....), de les inclure dans les paramettres de la procedure.

    J'ai dans le meme principe transmis Canvas mais tu n'aura peut etre pas a le faire si le graph et dessiné sur TGraphique, ce qui semblerait logic

    Bonne soirée à toi

    A++
    Qwaz
    [/edit]

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Je regarde ta solution...
    En fait, déjà je me suis rendu compte que j'avais laissé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var Tabpt: array of array of Tpoint
    dans la procedure.
    Donc forcément, à chaque fois que j'appelle la proc, je redéfinis un nouveau
    tabpt. Aucun intérêt , car je perds évidemment tous les éléments de mon tableau et donc les courbes antérieures. C'est ballot. En mettant tabpt dans les déclarations privés de TGraphique, je garde le même tabpt.
    Je me croyais sauver. Et non, ça ne plante plus (c'est le côté positif lol) mais
    en faisant un reset sur mon graphe et en rajoutant une courbe sans réinitialiser mon nb de courbe à zéro, j'aurais dû conserver le tracé de toutes les courbes antérieures et bien non. les boules ! (j'ai uniquement la dernière
    courbe que je viens de tracer)
    Le fait de redimensionner le tableau redéfinit un nouveau tableau et donc une perte des éléments de celui-ci ? C'est curieux.
    Bon, je vais faire l'essai dans un premier temps de me fixer un tableau statique
    avec un grand nb d'éléments un array[0..100] of array of Tpoint et voir si ça marche. Après je regarde ta vision du problème qui a l'air intéressante.
    merci pour le temps que tu me consacres, c'est sympa.
    a+

  9. #9
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Remarque: ta proposition suppose que le redimensionnement du tableau n'affecte pas le contenu de celui-ci.
    Je devrais faire le même constat...
    c'est curieux cette histoire...(il faut que je teste sur un petit programme bidon pour voir si c'est bien le cas).

  10. #10
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Aucun soucis à ça : lors de l'agrandissement d'un tableau, les éléments existant auparavant sont bien conservés.

    Par contre, je dois dire que je ne vois toujours pas bien le problème
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  11. #11
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    merci pour ta contribution.
    Oui normalement, il n'y a pas de raison de perdre les éléménts du tableau...
    je suis comme toi, je pige pas pourquoi ça ne me réaffiche pas toutes les courbes.
    Dans le principe, même s'il faut que je reprenne ce code un peu brouillon, il n'y a pas de raison pour que ça ne fonctionne pas...
    Je trouve d'ailleurs que c'est des grandes qualités de delphi de pouvoir manipuler des variables tableau. respect.
    Je cherche...
    mon Tgraphique dérive de Tbitmap et j'affiche dans un paintbox une instance de Tgraphique dans mon unit principale avec un bouton charge et un bouton décharge. J'ai entre autre une procedure Tgraphique.repère pour afficher
    les axes, le quadrillage, les graduations et Tgraphique.courbe pour les tracés.
    C'est pas plus compliquer que ça ...

  12. #12
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 017
    Par défaut
    Re
    :/
    Mets voir ton code de Tgraphique.courbe actuel avec les modifs que tu y a apportés.
    Je vais essayer de l'incruster dans un projet en lui donnant les valeurs utiles afin de pouvoir faire du pas a pas.
    A++
    Qwaz

    [Edit]
    Heuu attend voir je pense que j'ai peut etre trouvé
    Regardes tu defini C, R, h, ...

    Ensuite tu appelles Courbe(...) et dans Courbe tu reecris les points de tous tes tableaux ! ce qui veux dir que tout tes Tableaux contiennent la meme courbe!! elles se superposent donc l'une sur l'autre et tu ne peux en voir qu'une.
    Je me trompe?

    [/Edit]

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  13. #13
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    non, je modifie évidemment les valeurs de R et C avec des trackbars dans
    form1.
    les courbes s'affichent bien différentes quand je n'obture pas mais je ne peux pas en faire une exploitation avec l'aide d'un réticule car si je joins ce réticule,je suis obligé de faire une croix centrée sur la position de la souris
    donc 2 moveto lineto avec affichage des coordonnées de position.
    Si je ne veux pas observer la successsion des déplacement de souris à l'écran, je n'ai pas le choix: un fillrect, un graphic.repère, et un graphic.courbe. Je suis obligé de reconstruire à chaque déplacement de souris.
    Et c'est là le hic ; normalement je devrais conserver dans courbe les tracés précédents et là c'est pas le cas !
    Par rapport, à la version que j'ai donné de courbe, j'ai simplement déplacé la
    déclaration de tabpt dans private, c'est tout et normalement ça devrait marcher.

    tu veux dire que quand courbe est appelée, la tableau se reconstruit dans sa globalité et les valeurs de R et C sont en fait les dernières !
    Donc que des mêmes valeurs pour tous les éléments du tableau.=> une courbe
    pas marrant ton histoire ; si c'est ça, je vois pas la solution...

  14. #14
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 017
    Par défaut
    Si c'etait pour moi je ferais comme dis plus haut
    Je separerai la création de l'affichage.

    Tu n'as guerre le choix,
    Soit tu disocies les 2, ainsi tu crais tes courbes les une apres les autre et tu affiches tes courbes dans une 2eme procedure (ce qui je pense est le plus propre - > voir mon code plus haut)

    Soit tu memorises les valeures R,C,h... dans un tableau pour chaqu'une des courbes et tu utilises ces valeures pour créer/afficher tes courbes en gardant ta fonction et en la modifiant pour qu'elle aille chercher les valeures C,R,h ... non pas dans Form1 mais dans ton tableau de valeures (mais bon quite a faire un tableau pour chaque courbe, a mon avis autant eviter a ton system de se retaper tous les calculs de point a chaque fois ....)

    [Edit]

    non, je modifie évidemment les valeurs de R et C avec des trackbars dans
    form1.
    Oui ca on est d'accords mais tu le fais avant d'appeler Courbe et donc ces valeures restent figées durant tout le temps de la procedure
    [/Edit]

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  15. #15
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    bingo Qwazerty, tu es un dieu . C'était exactement ça.
    il suffit de ne pas reconstruire tous les éléments à chaque fois.
    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
     
    Procedure Tgraphique.courbe(tailpt:integer;coulpt:Tcolor);
    var  i,j:integer;
     
    begin
    with canvas do begin
    pen.Width:=tailpt;
    pen.Color:=coulpt;
    end;
     
    setlength(tabpt,setnbcourbes);
    setlength(tabpt[high(tabpt)],10*tmax);
    for i:=0 to 10*tmax-1 do begin
    if permission2 then u:=Umax*(1-exp(-i/(1e4*Form1.R*Form1.C)));
    if permission3 then u:=Umax*exp(-i/(1e4*Form1.R*Form1.C));
    tabpt[setnbcourbes-1,i]:=point(round(origine.x+(waxe*(i+1)/(10*tmax))),round(origine.y-4*h*u/50));
    end;
    for j:=0 to setnbcourbes-1 do canvas.polyline(tabpt[j]);
    permission2:=false;
    permission3:=false;
    end;
    ça a l'air de fonctionner ! cool.
    Parfois on se triture bien la tête pour des évidences qui nous échappent.

    merci à vous deux. Nickel

  16. #16
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 017
    Par défaut
    Citation Envoyé par Archimède Voir le message
    bingo Qwazerty, tu es un dieu . C'était exactement ça.
    Ca fait toujours plaisir mais bon faut pas exagere non plus

    Et puis oui ta solution permet de garder ton code, great!

    a++ au plaisir
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  17. #17
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Au plaisir
    Merci encore de ta contribution et de ton investissement, c'est sympa.
    a++++

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

Discussions similaires

  1. Array d'Arrays dynamiquement
    Par Jerwyn dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/12/2012, 15h22
  2. Array champs de texte Dynamique
    Par freezerhm dans le forum Flash
    Réponses: 1
    Dernier message: 04/09/2008, 21h13
  3. Réponses: 2
    Dernier message: 03/11/2007, 11h24
  4. Déclaration de type array of array of variant
    Par Drooxy dans le forum Delphi
    Réponses: 4
    Dernier message: 14/12/2006, 19h25
  5. Comment faire le tri d'un array of array ?
    Par Tchouffy dans le forum Langage
    Réponses: 1
    Dernier message: 16/06/2005, 20h55

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