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 :

[D2010][TstringList] Affectation d'une variable TStringList.


Sujet :

Langage Delphi

  1. #1
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut [D2010][TstringList] Affectation d'une variable TStringList.
    Bonjour,

    Dans une méthode j'initialise une variable "public" du type TStringList à partir d'un fichier sauvegarde.
    J'ai besoin du contenu de cette var dans une autre fiche indépendante.
    A l'exécution l'affichage attendu de cette fiche n'était pas obtenu.

    L'exécution pas à pas montre dans "point de suivi" que la variable liste de chaînes est correctement affectée, mais la var préfixée est vide.

    Pourquoi cette anomalie ?

    Après examen des membres de TStringList j'ai assigné à l'intérieur de ma méthode la var à la variable préfixée

    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 TFCalculPoly.LectureCoefFonct;  // à partir de la sauvegarde NomFic.coef
    var I : integer;
    begin
      I := Pos('.', NFicSauv);
      if I <> 0 then  Copy(NFicSauv, 1, I-1);
     
        if FileExists(NficSauv + '.coef') then
        begin
          StlCoef.LoadFromFile(NFicSauv + '.coef');      // affectation à StlCoef
     
          FCalculPoly.StlCoef.Assign(StlCoef);             // assignation à FCalcul ...
        ...
        end
        else begin
          MessageDlg('Les coefficients de YfX ne sont pas sauvegardés'+CrLg
                     +'Impossible de tracer le graphe.'+CrLg
                     +' Exécuter CALCUL avant.' ,mtInformation, [mbOK], 0);
          ...
        end;
     
    end;
    j'ai obtenu ainsi le résultat cherché, j'ai pu utiliser dans la fiche indépendante les valeurs de var.

    Est ce la seule solution ?

    Remarque : l'affectation initiale à la var préfixée se fait correctement mais on obtient le résultat inverse la var reste vide.

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 505
    Points : 3 135
    Points
    3 135
    Par défaut
    Avec la méthode AddStrings ...

    Mais je suis étonné que Assign ne fasse pas son travail correctement.

    Doc:
    Définit, à partir d'un objet source, les chaînes dans la liste et les objets éventuellement associés.

    Utilisez Assign pour définir la valeur de l'objet TStringList à partir d'un autre objet. Si Source est du type TStringList, la liste est définie sur la liste de l'objet TStringList source, et si les objets associés sont supportés, tous les objets associés sont copiés à partir de Source aussi.

    Si Source n'est pas du type TStringList, la méthode héritée Assign définit la valeur de la liste à partir de tout objet qui supporte TStringList dans sa méthode AssignTo.

    Le code suivant fonctionne sans problème:

    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
    procedure TForm7.Button1Click(Sender: TObject);
    var
      t1, t2: TStringList;
    begin
      t1 := TStringList.Create;
      t2 := TStringList.Create;
      T1.AddObject('un', TObject(1));
      T1.AddObject('deux', TObject(2));
      t2.Assign(t1);
      ShowMessage(t2[0]);
      ShowMessage(IntToStr(Integer(t2.Objects[0])));
      t2.Free;
     
      with TForm8.Create(application) do
      begin
        tt.Assign(t1);
        ShowMessage(tt[0]);
        Free;
      end;
     
      t1.Free;
    end;
    Il doit y avoir autre chose dans le code qui déclenche le problème. Dans la fiche FCalculPoly, i ln'y aurait pas un clear de la liste par hasard ?

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 737
    Points : 25 654
    Points
    25 654
    Par défaut
    ce qui me choque c'est


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFCalculPoly.LectureCoefFonct;
    ...
      FCalculPoly.StlCoef....
    end;
    FCalculPoly ne serait pas une variable globale de fenêtre TFCalculPoly ?
    Evite d'utiliser la variable globale, si pouvait même la supprimer cela sera l'idéal !
    Utilise toujours Self dans une méthode !

    As-tu plusieurs instance de TFCalculPoly ?
    Comment gères-tu le passage de paramètre et de données entre tes fenêtres ?
    Tu devrais faire des objets intermédiaires, évite de mettre l'intelligence du programme dans les fenêtres !

  4. #4
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    Bonjour,

    @ Papy214
    L'utilisation de Assign dans la méthode LectureCoefFonct résoud parfaitement mon probléme.

    @ Shail
    Cette solution me semblait pas correcte, d'où mon message.

    Je n'ai qu'une seule instance de TFCalculPoly qui est la fiche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     TFCalculPoly = class(TForm)
     ...
    public
     ...
        StlCoef : TStringList; // sauvegarde et lecture de B0 et des coefficients
                               // de la derniére fonction polynome
     ...
    var
      FCalculPoly: TFCalculPoly;
    Cette var StlDoef a évidemmment été crée avant. J'ai choisi ce type pour la possibilité de sauvegarder dans un fichier.

    J'utilise les valeurs contenues dans StlCoef dans la méthode CalYfX de la Form AffGraph : TaffGraph

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function TAffGraph.CalYfX( X : Double): Double;    // calcul de Y = B0 + Sum(Bi x X^i)
    var I : integer;                               // les coef. B0, Bi sont dans la liste StlCoef
        Val : Double;
    begin
      with FCalculPoly do
      begin
        Val :=  StrToFloat(StlCoef[0]); 
        for I := 1 to StlCoef.Count -1 do  Val := Val + StrToFLoat(StlCoef[I]) * IntPower(X,I);
        Result := Val;
      end;
    end;
    Si j'exécute le programme sans la ligne assignation StlCoef est vide, à l'exec message "indice de liste hors limite (0) après CalYfX (verifié dans des points de suivi).

    Si dans TFCalculPoly.LectureCoefFonct je remplace dans FCalculPoly.StlCoef... par Self.StlCoef... j'ai toujours une châine vide.
    De même à l'affectation si j'utilise Self.StlCoef.LoadFromFile... sans Assign.

    En définitive comment accéder à une liste de chaînes de façon globale ?


    Merci à vous deux pour votre intérêt.

  5. #5
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 505
    Points : 3 135
    Points
    3 135
    Par défaut
    une unité UnitGLobal.pas qui contient le TStringList.
    Autant d'unités qui référencent UnitGlobal dans leurs "uses"
    Création du TstringList dès que la nécessité s'en fait sentir.

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 845
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 845
    Points : 13 622
    Points
    13 622
    Par défaut
    Ton problème (s'il y en a vraiment un) n'est pas clair

    Citation Envoyé par paulfr Voir le message
    L'exécution pas à pas montre dans "point de suivi" que la variable liste de chaînes est correctement affectée, mais la var préfixée est vide.

    Pourquoi cette anomalie ?
    Ce n'est pas une anomalie. Cette ligne FCalculPoly.StlCoef.Assign(StlCoef); est tout simplement incorrect ! Le premier travail de Assign est d'effacer la destination et puisque la destination égale la source, tu te retrouves avec une liste source vide

    Egalement à corriger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    I := Pos('.', NFicSauv);
    If I <> 0 then NFicSauv := Copy(NFicSauv, 1, I-1);
    
    if FileExists(NficSauv + '.coef') then...
    ou exprimé autrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NFicSauv := ChangeFileExt(NFicSauv, '.coef');
     
    if FileExists(NficSauv) then...

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 737
    Points : 25 654
    Points
    25 654
    Par défaut
    @Andnotor
    C'est vrai que ce n'est pas clair, moi j'ai cru comprendre que StlCoef contient des éléments mais que FCalculPoly.StlCoef est vide !
    Je pensais donc à deux instances, une créée dans le DPR qui a été oubliée pointée par FCalculPoly, une autre créer manuellement qui est celle visible donc Self

    @paulfr, teste ce code et dit nous ce qu'il affiche !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      StlCoef.LoadFromFile(NFicSauv + '.coef');      // affectation à StlCoef
     
      if FCalculPoly <> self  then
        ShowMessage('Oooh !');
      else
        ShowMessage('Ah Ah !');
     
      FCalculPoly.StlCoef.Assign(StlCoef);

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 845
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 845
    Points : 13 622
    Points
    13 622
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    j'ai cru comprendre que StlCoef contient des éléments mais que FCalculPoly.StlCoef est vide !
    Il pourrait y avoir deux instances en effet. Sinon la seule possibilité pour que FCalculPoly.StlCoef soit vide après assignation est que cette liste se copie sur elle-même
    (Il est vrai qu'un petit test if Source <> Self dans TStrings.Assign n'aurait pas été du luxe)

    Il pourrait aussi s'agir d'une variable globale StlCoef et que Paulfr pense travailler avec alors que depuis l'instance de classe, c'est bien celle de la classe qui sera utilisée.
    Je pense même que le debugger pourrait s'emmêler les pinceaux et afficher au survol la variable globale ce qui nous fait penser qu'elle n'est pas vide (celle de classe)

  9. #9
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    Bonjour

    Je répond @AndNotor

    1 erreur grossiére

    2 je confirme

    aprés exec StlCoef.LoadFromFile(NFicSauv + '.coef') de la méthode TFCalculPoly.LectureCoefFonct

    StlCoef.text contient la liste des chaînes
    FcalculPoly.StlCoef est vide
    voir fichier LectureCoef_StlCoef.jpg

    aprés exec de FCalculPoly.StlCoef

    StlCoef.text contient toujous la chaine
    FcalculPoly.StlCoef aussi (fich. LectureCoef8Fcalcul.jpg)

    Je vais faire le test de Shail.
    Images attachées Images attachées  

  10. #10
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    @ ShailLe

    le test affiche "Oooh!"

    j'ai copié les instrutions et supprimé le premier ; (demandé par Delphi)

  11. #11
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Bonjour,

    Tu peux allègrement faire l'économie de ce TStringList en passant par la classe abstraite TStrings de la façon suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TFCalculPoly = class
      private
        FNFicSauv: string;
        ...
      public
        function LectureCoefFonc(AList: TStrings):integer;
        ...
      end;
    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
    resourcestring
      ERROR_MSG1 = 'Les coefficients de YfX ne sont pas sauvegardés'+#10#13+
                   'Impossible de tracer le graphe.'+#10#13+
                   ' Exécuter CALCUL avant.';
     
    function TFCalculPoly.LectureCoefFonc(AList: TStrings): integer;
    var
      index: integer;
    begin
      AList.Clear;
      index := Pos('.', FNFicSauv);
      if index > 0
        then FNFicSauv := Copy(FNFicSauv,1,index-1) + '.coef';
      if FileExists(FNFicSauv)
        then AList.LoadFromFile(FNFicSauv)
        else MessageDlg(ERROR_MSG1,mtError,[mbOk],0);
      Result := AList.Count;
    end;
    Ensuite, pour afficher ou manipuler cette liste, il te suffira de faire un simple:

    instantceTFCalculPoly.LectureCoefFonc(X);

    si X est un TStringList...
    ou encore

    instantceTFCalculPoly.LectureCoefFonc(X.Items);

    si X est un composant de type TMemo.

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 737
    Points : 25 654
    Points
    25 654
    Par défaut
    Citation Envoyé par paulfr Voir le message
    le test affiche "Oooh!"
    Tu as donc DEUX Instances de la fenêtre TFCalculPoly !
    Une Visible pointée par Self
    Une Invisible pointée par FCalculPoly !

    Vérifie ton DPR pour retirer la création de la fiche superflue !
    Retire même si tu le peux la globale FCalculPoly, normalement un programme propre n'en as pas besoin, Self lui suffit !

    Citation Envoyé par paulfr Voir le message
    j'ai copié les instrutions et supprimé le premier ; (demandé par Delphi)
    Oui tout à fait, j'ai perdu l'habitude du ; interdit devant le else en Delphi, en C++Builder, il le faut !

  13. #13
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    Bonjour.


    @Shaile

    L'examen du fichier .dpr montre que j'ai 2 instances de FRegMenu et de FRegCreatPol.

    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
    program RegressionGrs;       (RegressionGrs.dpr)
     
    uses
      Forms,
      RegAffich in 'RegAffich.pas' {FRegAff},               // TFRegAff = class(TForm)
      RegCreatPol in 'RegCreatPol.pas' {FRegCreatPol},      // TFRegCreatPol = class(TForm)
      RegMenu in 'RegMenu.pas' {FRegMenu},                  // TFRegMenu = class(TForm)
      ListImp in '..\Uti\ListImp.pas' {FImprime},           // TFImprime = class(TForm)
      COURBAFF in 'COURBAFF.PAS' {AffGraph},                // TAffGraph = class(TForm)
      RegresPoly in 'RegresPoly.pas' {FCalculPoly},         // TFCalculPoly = class(TForm)
      RegGraphePoly in 'RegGraphePoly.pas' {FGraphPoly},    // TFGraphPoly = class(TFCalculPoly)
      RegCreatMul in 'RegCreatMul.pas' {FRegCreatMul},      // TFRegCreatMul = class(TFRegCreatPol)
      RegresMultip in 'RegresMultip.pas' {FCalculMultiple}; //TFCalculMultiple = class(TFCalculPoly)
     
    {$R *.res}
     
    begin
      Application.Initialize;
      Application.Title := 'Regressions';
      Application.CreateForm(TFRegMenu, FRegMenu);          // 1
      Application.CreateForm(TFRegAff, FRegAff);
      Application.CreateForm(TFRegCreatPol, FRegCreatPol);  // 2
      Application.CreateForm(TFCalculPoly, FCalculPoly);
      Application.CreateForm(TFRegCreatPol, FRegCreatPol);  // 2 bis 
      Application.CreateForm(TFRegMenu, FRegMenu);          // 1 bis
      Application.CreateForm(TFImprime, FImprime);
      Application.CreateForm(TAffGraph, AffGraph);
      Application.CreateForm(TFGraphPoly, FGraphPoly);
      Application.CreateForm(TFRegCreatMul, FRegCreatMul);
      Application.CreateForm(TFCalculMultiple, FCalculMultiple);
      Application.Run;
    end.
    J'ai supprimé les 2 instances en double ainsi que la ligne "FCalculPoly.StlCoef.Assign(StlCoef);" dans la méthode TFCalculPoly.LectureCoefFonct.
    A l'exécution j'ai le même probléme.

    En fait la méthode TAffGraph.CalYfX( X : Double) peut être exécutée soit à partir de FCalculPoly ou de FGraphPoly (qui hérite de TFCalculpoly) que j'avais anticipé dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TAffGraph.PBGraphPaint(Sender: TObject);
    var ChYx : string ;
    begin
       with Sender as TPaintBox do
         if BFDonPoly  then  begin        //le graphe est demandé au calcul initial
            ChYx := ChYfX(FcalculPoly.StlCoef);
            TraceGraphXY(CalYfX, ChYx,FcalculPoly.NbSeries );
          end
          else begin                   // le graphe est demandé seul à part
            ChYx := ChYfX(FgraphPoly.StlCoef);
            TraceGraphXY(CalYfX, Chyx, FGraphPoly.NbSeries);
          end;
    end;
    qui résolvait le problème pour ChYfX mais pas pour CalYfx, qu'il me reste à résoudre.
    Initialements les 2 méthodes étaient dans FCalculPoly et ne posaient pas de probléme.
    Ja voulais rendre COurbAff facilement réutilisable.

    Je remercie tous ceux qui m'ont proposé une solution qui ne dépendait que de moi ce dont je m'excuse.
    Je vais examiner la solution de Pascal J.

  14. #14
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 505
    Points : 3 135
    Points
    3 135
    Par défaut
    Une (très ?) bonne habitude à prendre est de préciser à Delphi qu'il ne faut pas créer les fenêtres automatiquement au lancement du programme et les créer seulement quand c'est nécessaire. La gestion est plus efficace et plus économe en ressources.

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 737
    Points : 25 654
    Points
    25 654
    Par défaut
    En fait, pour double CreateForm, si cela se trouve cela pouvait aller jusqu'à trois instances, 2 par le DPR et 1 par ton code !

    Citation Envoyé par paulfr Voir le message
    J'ai supprimé les 2 instances en double ainsi que la ligne "FCalculPoly.StlCoef.Assign(StlCoef);" dans la méthode TFCalculPoly.LectureCoefFonct.
    A l'exécution j'ai le même probléme.
    Tu ne semble pas bien maîtriser les instances, tu retires des lignes concernant TFRegCreatPol et TFRegMenu en quoi cela impacte TFCalculPoly

    En fait, ton code du DPR ne devrait être uniquement

    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
    program RegressionGrs;       (RegressionGrs.dpr)
     
    uses
      Forms,
      RegAffich in 'RegAffich.pas' {FRegAff},               // TFRegAff = class(TForm)
      RegCreatPol in 'RegCreatPol.pas' {FRegCreatPol},      // TFRegCreatPol = class(TForm)
      RegMenu in 'RegMenu.pas' {FRegMenu},                  // TFRegMenu = class(TForm)
      ListImp in '..\Uti\ListImp.pas' {FImprime},           // TFImprime = class(TForm)
      COURBAFF in 'COURBAFF.PAS' {AffGraph},                // TAffGraph = class(TForm)
      RegresPoly in 'RegresPoly.pas' {FCalculPoly},         // TFCalculPoly = class(TForm)
      RegGraphePoly in 'RegGraphePoly.pas' {FGraphPoly},    // TFGraphPoly = class(TFCalculPoly)
      RegCreatMul in 'RegCreatMul.pas' {FRegCreatMul},      // TFRegCreatMul = class(TFRegCreatPol)
      RegresMultip in 'RegresMultip.pas' {FCalculMultiple}; //TFCalculMultiple = class(TFCalculPoly)
     
    {$R *.res}
     
    begin
      Application.Initialize;
      Application.Title := 'Regressions';
      Application.CreateForm(TFRegMenu, FRegMenu);          // 1
      Application.Run;
    end.
    Toutes les autres fenêtres doivent être crée manuellement comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaForm := TFCalculPoly.Create(Self);
    Tu utilises du ShowModal, du simple Show ? du MDI ?

  16. #16
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    @Shail

    Dans le begin ...end j'ai supprimé 2 lignes en double.
    Je ne crée pas de fenêtre manuellement.
    Je suis un amateur, l'informatique n'est pas ma spécialité.

    J'utilise ShowModal uniquement.

    Le programme fait un calcul de régression avec la rentrée des données, corrections éventuelles puis le calcul ... et pour la reg. polynomiale le graphe de la fonction trouvée.
    Je le tiens à votre disposition si vous étes intéressé.

  17. #17
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    Bonjour,

    @Shail
    Comme suggéré j'ai tenté de simplifier le .dpr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    begin
      Application.Initialize;
      Application.Title := 'Regressions';
      Application.CreateForm(TFRegMenu, FRegMenu);
      Application.CreateForm(TFRegAff, FRegAff);
      Application.CreateForm(TFCalculPoly, FCalculPoly);
      Application.Run;
    Mais compte tenu de l'imbrication des fiches je n'ai pu faire mieux.
    Merci à tous pour leurs conseils.

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

Discussions similaires

  1. Affectation d'une variable
    Par fveysseire dans le forum C
    Réponses: 15
    Dernier message: 24/11/2006, 16h14
  2. [Smarty] Affectation d'une variable dans le template
    Par wkd dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 05/10/2006, 12h56
  3. erreur d'affectation d'une variable
    Par Myth_Titans dans le forum C++
    Réponses: 3
    Dernier message: 05/07/2006, 22h51
  4. Affectation d'une variable dans un état
    Par tamerlan dans le forum Access
    Réponses: 26
    Dernier message: 04/04/2006, 10h09
  5. [DEBOGUEUR] tracer l'affectation d'une variable
    Par mimil dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 15/03/2006, 18h08

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