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 :

Création et test de variables


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Developpeur
    Inscrit en
    Août 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Août 2005
    Messages : 22
    Points : 16
    Points
    16
    Par défaut Création et test de variables
    Bonjour

    Etant débutant en delphi, J'aimerais savoir s'il est possible de créer une variable depuis une procedure (en cliquant sur un bouton par exemple), comment tester si elle existe et comment la détruire.

    Merci

    Pat-lion

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 868
    Points : 11 347
    Points
    11 347
    Billets dans le blog
    6
    Par défaut
    une variable existe après sa déclaration (var machin: DeTypeTruc et pour sa portée et sa visibilité : globale au programme, à une unité, une procédure... selon l'endroit où elle est déclarée.

    elle peut ne pas être initialisée : variable pointant sur un objet : tant qu'il n'est pas créé, elle ne pointe sur "rien" (nil, car delphi initialise d'office la plupart des variables!)

    après libération de l'objet, la variable pointe toujours sur cet objet, qui n'existe plus... => assigner nil à la variable
    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
     
    procedure TForm1.Button1Click;
    var
      test; TObject;
    begin
      if test=nil then ShowMessage('nil') else ShowMessage('impossible');
      test:=TObject.Create;
      ShowMessage(BoolToStr(Assigned(test)));
      test.Free;
      ShowMessage(BoolToStr(Assigned(test)));
      test:=nil;
      ShowMessage(BoolToStr(Assigned(test)));
      test:=TObject.Create;
      FreeAndNil(test); // mieux !!!
      ShowMessage(BoolToStr(Assigned(test)));
     
    end;

  3. #3
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Créer !
    Disons que
    tu peux créer un objet même visuel et l'ajouter à ta fiche.
    Tu peux agrandir un tableau de variable et donc en "créer" une.
    Tu peux instancier une variable via un créateur d'objet
    Tu peux faire appel à une fonction, procédure ou méthode dans laquelle une ou des variables seront déclarées et les utiliser dans cette même méthode.

    Prenons un cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TForm1.Butonclick(sender : tobject)
    begin
      insertcontrol(TButton.create(self)); // ajout d'un bouton on ne sait 
                                                  //pas où sur la fiche probablement en 0 0
     
    end;

    Précise ta question et l'utilité de ta crétion de variable

  4. #4
    Membre à l'essai
    Profil pro
    Developpeur
    Inscrit en
    Août 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Août 2005
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    en fait, j'aimerais quelque-chose du genre :


    procedure buttonclick:
    begin

    creervariable(nom:string,valeur:string);

    end;

    puis quelque chose du genre

    if variableexists(nom:string) then ...

    et

    detruirevariable(nom:string);

    pour que la variable soit disponible pour toutes les procedures de la form

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 868
    Points : 11 347
    Points
    11 347
    Billets dans le blog
    6
    Par défaut
    pas vraiment prévu ! et pas simple...

    regarde les array of variant ?

    sinon, un TList avec des noms et valeurs associées

    [EDIT] mais pour être global, il faut déclarer le tableau ou la liste dans la section var de l'unité

  6. #6
    Membre habitué Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Points : 174
    Points
    174
    Par défaut
    salut pat-lion

    intéressant ton problème... si tu trouves une solution je suis preneur...

    Ceci dit je suis un peut perplexe car je ne voit pas comment tu peux creer une variable dans une fonction ou procédure (donc locale a cette variable ou procédure) et "jouer" avec cette meme variable dans une autre fonction ou procedure (il y a un probleme de visibilité qui se pose la)

    Enfin je vais suivre car si y a une solution, je répéte, je suis preneur .


  7. #7
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Utilise un TList et un record
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Type
      My_Variable = record
         Nom : string;
         Valeur : String;
      end;
      PMy_Variable  = ^My_Variable;
    TForm1 = class(TForm)
    private
      ListV : TStringList;
      procedure creervariable(nom:string,valeur:string);
     end
     
     procedure tform1.creervariable(nom:string,valeur:string);
    Var
       idx : integer;
       V   : PMy_Variable ;
    begin
      if Not Assigned(ListV) then begin
        ListV := TStringList.create;
        ListV.Sorted := true;
      end;
      idx :=  ListV.IndexOf(nom);
      if idx=-1 then
      begin
         New(V);
         V.Nom := nom;
         V.Valeur := valeur;
          ListV.AddOject(nom,V); 
      end
      else
      begin
        PMy_Variable(ListV.Ojects[idx])^.Valeur := valeur;
       end;
    end;
    si l'idée te séduit je te laisse le soin de tester et de terminer le code
    a+

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Les tstringlist font ça trés bien, moyennant quelques restrictions (comme sur la syntaxe des noms : pas de "="):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    tsl:=Tstringlist.create ;
    tsl.add('Name1'+'='+'Val1') ;
    tsl.add('Name2'+'='+'Val2') ;
     
    If tsl.indexofName('NameX')>0 
        then showmessage('NameX'+'='+tsl.values['NameX'])
        else showmessage('NameX'+' non trouvé') ;
    // ou alors 
    Valeur=tsl.values['NameX'] ;  
    If Valeur<>'' 
        then showmessage('NameX'+'='+Valeur)
        else showmessage('NameX'+' non trouvé') ;

  9. #9
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Bonjour,

    Je crois que tu dois pouvoir mettre "résolu" parce que la solution de Graffito est surement la meilleure (c'est celle que j'utilise depuis déjà longtemps je l'avais même oubliée car encapsulée).

    a+

  10. #10
    Membre à l'essai
    Profil pro
    Developpeur
    Inscrit en
    Août 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Août 2005
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Merci Graffito meme si ce n'est pas ce que je cherchais au départ ca va bien m'aider

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

Discussions similaires

  1. test sur variable
    Par vince2005 dans le forum Langage
    Réponses: 5
    Dernier message: 18/07/2006, 13h19
  2. Création d'un nommbre variable d'objets?
    Par nikotin dans le forum C++
    Réponses: 4
    Dernier message: 30/06/2006, 16h42
  3. Se faire une page de teste de variable
    Par DaD92 dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2006, 18h17
  4. [PHP-JS] Test des variables (PHP ou JavaScript) ??
    Par King_T dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2006, 12h19
  5. Création et utilisation de variables
    Par Furius dans le forum VBScript
    Réponses: 6
    Dernier message: 11/12/2005, 21h48

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