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

  1. #1
    Responsable Lazarus & Pascal

    POO à gogo - Les enregistrements (records) avec Free Pascal et Lazarus 1/2
    Les enregistrements simples et le compactage




    À l'aide de ce tutoriel, vous devriez être capable d'utiliser au mieux les enregistrements dans vos programmes. Les novices apprendront à :


    • définir un type enregistrement simple avec ou sans variantes ;
    • affecter des valeurs à des champs et les retrouver à la demande ;
    • tenir compte des limites des enregistrements ;
    • comprendre les mécanismes régissant le compactage afin de l'utiliser à bon escient.

    Ceux qui manipulent déjà bien ces notions trouveront l'occasion de réviser leurs connaissances et de critiquer si nécessaire la présentation qui en est faite.
    Dans un tutoriel à suivre prochainement, il sera temps d'aborder les enregistrements étendus introduits par la Programmation Orientée Objet.

    http://gilles-vasseur.developpez.com...egistrements1/

    Que pensez-vous de ce tutoriel ?
    Les enregistrements sont-ils trop connus pour que vous vous y intéressiez ?
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  2. #2
    Modérateur

    Super, rafraîchir ses idées et découvrir des "détails" qui nous avaient échappés est toujours précieux.

    Juste une question sur la taille des enregistrements compactés : l'alignement sur les 8 octets du Double plutôt que les 4 de l'integer dans l'exemple dépend-il de la cible du compilateur : 64 bits ou 32 bits, ou est-il intrinsèque à FPC ?
    Delphi 5 Pro - Delphi 10.3.2 Rio 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 !

  3. #3
    Responsable Lazarus & Pascal

    Citation Envoyé par tourlourou Voir le message
    Super, rafraîchir ses idées et découvrir des "détails" qui nous avaient échappés est toujours précieux.

    Juste une question sur la taille des enregistrements compactés : l'alignement sur les 8 octets du Double plutôt que les 4 de l'integer dans l'exemple dépend-il de la cible du compilateur : 64 bits ou 32 bits, ou est-il intrinsèque à FPC ?
    Merci . A priori, la taille d'un Double fait toujours huit octets avec FPC.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  4. #4
    Expert éminent sénior
    Citation Envoyé par gvasseur58 Voir le message
    Que pensez-vous de ce tutoriel ?
    Rhôôô, magnifique !

    Juste un mot :
    Cet ensemble de connaissances va vous permettre à présent d'aborder les enregistrements étendus introduits par la Programmation Orientée Objet : ce sont des outils puissants, pour la plupart rencontrés à l'occasion de la manipulation d'objets, qui s'offrent ainsi aux programmeurs.
    Je n'ai pas trouvé où cliquer pour passer aux enregistrements étendus,
    Ben vi, tu nous mets l'eau à la bouche, là...

    Citation Envoyé par gvasseur58 Voir le message
    Les enregistrements sont-ils trop connus pour que vous vous y intéressiez ?
    Comme Yves : toujours bon de relire certains points même basiques, on en apprend tous les jours (les "packed" avec les petits champs plutôt à la fin, c'est noté !)

    Un dernier mot : précise "record" entre parenthèses après "enregistrements" dans le titre, il m'a fallu un certain temps pour capter qu'on n'allait pas parler magnétophones et multimédia, et oui...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Responsable Lazarus & Pascal

    Citation Envoyé par Jipété Voir le message

    Ben vi, tu nous mets l'eau à la bouche, là...
    Je ne suis pas bon commerçant, mais j'apprends à faire languir le chaland . Il faudra patienter un tout petit peu encore...

    Citation Envoyé par Jipété Voir le message

    Un dernier mot : précise "record" entre parenthèses après "enregistrements" dans le titre, il m'a fallu un certain temps pour capter qu'on n'allait pas parler magnétophones et multimédia, et oui...
    C'est fait .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  6. #6
    Modérateur

    A priori, la taille d'un Double fait toujours huit octets avec FPC.
    Certes, mais je me suis mal exprimé : j'imaginais qu'il était natif de débuter un Double sur un multiple de 4 octets, en 32 Bits, de la même façon que je vois l'intérêt de le faire démarrer sur un multiple de 8 en 64 Bits, pour une question d'arithmétique de pointeurs et de taille des registres.
    Delphi 5 Pro - Delphi 10.3.2 Rio 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 !

  7. #7
    Responsable Lazarus & Pascal

    Citation Envoyé par tourlourou Voir le message
    Certes, mais je me suis mal exprimé : j'imaginais qu'il était natif de débuter un Double sur un multiple de 4 octets, en 32 Bits, de la même façon que je vois l'intérêt de le faire démarrer sur un multiple de 8 en 64 Bits, pour une question d'arithmétique de pointeurs et de taille des registres.
    Non, non, c'est moi qui ai le cerveau en marmelade . Je constate l'alignement sur un multiple de 8, mais je n'ai pas la réponse technique du pourquoi de ce choix, y compris en 32 bits : est-ce une recherche d'homogénéité du compilateur ? A vérifier...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  8. #8
    Rédacteur/Modérateur

    Bonjour !

    Excellent article, qui dit tout (me semble-t-il) sur le sujet.

    Il y a une petite correction à faire dans l'exemple suivant :

    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
    uses sysutils;
    type
      TPoint = record
        X: LongInt;
        Y: LongInt;
      end;
      TRect = record
       case Integer of
         0: (Left,Top,Right,Bottom: Longint);
         1: (TopLeft,BottomRight: TPoint);
      end;
     
    var
      Point1, Point2: TPoint;
      MyRect: TRect;
    begin
     
      Point1.X := 15;
      Point1.Y := 32;
      Point2.X := 125;
      Point2.Y := 232;
      WriteLn(Format('Largeur : %d', [MyRect.BottomRight.X - MyRect.TopLeft.X]));
    end.


    Dans l'article il manque MyRect.. Désolé, j'ai loupé la discussion de relecture technique.

    P.-S. Pour les enregistrements avec constructeur, je n'en vois pas l'intérêt mais je suis prêt à changer d'avis en lisant la deuxième partie de l'article.

  9. #9
    Responsable Lazarus & Pascal

    Bonjour Roland,

    Merci pour tes compliments !

    Citation Envoyé par Roland Chastain Voir le message

    Il y a une petite correction à faire dans l'exemple suivant...
    La correction est faite :

    Citation Envoyé par Roland Chastain Voir le message

    P.-S. Pour les enregistrements avec constructeur, je n'en vois pas l'intérêt mais je suis prêt à changer d'avis en lisant la deuxième partie de l'article.

    Ça tombe bien : il n'y aura pas de constructeur . J'espère que cette seconde partie te prouvera que ces enregistrements étendus sont parfois très utiles...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  10. #10
    Membre extrêmement actif
    Que pensez-vous de ce tutoriel ? Excellent, comme tous les autres...
    Les enregistrements sont-ils trop connus pour que vous vous y intéressiez ? Y a jamais de mal à revoir les fondamentaux... Et puis, on apprend toujours, même sur un truc qu'on a utilisé et ré-utilisé pendant des décennies.

    Encore merci pour ces excellents tutos... (par contre je passe de 4 à 6 ? Ou est le 5... J'en ai loupé un ? )
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  11. #11
    Responsable Lazarus & Pascal

    Citation Envoyé par Jon Shannow Voir le message

    Encore merci pour ces excellents tutos... (par contre je passe de 4 à 6 ? Ou est le 5... J'en ai loupé un ? )
    Merci pour les encouragements

    Pour ce qui est des autres tutoriels de la série POO à gogo, il y a :

    Les notions fondamentales de la POO

    Apprendre les méthodes 1/2

    Apprendre les méthodes 2/2


    Apprendre les propriétés

    Applications : des jeux de dés tout objet

    Celui sur les enregistrements est par conséquent bien le sixième...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  12. #12
    Membre extrêmement actif
    J'avais loupé celui des jeux de dés...
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  13. #13
    Expert confirmé
    Bonjour,

    Joli, mais je me dois quand même de rappeler que les Record et leur manipulation n'ont rien à voir avec la POO
    Le mysticisme est une maladie qui crée des problèmes là où il n’en existe pas.

  14. #14
    Responsable Lazarus & Pascal

    Citation Envoyé par droggo Voir le message
    Bonjour,

    Joli, mais je me dois quand même de rappeler que les Record et leur manipulation n'ont rien à voir avec la POO
    Bien sûr, et c'est même rappelé dans l'annonce de cette première partie :

    Ceux qui manipulent déjà bien ces notions trouveront l'occasion de réviser leurs connaissances et de critiquer si nécessaire la présentation qui en est faite.
    Dans un tutoriel à suivre prochainement, il sera temps d'aborder les enregistrements étendus introduits par la Programmation Orientée Objet.
    Sans ces bases, inutile de vouloir aller plus loin...

    Cordialement,

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  15. #15
    Expert confirmé
    Bonjour,
    Citation Envoyé par gvasseur58 Voir le message
    Bien sûr, et c'est même rappelé dans l'annonce de cette première partie :

    Sans ces bases, inutile de vouloir aller plus loin...

    Cordialement,

    Gilles
    Oui, mais le titre est trompeur
    Le mysticisme est une maladie qui crée des problèmes là où il n’en existe pas.

  16. #16
    Membre habitué
    Un exemple que je ne comprends pas
    Bonjour. Merci pour ce tutoriel très intéressant.

    Cependant, je ne comprends pas très bien l'exemple de code ci-dessous. Comment se fait le lien entre point1 et Point2 d'une part et MyRect d'autre part ?

    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
    type
      TPoint = record
        X: LongInt;
        Y: LongInt;
      end;
      TRect = record
       case Integer of
         0: (Left,Top,Right,Bottom: Longint);
         1: (TopLeft,BottomRight: TPoint);
      end;
     
    var
      Point1, Point2: TPoint;
      MyRect: TRect;
    []
     
      Point1.X := 15;
      Point1.Y := 32;
      Point2.X := 125;
      Point2.Y := 232;
      Memo1.Lines.Add(Format('Largeur : %d', [MyRect.BottomRight.X - MyRect.TopLeft.X]));

  17. #17
    Responsable Lazarus & Pascal

    Citation Envoyé par thewolf Voir le message
    Bonjour. Merci pour ce tutoriel très intéressant.

    Cependant, je ne comprends pas très bien l'exemple de code ci-dessous. Comment se fait le lien entre point1 et Point2 d'une part et MyRect d'autre part ?
    Bonjour et merci pour les remarques.
    Le lien entre les points Point1 et Point2 est très simple : il n'existe pas. Il s'agit en effet d'une erreur de ma part qui ai laissé un ancien morceau de code .
    Il fallait lire :

    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
    type
      TPoint = record
        X: LongInt;
        Y: LongInt;
      end;
     
      TRect = record
       case Integer of
         0: (Left,Top,Right,Bottom: Longint);
         1: (TopLeft,BottomRight: TPoint);
      end;
     
    var
      MyRect: TRect;
    []
     
      MyRect.Top := 15;
      MyRect.Left := 32;
      MyRect.Bottom := 125;
      MyRect.Right := 232;
     
      Memo1.Lines.Add(Format('Largeur : %d', [MyRect.BottomRight.X - MyRect.TopLeft.X]));


    Cordialement,

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

###raw>template_hook.ano_emploi###