1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2012
    Messages : 111
    Points : 171
    Points
    171

    Par défaut Est-ce possible en Delphi !

    bon soir a tt le monde
    voisi un petite program avec un autre langage de programation (clipper)

    A = 5 // je declare une variable numerique A et sa valeur 5
    B = 'A' //je declare une variable alphanurerique B qui a la valeur 'A'
    juste pour l'instant tt est posible en delphil

    la commande suivante est
    C = &B
    en appel '&' un macro en clipper il signifie que C recoit la valeur d'une variable , le nom de cette variable se trouve dans une autre variable qui est B dans notre cas, c'est a dire C recoit 5
    la question est: ést ce que ça est posible en delphi..!

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 526
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 526
    Points : 20 447
    Points
    20 447

    Par défaut

    pour faire simple, non...de façon moins directe c'est envisageable.

    le langage Pascal est compilé en binaire à un niveau ou le nom des variables n'a plus d'existence. A devient une position en mémoire qui n'a qu'une adresse et aucun nom.

    par contre les classes objets avec leurs propriétés bénéficient des Run Time Type Informations (RTTI) qui permettent de retrouver la propriété "A" d'un objet. C'est ce que fait l'IDE Delphi quand on défini la propriété "Caption" d'un objet par exemple, c'est bien le nom "Caption" qui est stocké dans le DFM et GetProperty permet de la retrouver.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  3. #3
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 024
    Points : 703
    Points
    703

    Par défaut

    Hello,
    si je puis me permettre, n'ayant pas les connaissances de Paul Toth, juste une petite remarque, je crois que dans ton cas, tarekk73, c'est possible mais il suffit que B soit déclaré comme un simple pointeur.
    Ensuite tu affecte à B l'adresse de la variable A.
    Pour finir, tu pourras affecter à C la valeur contenue à l'adresse stockée dans B.
    Il faudra surement aussi "caster" ce que tu récupèreras du pointeur B (afin que Delphi te retourne le format attendu (integer ou byte ici, au choix)).
    J'espère que c'est assez clair...

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 526
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 526
    Points : 20 447
    Points
    20 447

    Par défaut

    Citation Envoyé par peter27x Voir le message
    Hello,
    si je puis me permettre, n'ayant pas les connaissances de Paul Toth, juste une petite remarque, je crois que dans ton cas, tarekk73, c'est possible mais il suffit que B soit déclaré comme un simple pointeur.
    Ensuite tu affecte à B l'adresse de la variable A.
    Pour finir, tu pourras affecter à C la valeur contenue à l'adresse stockée dans B.
    Il faudra surement aussi "caster" ce que tu récupèreras du pointeur B (afin que Delphi te retourne le format attendu (integer ou byte ici, au choix)).
    J'espère que c'est assez clair...
    oui mais non

    tu parles de ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
      a: Integer;
      b: ^Integer;
      c: Integer;
    begin
      a := 5;
      b :=@a; // adresse de a
      c := b^; // récupère le 5 dans a
    end;
    mais ça ne fonctionne pas avec le nom 'a'
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  5. #5
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 024
    Points : 703
    Points
    703

    Par défaut

    Citation Envoyé par Paul TOTH Voir le message
    oui mais non

    tu parles de ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
      a: Integer;
      b: ^Integer;
      c: Integer;
    begin
      a := 5;
      b :=@a; // adresse de a
      c := b^; // récupère le 5 dans a
    end;
    mais ça ne fonctionne pas avec le nom 'a'
    Oui c'est exactement ce que je voulais dire. Ensuite effectivement ce n'est plus le nom 'a', mais son adresse, je suis bien d'accord, mais je voyais que ça pour approcher au plus près de ce qu'il cherche à faire (ou à reproduire).

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 526
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 526
    Points : 20 447
    Points
    20 447

    Par défaut

    ceci dit, après il est toujours possible d'ajouter des rustines

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var
      noms: TStringList;
      a: Integer;
      b: string;
      i : Integer;
      c: Integer;
    begin
      noms := TStringList.Create;
      noms.AddObject('a', TInteger(@a));
      b := 'a';
      i := noms.IndexOf(b);
      c := PInteger(noms.Objects[i])^;
    end;
    et on pourra dériver TStringList pour lui ajouter des méthodes AddInteger(nom:string; Addr: PInteger); GetInteger(nom:string):Integer;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  7. #7
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2002
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2002
    Messages : 1 387
    Points : 3 174
    Points
    3 174

    Par défaut

    Avis perso : les constructions exotiques de ces vieux langages de programmation n'ont en général pas beaucoup d'intérêt. Il vaut mieux comprendre l'intention du code et tenter de la traduire en exploitant au mieux les possibilités du langage.

    @+

    M E N S . A G I T A T . M O L E M

    Debian 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3
    Windows XP, Delphi 7

    "La théorie, c'est quand on sait tout, mais que rien ne marche.
    La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi.
    En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!"

  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2002
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2002
    Messages : 1 387
    Points : 3 174
    Points
    3 174

    Par défaut

    Je précise "les constructions exotiques de ces vieux langages de programmation n'ont en général plus beaucoup d'intérêt. Il vaut mieux comprendre l'intention du code et tenter de la traduire au mieux avec les possibilités du nouveau langage, comme Delphi.

    M E N S . A G I T A T . M O L E M

    Debian 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3
    Windows XP, Delphi 7

    "La théorie, c'est quand on sait tout, mais que rien ne marche.
    La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi.
    En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!"

  9. #9
    Membre confirmé
    Inscrit en
    janvier 2009
    Messages
    599
    Détails du profil
    Informations forums :
    Inscription : janvier 2009
    Messages : 599
    Points : 602
    Points
    602

    Par défaut

    la commande suivante est
    C = &B
    Ce qu'il voulait je pense c'est mettre dans C la valeur contenue à l'adresse de B.
    Comme vous l'avez constaté.
    Mais pourquoi ne fait-il pas juste C=B ?

    Ou alors je ne comprend rien à cette heure-ci^^

    Tout a fait d'accord avec Eric :
    Avis perso : les constructions exotiques de ces vieux langages de programmation n'ont en général pas beaucoup d'intérêt. Il vaut mieux comprendre l'intention du code et tenter de la traduire en exploitant au mieux les possibilités du langage.
    C'est ce qu'il essaie de faire en choisissant Delphi non ?
    Cliquez ici et reprenez le pouvoir !
    A bas IE !, Google, et le pistage du net, testons DuckDuckGo.com
    Lords Of The Realm II Download : Lords of the realm 2
    Infos en anglais :Ici

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2005
    Messages
    5 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 206
    Points : 8 288
    Points
    8 288

    Par défaut

    Citation Envoyé par dragonno Voir le message
    Ce qu'il voulait je pense c'est mettre dans C la valeur contenue à l'adresse de B.
    Comme vous l'avez constaté.
    Mais pourquoi ne fait-il pas juste C=B ?

    Ou alors je ne comprend rien à cette heure-ci^^

    Tout a fait d'accord avec Eric :

    C'est ce qu'il essaie de faire en choisissant Delphi non ?
    Sauf que tu n'as pas compris. ce n'est pas C=B mais C=A donc C = 5 qu'il veut.
    B contient le nom d'une variable (dans ce cas c'est A) et quand il fait appel à C=&B cela doit lui retourner C = A donc C = 5.
    Modérateur Delphi

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

  11. #11
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 713
    Points : 9 469
    Points
    9 469
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par Paul TOTH Voir le message
    ceci dit, après il est toujours possible d'ajouter des rustines

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var
      noms: TStringList;
      a: Integer;
      b: string;
      i : Integer;
      c: Integer;
    begin
      noms := TStringList.Create;
      noms.AddObject('a', TInteger(@a));
      b := 'a';
      i := noms.IndexOf(b);
      c := PInteger(noms.Objects[i])^;
    end;
    Bonjour Paul !

    J'ai regardé avec intérêt ton exemple mais je n'ai pas pu le compiler.

    Identificateur non déclaré : 'TInteger'
    Qu'est-ce que c'est que ce TInteger ?

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 609
    Points : 15 800
    Points
    15 800

    Par défaut

    Le TInteger est mentionné comme type personnalisé dans E2020: Type object ou class requis (Delphi)

    TInteger est peut-être un type de Paul dans ses lib perso car AddObject n'accepte pas un pointer non typé mais un TObject
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    noms.AddObject('a', TObject(@a));
    Avez-vous remarqué que tarekk73 a posé la question le 02/01/2013 et n'est pas revenu depuis 4 mois pour nous lire !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  13. #13
    Membre confirmé
    Inscrit en
    janvier 2009
    Messages
    599
    Détails du profil
    Informations forums :
    Inscription : janvier 2009
    Messages : 599
    Points : 602
    Points
    602

    Par défaut

    Sauf que tu n'as pas compris.
    Ok, merci, je m'en doutais un peu
    D'où ma question...
    Cliquez ici et reprenez le pouvoir !
    A bas IE !, Google, et le pistage du net, testons DuckDuckGo.com
    Lords Of The Realm II Download : Lords of the realm 2
    Infos en anglais :Ici

  14. #14
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2012
    Messages : 111
    Points : 171
    Points
    171

    Par défaut

    bon jour
    Avez-vous remarqué que tarekk73 a posé la question le 02/01/2013 et n'est pas revenu depuis 4 mois pour nous lire !
    non, j'ai tous lu, et j'ai pas trouver la bonne réponse ou bien c'est impossible de faire ça en Delphi.

    c'est juste une petite question qui ma passer dans la tête quant j'ai fait une petite comparaison entre deux langage de programmation et pour connaitre les capacités de mon langage de programmation préfére Delphi

    merci mes amies pour tout vos réponses

  15. #15
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 526
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 526
    Points : 20 447
    Points
    20 447

    Par défaut

    Citation Envoyé par Roland Chastain Voir le message
    Qu'est-ce que c'est que ce TInteger ?
    c'est très probablement une erreur de saisie

    AddObject attend un TObject, c'est donc TObject qu'il faut lire et non TInteger
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  16. #16
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    4 024
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 4 024
    Points : 7 864
    Points
    7 864

    Par défaut

    @ est un pointeur non typé si le contrôle de type est désactivé {$T-} et dans ce cas, AddObject('a', @a) fonctionne puisqu'un pointeur non typé est compatible avec tous les types de pointeurs

  17. #17
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 609
    Points : 15 800
    Points
    15 800

    Par défaut

    En fait, j'ai introduit "pointeur non type" mais j'aurais du plutôt dire 'pointeur non objet"

    Car AddObject n'accepte que du TObject, donc que ce soit 'pointer non type' ou 'pointeur typé int', ils seront refusés peu importe l'option ! non ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  18. #18
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    4 024
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 4 024
    Points : 7 864
    Points
    7 864

    Par défaut

    Avec {$T-}, peu importe ce qui se cache derrière. A partir du moment où c'est un pointeur, le compilateur est content

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/06/2015, 18h58
  2. Format Tex-Latex sous Delphi est-ce possible ?
    Par PiPo123 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 13/12/2011, 14h55
  3. L'héritage multiple est-il possible en Delphi ?
    Par SchpatziBreizh dans le forum Langage
    Réponses: 8
    Dernier message: 30/06/2005, 11h30
  4. Réponses: 2
    Dernier message: 16/05/2003, 10h14
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

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