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 :

Copier une structure dans une autre


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé

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

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Par défaut Copier une structure dans une autre
    Salut tout le monde,

    Tout est dans le titre,
    je voudrais pouvoir copier une structure dans une autre, comment dois-je faire ?

    Merci d'avance

  2. #2
    Membre éprouvé

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

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Par défaut
    moi j'utilise cette méthode c'est la bonne?
    CopyMemory(@ModuleReel,@ModuleTheorique,sizeof(ModuleTheorique));

  3. #3
    Membre éprouvé

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

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Par défaut
    Il semblerait que non , en faisant comme ça mes deux Records sont a la meme adresse, j'ai l'impression

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Euh vu le peu d'informations je dirais

    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var
      MaStructure1,MaStructure2 : TMaStructure;
     
    begin
    // On considère que MaStructure1 à les données
     
    MaStructure2 := MaStruture1;
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    Citation Envoyé par rvzip64 Voir le message
    Il semblerait que non , en faisant comme ça mes deux Records sont a la meme adresse, j'ai l'impression
    normalement non, ils ne sont pas a la meme adresse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
      p1, p2: TPoint;
    begin
      p1 := Point(1,2);
      p2 := Point(3,4);
     
    CopyMemory(@P1, @P2, SizeOf(TPoint));
     
    //ici, P1 = P2 = (3,4)
     
    P1.X := 5;
    //P2.X vaut tjrs 3
    NB : bout de code qui ne sert a rien etant donné qu'on peut directement affecter un record a un autre, mais peut etre pratique si les 2 records font la meme taille mais sont de type different

  6. #6
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut
    j'utilise 'move'. FAIRE ATTENTION AU TAILLES ET AU CHEVAUCHEMENTS ENTRE SOURCE ET DESTINATION !!!!!

    Help delphi(7) à propos de move:

    Copie des octets de la source vers la destination.

    Unité : System
    Catégorie : routines diverses
    Syntaxe Delphi : procedure Move(const Source; var Dest; Count: Integer);

    Description

    Move copie Count octets de Source vers Dest. Aucune vérification d'étendue n'est effectuée. Move effectue une compensation en fonction du chevauchement entre les blocs source et destination.

    Dans la mesure du possible, utilisez la fonction globale SizeOf pour effectuer le comptage.

  7. #7
    Membre éprouvé

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

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Par défaut
    pour le moment j ai fais une procédue qui copie item par item, mais je vais essayer le move pour voir si cela fonctionne.

    Merci a tous

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Par défaut
    Salut,

    à titre d'info, dans l'unité Windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
    begin
      Move(Source^, Destination^, Length);
    end;

  9. #9
    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
    Peux-tu expliquer ce qui t'empêche de faire une copie par affectation de la structure à une autre ? Comme l'a montré Rayek.
    C'est ça la bonne méthode à utiliser. Pas de Move ou autre chose de ce genre ici. Car un Move ne prend pas en compte les données qui requièrent une initialisation (chaînes, tableaux dynamiques, interfaces, variants, tableaux ou record avec récursivement des données qui requièrent une initialisation).
    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.

  10. #10
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut
    Un peu d'histoire!
    Cela fonctionne maintenant car quel que soit le mode de la directive $A, les variables et constantes typées sont toujours alignées pour un accès optimal soit {$A8}, l'exécution est plus rapide. Cela n'a pas toujours été le cas : pour d'anciennes versions de turbo pascal ( et peut-être meme delphi 1 ou 2) j'ai rencontré des situations avec x1 : XXX x2 : XXX dans 2 units compilés en $a+ et $a- avec comme conséquence sizeof(x1) <> sizeof(x2).
    D'ailleurs cela ne change pas fondamentalement la réponse car alors les move étaient à manipuler qu'avec beaucoup de soins.

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

Discussions similaires

  1. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  2. Réponses: 6
    Dernier message: 16/06/2011, 12h45
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. Réponses: 2
    Dernier message: 02/06/2006, 11h26

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