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 :

Tableau Dynamique de Record


Sujet :

Delphi

  1. #1
    Dry
    Dry est déconnecté
    Membre du Club

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 48
    Points : 50
    Points
    50
    Par défaut Tableau Dynamique de Record
    Bonjour à tous,


    Mon probème est simple (à expliquer) :
    Je veux "transformer" une liste l'objet en un tableau dynamique de record (chaque record représentant 1 objet de ma liste).

    voila tout bêtement ce que j'ai fait :

    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
     
    TObjectRecord = record
      a : integer;
      b: string;
    end;
     
    procedure TObjectList.ExportAsRecord(var TabObjectRecord : Array of TObjectRecord);
    var
      i : integer;
    begin
      // Allocation du tableau de record
      SetLength(TabObjectRecord, Self.Count);
     
      // Recopie des données concernant la liste d'objet dans le tableau de record
      for i:= 0 to Pred(Self.Count) do
      begin
        TabObjectRecord[i].a := Self[i].propertyA;
        TabObjectRecord[i].b := Self[i].propertyb;
      end;
    end;

    et là il ne veux pas compiler au SetLength, il me met "Types incompatibles"

    Y aurait-il une méthode qui évite de passer par des Tableaux de Pointers de record ? (quelque peut lourd à utiliser avec les "tab[i]^" )

    Merci

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    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
     
    Type 
     TyTabObjectRecord : Array of TObjectRecord;
     
    procedure TObjectList.ExportAsRecord(var TabObjectRecord :TyTabObjectRecord);
    var
      i : integer;
    begin
      // Allocation du tableau de record
      SetLength(TabObjectRecord, Self.Count);
     
      // Recopie des données concernant la liste d'objet dans le tableau de record
      for i:= low(TabObjectRecord) to high(TabObjectRecord) do
      begin
        TabObjectRecord[i].a := Self[i].propertyA;
        TabObjectRecord[i].b := Self[i].propertyb;
      end;
    end;
    elles sont de quelle type tes propriete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Self[i].propertyA;
                  Self[i].propertyb;
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    La déclaration d'un tableau sans borne ne correspond pas à un tableau dynamique quand elle est faire directement dans la signature d'une procédure ou d'une fonction. Dans ce cas elle correspond à un tableau "ouvert".
    Pour pouvoir compiler ton code, il te suffit de déclarer un type et de modifier la signature de la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TTabObjectRecord = array of TObjectRecord;
    ...
    procedure TObjectList.ExportAsRecord(var TabObjectRecord : TTabObjectRecord);
    Un excellent tutoriel de Hdd34 sur les tableaux dynamiques est disponible ici : http://hdd34.developpez.com/articles/artdynarr/

    Un petit conseil en plus : il vaudrait mieux éviter de nommer ta classe TObjectList si tu ne veux pas avoir de problèmes le jour où tu utilisera la classe TObjectList de la VCL.

  4. #4
    Dry
    Dry est déconnecté
    Membre du Club

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 48
    Points : 50
    Points
    50
    Par défaut
    Exact !
    le simple fait de déclarer un type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TTabObjectRecord = array of TObjectRecord;
    a résolu tous mes problèmes !

    Merci

    PS : la classe TObjectList n'était la que pour illustrer mes propos

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/10/2013, 19h08
  2. Record dans un tableau dynamique
    Par Tangui dans le forum Débuter
    Réponses: 2
    Dernier message: 04/01/2008, 23h58
  3. Réponses: 7
    Dernier message: 24/11/2006, 10h56
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 09h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 17h43

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