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 :

Problème d'objets dans un TStrings


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Points : 50
    Points
    50
    Par défaut Problème d'objets dans un TStrings
    , j'ai quelque soucis avec un TStrings.
    A l'aide d'une boucle j'ajoute mes données (string + objet). L'objet est aussi un string. Cela semblent fonctionner à la création du TString.

    Mais j'ai des problème à la restitution de mes objets !

    Le code d'insertion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
          with FListeTables do
          begin
            AFile := (DossFileBDD + UnParam + XML_extension);
            AddObject(UnParam, TObject(AFile));
    //        AddObject(UnParam, pointer(AFile))  ==> même résultats
          end;
    Le code de restitution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
          for x := 0 to NbrParams - 1 do
          begin
            AFile := (string(FListeTables.Objects[x]));
            ShowMessage(AFile);
            ListeParams.Add(AFile);
          end;
          ShowMessage(ListeParams.Text);
    Certaines données me sont bien restituées, d'autres en faisant le pas à pas, en pointant sur la variable AFile, il y a un tas de données dans la variable et j'ai un plantage.
    D'autres la valeur "Test" du TStrings est correcte.

    D'avance merci !
    microJaP

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 665
    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 665
    Points : 25 459
    Points
    25 459
    Par défaut
    Normal, la gestion des strings est très spécial, il y a différente méthode, certaines ne fonctionne que dans des contextes restreints, pour ma part, je préfère faire un nouveau PString ou un record contenant une string, ou mon propre objet TObjectString

    Lorsque tu sors de la fonction, il libère normalement la chaine, je ne crois qu'il comprend que tu souhaite conserver son pointeur ...

    tient essaye ce code, si il ne plante pas, tu vas voir un drôle d'effet, eh oui, cela ne renvoi que la dernière valeur à 100 ...

    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 TFrmTestMemory.BtnStringListObjectStringClick(Sender: TObject);
    var
       TmpList: TStringList;
       TmpStr, TmpObj: String;
       i : Integer;
    begin
         TmpList:= TStringList.Create();
         try
            for i := 0 to 100 do begin
                TmpStr := 'Toto a ' + IntToStr(i);
                TmpObj := 'Je suis l''Objet ' + IntToStr(i);
                TmpList.Objects[TmpList.Add(TmpStr)] := Pointer(TmpObj);
            end;
            MemoStrings.Lines.Clear();
            MemoObjects.Lines.Clear();
            for i := 0 to TmpList.Count - 1 do begin
                MemoStrings.Lines.Add(TmpList.Strings[i]);
                MemoObjects.Lines.Add(String(Pointer(TmpList.Objects[i])));
            end;
         finally
                TmpList.Free();
         end;
    end;

    Tient dans ce sujet, j'avais fait la classe TCPVilleList, tu pourrais en reprendre l'idée ... pour la manipulation du PString avec NewStr, normalement c'est obselète, mais certains n'ont pas de problème avec leur pointeur de chaine, avec mes algos sans NewStr, cela n'a jamais fonctionné correctement ... !


    .

  3. #3
    Expert éminent sénior

    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 : 34
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Sauf en admettant que tu saches exactement comment fonctionnent les string (et visiblement ce n'est pas encore le cas), tu ne dois jamais transtyper une variable string ! (sauf en PChar, car c'est prévu pour).

    Comme l'a dit ShailLeTroll, la bonne façon de faire est d'utiliser un objet de type TObjectString qu'on peut écrire en 30 secondes comme ç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
    type
      TObjectString = class
      private
        FValue: string;
      public
        constructor Create(const AValue: string = '');
        property Value: string read FValue write FValue;
      end;
     
    constructor TObjectString.Create(const AValue: string = '');
    begin
      inherited Create;
      FValue := AValue;
    end;
    Tu peux aussi utiliser un record et utiliser New et Dispose (surtout pas GetMem/FreeMem !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type
      PStrRecord = ^TStrRecord;
      TStrRecord = record
        Value: string;
      end;

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 665
    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 665
    Points : 25 459
    Points
    25 459
    Par défaut
    Srjd, je n'ai pas retrouvé dans le forum du sujet traitant de string mis en objet d'une tString, ou comme data d'un TreeView ... mais certains ne se fatiguait pas à faire de nouvelle chaine via un objet ou record, il cela semblait marcher (comment je ne sais pas, mais il y arrivait ...)

    Il ne faudra pas oublier de parcourir la TStringList pour faire un Free sur chaque Object (ou alors avoir un TObjectList interne à TObjectString pour servir de garbage collector)

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Citation Envoyé par ShaiLeTroll Voir le message
    Srjd, je n'ai pas retrouvé dans le forum du sujet traitant de string mis en objet d'une tString, ou comme data d'un TreeView ...
    J'avais proposé quelque chose d'approchant ici, où, comme tu le fais remarquer, je veillais à libérer les objets.

    @+ Claudius

  6. #6
    Expert éminent sénior

    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 : 34
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    mais certains ne se fatiguait pas à faire de nouvelle chaine via un objet ou record, il cela semblait marcher (comment je ne sais pas, mais il y arrivait ...)
    Oui il est aussi possible d'utiliser un pointeur PString, comme tu l'as laissé entendre dans ta première réponse, avec New et Dispose aussi. Simplement, je trouve cela plus déroutant pour un débutant. Déjà qu'on dit qu'une string c'est un pointeur sur des données, alors un PString c'est un pointeur sur un pointeur : tout le monde n'appréhende pas toujours très bien cela. Mais ça marche très bien aussi.

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 665
    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 665
    Points : 25 459
    Points
    25 459
    Par défaut
    Cl@udius, je ne parlais pas d'encapsulation d'un string en object, mais d'un AddObject('Toto', Pointer(S)); directement et qui fonctionne (ce que je ne comprend pas !)

    Sjrd, oui, le PString, c'est retord, et normalement c'est obselète

    Non, j'ai vu plusieurs fois, ici ou sur Phidels, des exemples de AddObject, ajoutant directement la string sans faire d'objet, de new, ... et cela fonctionnait, alors que cela me semble impossible, où alors, il devait transtyper en PChar, ... faut que je teste j'ai vu cela, et je me l'explique pas, par contre, je pense que les fuites mémoires devait être énormes !

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Cl@udius, je ne parlais pas d'encapsulation d'un string en object
    Ah OK
    Citation Envoyé par ShaiLeTroll Voir le message
    mais d'un AddObject('Toto', Pointer(S)); directement et qui fonctionne (ce que je ne comprend pas !)
    Je dois t'avouer que cela m'échappe aussi. re-

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Je me rappelle avoir fait ça aussi une fois, stocké une chaîne en tant qu'objet dans une TStringList puis récupéré la chaîne avec un transtypage retord ( String(Pointer()) comme l'a écrit ShaiLeTroll je crois justement).

    Toujours et-il que cela avait fonctionné, bon je n'ai pas vraiment pu le "benchmarker" en situation réelle parce que finalement on n'a pas utilisé ça comme cela donc peut-être qu'effectivement à l'usage il se pourrait qu'il y ait des problèmes ou des fuites de mémoires.

    Néanmoins lors de mes tests, c'était concluant. Mais par définition je n'aime pas trop avoir du code retord alors j'essaye de passer par une belle classe ou un beau système plutôt

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 665
    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 665
    Points : 25 459
    Points
    25 459
    Par défaut
    Ah, merci, Aka Guymelef, je ne suis donc pas fou ... dommage que tu ne l'ai pas conservé, il aurait été sympa de voir la subtilité qui fait que cela fonctionne ... et effectivement de voir comment la mémoire se comporte (genre le compteur de référence des strings par exemple ...)

    Sinon, idem, je préfère les beaux systèmes, en général, je suis très record, c'est moins gourmand, pour Data d'un TreeView, cela ne choque pas c'est un pointer non typé, pour une TStringList, j'ai toujours un remord quand je transtype le TObject en Record, ...

  11. #11
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bon je viens de faire un test rapidement avec genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
     S: String;
     Cpt: Integer;
    begin
      ST := TStringList.Create;
     
       for Cpt := 0 to 5 do
       begin
        S := 'tata' + IntToStr( Cpt );
        ST.AddObject( 'toto' + IntToStr( Cpt ), Pointer( S ) );
       end;
    Puis pour l'extraction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var
     Cpt: Integer;
    begin
       for Cpt := 0 to ST.Count - 1 do
        Memo1.Lines.Add( ST.Strings[Cpt] + '-' + String( Pointer( ST.Objects[Cpt] ) ) );
    au début j'ai essayé de le faire dans une même procédure mais ça ne donnait pas les bons résultats sans pour autant planter. Du coup j'ai scindé les traitements en deux procédures différentes appelées à des temps différents et là j'obtiens un plantage, la chaîne qui est extraite "lisant" dans la mémoire. Ce qui prouverait bien que la chaîne est détruite au lieu d'être conservée et que le pointeur stocké dans la TStringList n'est plus valide.
    Maintenant que j'y repenses il est possible que je n'ai pas fait tant de tests que ça vu que j'étais quelque peu borderline néanmoins j'étais déjà content d'avoir trouvé une syntaxe qui compilait. Peut-être que je faisais un test avec seulement un item et insertion/extraction dans la même procédure et que du coup cela fonctionnait.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Points : 50
    Points
    50
    Par défaut
    Je vous remercie tous pour cet apport d'idées, je n'est plus qu'à mettre tous cela en application pour essayer d'en sortir le meilleur à mon humble niveau



    microJaP

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Points : 50
    Points
    50
    Par défaut


    Super ! ça marche !


    J'en suis rester à la proposition la plus simple, la classe "TObjectString". Je me débrouille à peu près dans les classes, pour les pointeurs, c'est une autre affaire.

    Pour ce qui est du transtypage des "String", j'ai déjà eu de nombreuse difficultés et ne comprenait pas d'où elle pouvait venir. j'y ferais gaffe dorénavant.

    Pour l'utilisation du pointeur sur un string pour le transtyper en "TObject", j'avais repris l'idée d'une utilisation similaire avec un "Integer", cela fonctionne peut-être mieux, ça le fait au moins dans une application. Par contre, le nombre est transtypé dans une DLL, et repris ailleurs, cela camoufle peut être aussi les problèmes de mémoire ???

    A bientôt !
    et mille fois

    microJaP

  14. #14
    Expert éminent sénior

    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 : 34
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    mais d'un AddObject('Toto', Pointer(S)); directement et qui fonctionne (ce que je ne comprend pas !)
    C'était un coup de bol, alors ! Ou alors celui qui a fait ça prenait ses dispositions pour prendre en main le comptage de références des chaînes Delphi - ce que, bien que j'en sois techniquement capable, je ne ferais jamais !

    Quand je parlais de PString, j'entendais une utilisation comme celle-ci :
    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
    type
      PString = ^string;
     
    procedure AddToList(List: TStrings; const Item, Data: string);
    var
      DataPtr: PString;
    begin
      New(DataPtr);
      DataPtr^ := Data;
      List.AddObject(Item, TObject(DataPtr));
    end;
     
    function FetchData(List: TStrings; Index: Integer): string;
    var
      DataPtr: PString;
    begin
      DataPtr := PString(List.Objects[Index]);
      Result := DataPtr^;
    end;
     
    procedure DeleteItem(List: TStrings; Index: Integer);
    var
      DataPtr: PString;
    begin
      DataPtr := PString(List.Objects[Index]);
      Dispose(DataPtr);
      List.Delete(Index);
    end;
    Ca ça fonctionne normalement bien - pas testé.

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 665
    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 665
    Points : 25 459
    Points
    25 459
    Par défaut
    Cela fonction très bien, c'est ce que j'ai mis comme exemple via ma classe TCPVilleList que j'avais fait un membre du forum

  16. #16
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Hello

    Shai et Sjrd, je crois qu'il y a confusion en fait.
    Dans ton code de ton fil Shai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TCPVilleList.Add(const CP, Ville: string);
    begin 
      CPs.AddObject(CP, Pointer(NewStr(Ville))); // Vérifier ce que cela donne SANS NewStr, moi j'ai souvent eu des soucis la dessus, et d'autre non ...
      Villes.AddObject(Ville, Pointer(NewStr(CP)));
    end;
    Le fameux détail est dans ton commentaire.
    Un AddObject n'alloue aucune mémoire pour l'object mais assigne simplement un pointeur.
    Donc, pas de problème si tu utilises un NewStr qui te renvoie le pointeur sur de la mém allouée (que ce soit un Pointer ou TObject finalement n'a pas d'importance puisque de même taille physique=32bits).
    Par contre, sans le NewStr, la comme dit Sjrd c'est un coup de bol car tout dépend comment la chaine initiale est allouée. Typiquement, si la chaine est une variable locale, à la sortie de la procédure, la mémoire est libérée mais pas forcément "purgée" (remplie de 0) -> quand tu récupères ta chaines hors de cette procédure, il se peux très bien que tu récupères ta chaine initiale pour peu que ce coin de mémoire n'ait pas été réutilisé par quelquechose d'autre -> d'ou "le coup de bol", mais c'est évidemment une solution à proscrire.

    j'arrive comme un cheveux sur la soupe, si c'était pas ca le problème veuillez m'excuser

  17. #17
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    En effet c'est ce que j'avais fait dans mon exemple précédemment, c'est à dire ajouter les chaînes mais sans les allouer avec un new. Dès lors que l'ajout et l'extraction se fait dans le même bloc pas d'erreur mais je n'ai pas les bons résultats. Par contre dès que je sépare les traitements dans des blocs différents catastrophe.

    Je pense que la solution d'utiliser des chaînes en les castant en tant que pointeur ne fonctionne que suivant comment la chaîne est détruite. Si c'est une variable locale, cette dernière est détruite à la fin du bloc donc ça ne marche pas. Par contre en imaginant que ce soit une variable globale, une ressourcestring, ou encore une chaîne contenu dans un objet ou un enregistrement "persistent" (sous-entendu pas détruit à la fin d'un bloc) alors cela doit fonctionner. Idem pour l'allocation dynamique mais là attention à la libération de l'objet et aux fuites de mémoire éventuelles donc.

    Un exemple qui fonctionne :

    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
    type
      TForm1 = class(TForm)
        ComboBox1: TComboBox;
        Memo1: TMemo;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      STS: array[0..3] of string = (
        'toto', 'titi', 'tata', 'tutu'  
      );
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ComboBox1.Items.AddObject( '0', Pointer( STS[0] ) );
      ComboBox1.Items.AddObject( '1', Pointer( STS[1] ) );
      ComboBox1.Items.AddObject( '2', Pointer( STS[2] ) );
      ComboBox1.Items.AddObject( '3', Pointer( STS[3] ) );
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Memo1.Lines.Add( ComboBox1.Items[0] + '-' + String( Pointer( ComboBox1.Items.Objects[0] ) ) );
      Memo1.Lines.Add( ComboBox1.Items[1] + '-' + String( Pointer( ComboBox1.Items.Objects[1] ) ) );
      Memo1.Lines.Add( ComboBox1.Items[2] + '-' + String( Pointer( ComboBox1.Items.Objects[2] ) ) );
      Memo1.Lines.Add( ComboBox1.Items[3] + '-' + String( Pointer( ComboBox1.Items.Objects[3] ) ) );
    end;

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

Discussions similaires

  1. [Débutant] Problème ajout objet dans fichier xml.
    Par Vidou12 dans le forum VB.NET
    Réponses: 3
    Dernier message: 13/02/2015, 12h36
  2. [Débutant] Problème suppression objet dans une collection
    Par ziggy76 dans le forum VB.NET
    Réponses: 2
    Dernier message: 11/03/2014, 23h16
  3. problème d'objets dans un datasource
    Par Kropernic dans le forum VB.NET
    Réponses: 3
    Dernier message: 14/10/2010, 12h02
  4. Réponses: 8
    Dernier message: 12/04/2007, 11h32
  5. [Delta3d] probléme avec un objet dans une map
    Par astragoth dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 27/03/2006, 14h49

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