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 :

Est-ce possible en Delphi !


Sujet :

Delphi

  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
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    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
    Le Store Excute Store

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    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
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    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
    Le Store Excute Store

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    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
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    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
    Le Store Excute Store

  7. #7
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    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 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "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!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    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 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "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!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    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 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    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
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    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 ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 426
    Points : 24 790
    Points
    24 790
    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
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    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
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    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
    Le Store Excute Store

  16. #16
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    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
    13 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 426
    Points : 24 790
    Points
    24 790
    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
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    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, 19h58
  2. Format Tex-Latex sous Delphi est-ce possible ?
    Par PiPo123 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 13/12/2011, 15h55
  3. L'héritage multiple est-il possible en Delphi ?
    Par SchpatziBreizh dans le forum Langage
    Réponses: 8
    Dernier message: 30/06/2005, 12h30
  4. Réponses: 2
    Dernier message: 16/05/2003, 11h14
  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, 16h22

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