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 :

Self et handle


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Self et handle
    Bonjour,

    Dans le cours de Monsieur RM di Scala (page 534) je trouve l'expression suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self.Lines.Append('adresse Memo = '+inttostr(self.Handle));
    Self désignant un objet et handle identifiant un objet, que signifie l'expression self.Handle?
    N'y a t-il pas redondance?
    N'y a t-il pas une méthode moins ésotérique pour dire la mëme chose?

    Voilà, je proposerais bien la bise en remerciement, mais je dois vous informer que je n'ai pas de soeur!!
    Enfin le coeur y est.
    Noël

  2. #2
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Dans ton code, self désigne l'objet conteneur et handle, son identifiant au sein du système, je suis vraiment pas doué pour les explications mais je vais essayé de schématiser la chose, exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
      Memo1: TMemo;
     
    ...
     
    procedure TMemo.ButtonClick(Sender: TObject);
    begin
      self.Lines.Append('adresse Memo = '+inttostr(self.Handle));   
    end;
    ici l'objet conteneur est TMemo donc Self = TMemo, ce même exemple peut s'écrire de cette façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TMemo.ButtonClick(Sender: TObject);
    begin
      Memo1.Lines.Append('adresse Memo = '+inttostr(Memo1.Handle));   
    end;
    ici memo1 est une variable de type TMemo (déclaré dans la section var)ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TMemo.ButtonClick(Sender: TObject);
    begin
      Lines.Append('adresse Memo = '+inttostr(Handle));  
    end;
    ici, la propriété lines appartient à l'objet TMemo, puisque la procedure lui appartient aussi, pas besoin de le remettre.
    Donc en resumant, Self = Memo1 = TMemo ce qui fait que Self n'est pas unique, tu peux avoir plusieurs TMemo sur une même fiche, maintenant pour identifier cet objet, il y a le handle qui lui est un identifiant unique.
    Tout objet dérivant de TWinControl possède un handle permettant de l'identifier au sein du système.

    J'éspère avoir été clair dans mes explications, dans le cas contraire, n'hésite pas à redemander.
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  3. #3
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Pour etre plus clair :

    Self contient l'adresse memoire a partir de laquelle sont stockees les informations relative a une instance d'un objet precis (Memo1 dans notre cas).
    LE handle est un "ticket" unique attribué a un objet par le systeme, de maniere a ce que ce dernier puisse retrouver ou acceder a ces donnees. C'est souvent grace au Handle que l'on peux recuperer les informations de taille par exemple d'une forme externe a l'application, le code d'une Dll chargee en memoire, etc ...

    Pour plus de precisions sur "Self", Chaque classe est unique mais les instances de celles ci peuvent etre multiples. Une instance de classe est une variable de type contenant l'adresse memoire a partir de laquelle sont stockee les variables de l'objet.
    LEs procedures sont quand a elles stockées dans une autre Zone memoire unique partagées par toutes les instances d'un objet.
    Quand un objet execute une methode de la classe, elle execute donc une procedure unique partagees par toutes les instances de cette meme classe.
    Lors du codage de cette methode (ratachee a une classe et non une instance !) il est souvent necessaire de conaitre l'instance de la classe qui va executer cette methode de maniere a pouvoir recuperer les valuers de ses proprietees.
    Self joue donc ce role.
    Une adresse de methode peut etre schematisee de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AdresseMEthodeClasse = Record
        AdresseMethodeDeLaClasse, AdresseInstanceDeL'objet : Integer;
    End;
    AdresseInstanceDeL'objet etant bien sur representé par Self ......

    Voila pour ma vison des choses, si j'ai commis des erreurs, rectifiez moi
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Self etHandle
    Un très grand merci à Lil-Jam63 ainsi qu'à Clorish. Vos explications sont parfaites et se complètent à merveille. Cela fait plusieurs semaines que j'enrageais sur ce sujet. Il me reste les threads pour me faire du mouron (ou me distraire), mais je vais me faire quelques noeuds supplémentaires aux neurones avant de poser des questions.
    Encore merci,
    Noël.

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

Discussions similaires

  1. Self, handle et parent
    Par serve dans le forum Langage
    Réponses: 9
    Dernier message: 03/12/2004, 03h42
  2. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 09h32
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. pb de récup de handle à partir d'une dll
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2002, 12h29
  5. pb de handle en C
    Par deedje dans le forum C
    Réponses: 3
    Dernier message: 21/06/2002, 16h19

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