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 :

accéder à la référence d'un objet crée dans un bloc with


Sujet :

Langage Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut accéder à la référence d'un objet crée dans un bloc with
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    with TStringList.Create do
    begin
     
    end;
    Je voudrais dans la boucle utiliser la référence à mon TStringList.
    Par exemple, imaginons que j'ai une fonction qui me remplit un TSTringList je voudrais faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RemplitUnStringList(LaRéférenceSurMaTStringList)
    Est-ce possible sans déclarer une variable locale ?

  2. #2
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut
    A mon avis tu devrais mettre ta fiche ou ya ton tstringlist en use et ensuite tu l'apelle directement dans ta boucle par un truc de se genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fiche.TstringList.remplit(remplissage);

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    ce qui m'intéresse c'est avec la boucle with

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    le tutoriel ne répond pas à la question.

    il parle des références sur les PROPRIETES de l'objet et non de la référence sur l'OBJET

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    analogie avec les exception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try
    except
      on e:Exception do
      begin
          UneFonctionQuelconqueQuiPrendUneExceptionEnParamètre(e);
      end;
    end;
    avec les exceptions, on peut nommer l'exception et ainsi utiliser la référence à l'objet dans le code

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    analogie avec les classes :

    mot clé Self.

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Ok, je suis allée trop vite.
    Dans ce cas je n'ai pas de solution. Peut être regarder du coté de l'assembleur, la référence doit être créée sur la pile.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    euh, ça doit rester plus simple que déclarer une variable locale quand même

  10. #10
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bruno75
    euh, ça doit rester plus simple que déclarer une variable locale quand même
    Oui je te l'accorde

    Sinon sous Delphi 2005 il existe les Class Helper ou assistant de classe:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    program classhelper;
     
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils;
     
    Type
      Test=Class
       Nom: String;
      end;
     
      GetterClassHelper=Class Helper for TObject
        procedure GetClassName;
        Function  GetRef:TObject;
      end;
     
      procedure GetterClassHelper.GetClassName;
       begin
          writeln(Self.ClassName); // Self fait référence au type Test, et non à GetterClassHelper
       end;
     
       function GetterClassHelper.GetRef:TObject;
       begin
        Result:=Self; // Self fait référence à la variable en cours,
                      // et non à une possible instance de type GetterClassHelper
       end;
     
    Procedure Visu(Reference :TObject);
    begin
     Writeln('Reference dans visu='+Test(Reference).Nom);
    end;
     
    Var T:Test;
        T2:Test;
    begin
     T:=Test.Create;
     T.Nom:='Je suis la variable T';
     T.GetClassName;
     T2:=Test(T.GetRef);
     Writeln('T2='+T2.Nom);
     Readln;
     T.Free;
     T2:=Nil;
     
     With Test.Create do
      begin
       Nom:='Je suis la référence dans With';
       GetClassName;
       Visu(GetRef);
      end;
     Readln;
    end.
    C'est à creuser/améliorer.
    Par contre ce n'est pas documenté pour Win32 mais pour Delphi .NET.

    [edit]
    La version épurée, à placer dans une unité.
    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
    Type
     
      GetterClassHelper=Class Helper for TObject
        Function  GetRef:TObject;
      end;
     
       function GetterClassHelper.GetRef:TObject;
       begin
        Result:=Self; // Self fait référence à la variable en cours,
                      // et non à une possible instance de type GetterClassHelper
       end;
     
     // procédure de Test
    Procedure Visu(Reference :TObject);
    begin
     Writeln('Reference dans visu='+TStringList(Reference).XXX);
    end;
    L'appel devenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    begin
     With TStringList.Create do
      begin
       ...
       Visu(GetRef); // récupére la référence
       ...
      end;
    end.
    [/edit]

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    mdr, t'as vu le gros machin que tu ponds... je sais que Delphi c'est pas un langage terrible mais quand même

  12. #12
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Tu demandes une solution je t'en propose une.
    Si elle ne te satisfait pas, adresse toi à Borland et demande leur de faire évoluer leur langage sur ce point précis.

  13. #13
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    pourquoi tu passe pas par une variable locale ?

    sinon tu peut faire aussi cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RemplitUnStringList(TStringList.create);
    @++
    Dany

    ps : le langage Delphi n'est pas moins terrible qu'un autre.

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    bon je pense que c'est pas trop possible, je vais rester avec une variable locale.

Discussions similaires

  1. Portée d'un objet crée dans objet JSP!
    Par mumu27 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/05/2009, 08h08
  2. Accéder à une variable d'un objet contenu dans une collection
    Par derlone dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 30/04/2009, 16h50
  3. Transmission d'un objet crée dans une fonction
    Par EvilAngel dans le forum ASP
    Réponses: 2
    Dernier message: 10/05/2004, 20h19
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37

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