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 :

Cast de variables


Sujet :

Langage Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Cast de variables
    Bonjour à tous,

    Étudiant en informatique, j'ai commencé mon stage lundi et je suis tombé sur un problème que je n'ai jamais su résoudre auparavant (dans quelque langage que ce soit).

    Mettons que j'ai 3 variables nommées : var1, var2, var3.

    Mon but serait par le biais d'une fonction de pouvoir modifier une des 3 variables, en obtenant son identifiant en paramètre.
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure mettreATrois( i : integer);
     begin
        var + i := 3;
     end;
    J'espère m'être fais comprendre : je veux caster le "i" et le "var" afin de pouvoir assigner la valeur 3 à varI.
    J'ai bien entendu la solution de passer par le tag dans le cas d'un composant, mais même mon maitre de stage bloque sur ce cas-là et il serait appréciable d'y trouver une solution

    Bonne soirée et merci d'avance,
    Moebius.

  2. #2
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 170
    Points
    170
    Par défaut
    Par les RTTI, si var1, var2 et var3 sont des champs d'une classe il doit être possible de se débrouiller (http://laurent-dardenne.developpez.c...s/Delphi/RTTI/)
    Je ne l'ai jamais fait, c'est juste une piste

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 421
    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 421
    Points : 24 776
    Points
    24 776
    Par défaut
    les RTTI, cela revient souvent !
    Il faut bien connaitre la notion de published et de TPersistent

    On a aussi cela avec des TEdit et FindComponent qui peur retrovuer Edit1, Edit2 ... au final c'est aussi des RTTI mais gérer par le builder via le TForm

    sinon un tableau de pointeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    a: array[1..3] of PInteger;
    A[1] := @var1;
    A[2] := @var2;
    A[3] := @var3;
     
    procedure mettreATrois( i : integer);
     begin
     A[i]^ := 3;
     end;
    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

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Merci pour vos réponses.
    Étant encore débutant en Delphi, je pense que je vais plus me tourner vers la solution des pointeurs (Ô joie)

    Merci à tous,
    Mœbius.

  5. #5
    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 : 54
    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
    Salut

    Je suis quand même circonspect quant au bien fondé de ton besoin et donc de la solution à adopter.
    Concrètement, quel est ton problème réel ? (je ne parle pas de l'exemple que tu as donné au départ).
    Est-ce que le simple emploi d'un tableau ne suffirait pas ?

    @+

    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."

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    En effet l'emploi d'un tableau suffirait, mais si je pouvais m'en passer cela ne pouvait qu'être bénéfique!

    Voilà mon vrai problème :

    Une personne appuie sur un bouton qui affiche un TTabSheet, il y a 4 boutons (donc 4 TTabSheet).
    Lors de l'appuie sur ce dernier je récupère l'identifiant du bouton avec le tag : MonComposant = Fincomponent('Btn_' + (sender as TButton).tag)

    Je dois donc après faire :
    Btn_1, 2, 3, 4.visible := false;
    Puis MonComposant.visible= true;

    Sauf que dans mon problème, je ne dois pas rendre false mon composant (même si je le rend visible après).
    Il y a bien évidemment la solution où je gère TOUS les cas :
    Si tag = 2
    -> 1,3,4 := false
    Si tag = 1
    ->2,3,4 := false

    Mais cette solution est fastidieuse, lourde et surtout absolument pas optimale dans le cas de beaucoup de boutons.

    Voilà, il y a peut-être des erreurs puisque j'ai ressortis le code de tête.
    Merci pour ta réponse quand même !

    Cordialement,
    Moebius.

  7. #7
    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
    alors

    1) ton titre est erroné, ce n'est pas un CAST

    2) si tu places tes boutons dans un TPanel, Panel1.Controls[] sera un tableau de 4 composants, là tu peux CASTER TControl en TButton pour manipuler les boutons...et si suffit de tester "Panel1.Controls[i] = Sender" pour reconnaître le bouton cliqué.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  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 : 54
    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
    Effectivement, la solution de SLT correspond donc à une bonne approche.

    Utilise un tableau de TButton que tu initialises avec les boutons (en nombre déterminé à l'avance ou pas ?). Après, appelle une petite procédure du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // avec MyButtons: array[0..3] of TButtons;  à initialiser dans le FormCreate par exemple
    procedure UpdateButtons(aButton: TButton);
    var
      i : Integer;
    begin
      for i := Low(MyButtons) to High(MyButtons) do
         MyButtons[i].Visible := (MyButtons[i] = aButton);
    End;
    devrait sans doute régler ton problème. Il faut juste veiller à ce que aButton soit bien l'un des boutons attendus.
    Solution basique mais plus efficace en vitesse que FindComponent mais moins efficace en mémoire (4 références d'objets).

    @+

    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
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Parfait merci à tous
    Je vais un peu me pencher sur la solution de Toth puisque je ne connaissais pas le TControl.

    Si elle ne me plait pas, il n'y a aucun doute que j'utiliserai un tableau. En théorie je connais le nombre de boutons à l'avance, donc pas de problèmes...

    Merci beaucoup,
    Mœbius.

Discussions similaires

  1. Cast automatique variable
    Par jeeland dans le forum Général Java
    Réponses: 15
    Dernier message: 21/10/2013, 11h57
  2. Cast dynamique variable
    Par maxeur dans le forum C#
    Réponses: 5
    Dernier message: 02/07/2009, 10h16
  3. cast avec un type variable
    Par Axwell dans le forum C++
    Réponses: 2
    Dernier message: 13/11/2007, 11h06
  4. Type casting variable
    Par zulad dans le forum C#
    Réponses: 2
    Dernier message: 28/06/2007, 02h57
  5. Cast change t-il la valeur ou la variable ?
    Par gauguin dans le forum C
    Réponses: 5
    Dernier message: 09/02/2007, 18h21

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