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

 Delphi Discussion :

Passage de variable(s) d'une unité vers une fiche [Tokyo 10.2]


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut Passage de variable(s) d'une unité vers une fiche [Tokyo 10.2]
    Bonjour,
    Mon appli comporte des unités et des fiches créées dynamiquement.
    Une procédure de l'unité détermine des String dans une boucle qui doivent ensuite peupler un combobox de la fiche.
    La compilation ne comporte pas d'erreur, mais au lancement j'ai une violation d'accès, malgré que la fiche soit créée.

    Quelle pourrait être la solution à ce problème?

    Merci

    Cordialement
    Pierre

  2. #2
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    comment accèdes tu a ta fiche créée dynamiquement ? et comment la crée tu ?
    si il n'y a qu'une seule instance, tu peux la mettre dans la variable globale prévue à cet effet (ce qui est fait dans le dpr sur le fiches statiques : Application.CreateForm(TMaForm, varMaForm);)
    PS : un fonction globale qui peuple une combo d'une fiche ... casse-gueule pourquoi ne pas la mettre en méthode dans ta classe ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    Merci de cette réponse rapide,
    Voici la création de la fiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure OpenTrip;
    var
       strStyle: String;
    begin
      with TfrmTripPlanner.Create(Application) do
      begin
        if Options.FormStyle = 0 then
          strStyle:= 'AIR-FRANCE'
        else
          strStyle:= 'BRITISH AIRWAYS';
        Caption:= 'CPS X - Trip planning Module ' + frmMain.lblEdition.Caption
                       + ' ' + ApplicationVersion + ' / ' +
                       strStyle +
                       ' Style';
    Je n'ai jamais utilisé les méthodes dans une classe.
    Pourrais-je avoir avoir quelques détails?

    Cordialement
    Pierre

  4. #4
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Tu utilises un With pour la création de ta form, donc aucune variable ne contient de pointeur dessus, donc impossible de la recuperer une fois sorti de ton With (en fait si, mais il faut utiliser Screen.Forms[]).
    Où est la fonction qui remplie ta combo ?
    Une méthode, c'est juste une fonction dans une classe (une fonction qui a accès à Self quoi), comme Form1.Button1Click(...) par exemple.
    Pourquoi crées tu ta fiche dynamiquement ? il peut y en avoir plusieurs instances simultanées ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    Merci,

    Il n'y a pas de fonction:
    A l'intérieur du With, j'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frmTripPlanner.FillCombo(LstrCaption);
    LstrCaption est changée à chaque itération d'une boucle for next.

    Dans la fiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TfrmTripPlanner.FillCombo(Str: String);
    begin
      cbxDepWp.Items.Append(Str);
      cbxDesWp.Items.Append(Str);
    end;
    Dans une précédente version, la fiche était créée au lancement de l'application, mais ne sert qu'une fois. En la créant dynamiquement, je souhaite économiser la mémoire.


    Cordialement
    Pierre

  6. #6
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par Pierre95 Voir le message
    A l'intérieur du With, j'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frmTripPlanner.FillCombo(LstrCaption);
    frmTripPlanner est initialisé où ? nul part. Vu que tu es dans le With, tu n'as pas à préfixer d'une variable, c'est celle induite par le with. Celle que tu as mis vaut nil, c'est elle qui est valuée quand tu fais Application.CreateForm(TfrmTripPlanner, frmTripPlanner); lorsque la fiche est créée statiquement.

    Perso, j'aime pas trop le with en Delphi, pas assez clair et trop risqué. Dans certains langages (VB je crois, entre autres), il faut prefixer d'un point les champs du with, ce qui rend le code plus visuel et moins risqué. Un exemple de cas à la con :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TMain.XXX();
    begin
      With TSubForm.Create(Self) do
      begin
        Caption := GetDescription();
      end;
    end;
    avec GetDescription() declarée dans TMain. Imagine qu'un jour tu ajoutes une fonction GetDescription dans TSubForm, le comportement de ton with va changer sans que tu t'en rende compte, au lieu d'appeler TMain.GetDescription(), ca appelera TSubForm.GetDescription().

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    Merci,

    Correction, le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //Fill cbxDep/cbxDes with LstrCaption
        frmTripPlanner.FillCombo(LstrCaption);
    est implémenté dans la boucle de l'unité, pas dans le With de la fiche. (Désolé)

    La procedure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TfrmTripPlanner.FillCombo(Str: String);
    begin
      cbxDepWp.Items.Append(Str);
      cbxDesWp.Items.Append(Str);
    end;
    elle, est implémenté dans le With.

    Cordialement
    Pierre

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Citation Envoyé par guillemouze Voir le message
    avec GetDescription() declarée dans TMain. Imagine qu'un jour tu ajoutes une fonction GetDescription dans TSubForm, le comportement de ton with va changer sans que tu t'en rende compte, au lieu d'appeler TMain.GetDescription(), ca appelera TSubForm.GetDescription().
    Si tu veux vraiment être sûr de ton coup, ajoute Self, ce sera toujours plus léger que déclarer une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TMain.XXX();
    begin
      With TSubForm.Create(Self) do
      begin
        Caption := Self.GetDescription();
      end;
    end;
    Le problème n'est pas with mais le fait d'accéder à une variable non-initialisée. Il ne faut pas appeler frmTripPlanner.FillCombo(LstrCaption) mais simplement FillCombo(LstrCaption).

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    Merci,

    J'ai l'impression de n'avoir pas su bien expliquer mon soucis.
    J'ai une unité nommée: TripModule dans laquelle une procédure comportant une boucle donne un certain nombre de chaines dans la variable LstrCaption.
    A chaque iteration de la boucle, j'appelle une autre procedure dans le .pas TripPlanner de la fiche frmTripPlanner, créée dynamiquement avant cet appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //Fill cbxDep/cbxDes with LstrCaption
        frmTripPlanner.FillCombo(LstrCaption);
    Dans le .pas de la fiche frmTripPlanner, la procédure FillCombo ajoute les valeurs de LstrCaption au combobox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TfrmTripPlanner.FillCombo(Str: String);
    begin
      cbxDepWp.Items.Append(Str);
      cbxDesWp.Items.Append(Str);
    end;
    La compilation ne pose pas problème, mais une violation d'accès à lieu sur l'appel de FillCombo.
    Si je supprime frmTripPlanner dans l'appel, la compilation donne: Identificateur FillCombo non déclaré.

    Je souhaite avoir été un peu plus clair.

    Merci de votre patience

    Cordialement
    Pierre

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Repartons de ce qu'a dit guillemouze, y a-t-il dans ton code frmTripPlanner := quelque part ?

  11. #11
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par Pierre95 Voir le message
    A chaque iteration de la boucle, j'appelle une autre procedure dans le .pas TripPlanner de la fiche frmTripPlanner, créée dynamiquement avant cet appel
    J'ai toujours pas tres bien compris le contexte, mais "créée dynamiquement" dans quelle variable ? Dans un With (donc pas dans une variable) -> tu n'a plus accès (simplement) à ta form à la fin du With.
    Le plus simple pour toi est peut etre de valuer la variable sus-nommée, mais attention a bien la passer a nil quand tu détruis ta fiche, et ca t'empeche de manipuler 2 instances de ta fiche simultanément :

    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
    procedure OpenTrip;
    var
       strStyle: String;
    begin
      frmTripPlanner := TfrmTripPlanner.Create(Application); //ou Application.CreateForm(TfrmTripPlanner, frmTripPlanner);
      with frmTripPlanner do
      begin
        if Options.FormStyle = 0 then
          strStyle:= 'AIR-FRANCE'
        else
          strStyle:= 'BRITISH AIRWAYS';
        Caption:= 'CPS X - Trip planning Module ' + frmMain.lblEdition.Caption
                       + ' ' + ApplicationVersion + ' / ' +
                       strStyle +
                       ' Style';
    @AndNotOr : Effectivement, il faut juste penser a mettre self dans les with (je spécifie que rarement le self en général), et espérer que ce soit une méthode et non une fonction globale

  12. #12
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Je vais tâcher de synthétiser les solutions données.
    Dans l'unité TripPlanner tu as une variable déclarée pour une fiche: frmTripPlanner: TfrmTripPlanner;.
    Cette variable pointait sur une fiche créée automatiquement dans le projet Application.CreateForm(TfrmTripPlanner, frmTripPlanner);, mais si la fiche est créée dynamiquement, cette variable ne loge une référence à la fiche créée qu'en cas d'affectation par code : frmTripPlanner := TfrmTripPlanner.Create(Application);.
    Si tu crées la fiche dynamiquement sans conserver son adresse dans la variable frmTripPlanner puis appelles une de ses méthodes, il y aura une violation d'accès puisque la variable frmTripPlanner est vide (nil) et ne pointe pas sur un objet du type attendu.
    Tu as donc les deux solutions qui t'ont été données :
    1) garder une référence dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    frmTripPlanner := TfrmTripPlanner.Create(nil); // le owner peut être à nil si tu gères le cycle de vie de la fiche
    frmTripPlanner.Caption:='son nom';
    frmTripPlanner.FillCombo(LstrCaption);
    //...
    frmTripPlanner.Free;
    2) modifier l'appel dans le with pour qu'il se réfère à l'objet référencé par le with :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    with TfrmTripPlanner.Create(nil) do // le owner peut être à nil si tu gères le cycle de vie de la fiche
    begin
      Caption:='son nom';
      FillCombo(LstrCaption);
      //...
      Free;
    end;
    [EDIT : grillé !]
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    pour la solution 1, utiliser un try finally serait pas un luxe
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    Merci,
    @Andnotor:
    Non, il n'y a pas de dans le code.
    @Guillemouze:
    J'ai voulu dire que la fiche était active lors de l'appel de la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frmTripPlanner.FillCombo(LstrCaption);
    Je vais explorer vos idées et revenir vers vous.

    Cordialement
    Pierre

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    Pour être le plus clair possible, voici le code complet de la procédure qui appelle FillCombo(LstrCaption).
    Il se situe dans l'unité TripModule:
    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    procedure SetFs9PlnWaypoints(Route, PathSim, PathPln:String);// Text *.pln files
    var
      LstrCaption,
      LstrLatitude,
      LstrLongitude,
      LstrDirLatitude,
      LstrDirLongitude: String;
      ind, WpIndex: Integer;
      searchResult: TSearchRec;
      aStringList: TStringList;
      LfltLatitude,
      LfltLongitude: Single;
      Splitted: TArray<String>;
    begin
      //GstlMapPoints.Clear;
      aStringList:= TStringList.Create;
      aStringList.StrictDelimiter:= True;
      aStringList.Delimiter:= ',';
      if (findFirst(PathSim + '\Civa\ADEU\' + Route , faAnyFile, SearchResult) = 0)then
      begin
        ShowMessage('This route has already ADEU Files CPS will delete them'
                  + ' before create new');
        Repeat
           DeleteFile(Route + '\Civa\ADEU\'
                      + searchResult.Name);
        Until FindNext(searchResult)<>0 ;
        FindClose(searchResult);
      end;
      aStringList.LoadFromFile(Flight.PlnFileUsed);
      WpIndex:= aStringList.IndexOfName('waypoint.0');
      for ind:= WpIndex to aStringList.Count -1 do
      begin
        if aStringList.Strings[ind]= '' then
          Break;
        Splitted:= aStringList.Strings[ind].Split([',']);
        if not Splitted[0].Contains('*') then
          LstrCaption:= Copy(Splitted[0], Pos('=', Splitted[0])+ 1,
                                                 (Length(Splitted[0])- Pos('=',
                                                  Splitted[0])+ 1));
        if not Splitted[3].Contains('*') then
          LstrCaption:= Copy(Splitted[3], Pos('=', Splitted[3])+ 1,
                                                 (Length(Splitted[3])- Pos('=',
                                                  Splitted[3])+ 1));
        LstrCaption:= ReplaceText(LstrCaption,' ','');
        if Length(LstrCaption)> 7 then
        begin
          MessageDlg('The waypoint : ' + LstrCaption + ' (and may be more)'
                     + ' is unallowable by ICAO' +
                     #13#10 + 'Please change it (them) for 7 Characters name !'
                    , mtError,[mbOK], 0, mbOK);
          Exit;
        end;
        //Fill cbxDep/cbxDes with LstrCaption
        frmTripPlanner.FillCombo(LstrCaption);
        if (Splitted[2].Contains('*'))then
        begin
          LstrLatitude:= Splitted[2];
        if (Splitted[3].Contains('*'))then
          LstrLongitude:= Splitted[3];
        end
        else
        begin
          if (Splitted[5].Contains('*'))then
            LstrLatitude:= Splitted[5];
          if (Splitted[6].Contains('*'))then
            LstrLongitude:= Splitted[6];
        end;
        LstrLatitude:= ReplaceText(Lstrlatitude,' ', '');
        LstrLongitude:= ReplaceText(Lstrlongitude,' ', '');
        LstrDirLatitude:= Copy(LstrLatitude,1,1);// N-S
        LstrDirLongitude:= Copy(LstrLongitude,1,1); // E-
        LfltLatitude:= ConvertCoordinatesD(LstrLatitude);
        if LstrDirLatitude = 'S' then
          LfltLatitude:= - LfltLatitude;
        LfltLongitude:= ConvertCoordinatesD(LstrLongitude);
        if LstrDirLongitude = 'W' then
          LfltLongitude:= - LfltLongitude;
        if ((GfltWXMinLon = 0)
        and (GfltWXMaxLon = 0)
        and (GfltWXMinLat = 0)
        and (GfltWXMaxLat = 0)) then
        begin
          GfltWXMinLon:= LfltLongitude;
          GfltWXMaxLon:= LfltLongitude;
          GfltWXMinLat:= LfltLatitude;
          GfltWXMaxLat:= LfltLatitude;
        end;
        if LfltLongitude < GfltWXMinLon  then
          GfltWXMinLon:= LfltLongitude;
        if LfltLongitude > GfltWXMaxLon then
          GfltWXMaxLon:= LfltLongitude;
        if  LfltLatitude <GfltWXMinLat then
          GfltWXMinLat:= LfltLatitude;
        if LfltLatitude > GfltWXMaxLat then
          GfltWXMaxLat:= LfltLatitude;
        GstlFsPoints.Assign(aStringList);
      end;
      aStringList.Free;
    end;
    La procedure FillCombo() elle, est situé dans le .pas de la fiche TripPlanner.

    Les exemples de Tourlourou ne fonctionnent pas car l'appel de procédure ne se situent pas dans le pas de la fiche.

    Cordialement
    Pierre

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Mets un point d'arrêt sur la ligne 55 et regarde ce que vaut frmTripPlanner.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    Effectivement, frmTripPlanner vaut nil.

  18. #18
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Tu ne peux gérer ce cas avec un with puisque la fiche est manipulée à partir de 2 procédures distinctes (OpenTrip et SetFs9PlnWaypoints) ; il faut donc bien garder dans une variable une référence à la fiche créée dynamiquement, comme c'était fait lors de sa création automatique.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    Bien compris.

    Je creuse de ce côté et reviens en cas de soucis.

    Grand merci à tous.

    Pierre

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    Voici la solution que j'ai trouvée. (De mon niveau):

    J'ai créé un tableau dynamique de String global que je rempli dans la boucle du TripModule.
    Dans la fiche TripPlanner, je lis ce tableau dans les combo.

    Si vous avez une meilleur idée je suis preneur.

    Merci

    Cordialement
    Pierre

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/07/2016, 16h49
  2. Réponses: 6
    Dernier message: 15/03/2010, 10h59
  3. Réponses: 1
    Dernier message: 04/05/2007, 12h40
  4. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39
  5. [VB.NET] Copie d'une table d'une DB vers une autre
    Par SergeF dans le forum Windows Forms
    Réponses: 9
    Dernier message: 20/11/2004, 09h54

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