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

Composants VCL Delphi Discussion :

Utilisation de composant sans Form est elle possible


Sujet :

Composants VCL Delphi

  1. #21
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     Type
      TMonTimer = Class(TTimer)
        private procedure TimerOnTimer(Sender : TObject);
        public  constructor Create(AOwner: TComponent); override;
      end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TMonTimer.TimerOnTimer(Sender: TObject);
    Begin
      // Ce qu'y est à faire
    End;
     
    constructor TMonTimer.create(AOwner: TComponent);
    Begin
      inherited Create(AOwner);
      Self.OnTimer := Self.TimerOnTimer;
    End;
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  2. #22
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    @Hippolyte76
    La méthode employée par /dev/null est détaillée au chapitre 7.3.2 de ton cours...

  3. #23
    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
    Salut,
    un peu de pub pour la prochaine FAQ :
    [QR]Qu'est-ce que le mot clé Self et comment l'utiliser ?
    Schématiquement à la question qui suis-je ?, le mot clé Self répond moi-même en renvoyant la référence de l'instance en cours d'utilisation au sein d'une méthode de sa classe.
    Self permet donc de connaître l'instance en cours et dans certains cas de lever toute ambiguité.

    Par exemple ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TObject.Free;
    begin
      if Self <> nil then
        Destroy;
    end;
    on souhaite savoir si l'objet en cours est instancié ou pas (nil) avant d'appeler le destructeur.
    Self est aussi une référence sur une classe et peut donc ne pas être affectée (MonObjet:=Nil). Cette méthode étant statique son appel ne pose pas de problème dans ce cas.

    Et là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    with TPaintBox&#40;Sender&#41;.Canvas.Brush do
      begin
        Color &#58;= Self.Color;
    il y a une ambiguité du à la présence de la propriété color commune à l'instance en cours d'utilisation et à un objet imbriqué (Canvas.Brush).
    Self permet ici de savoir exactement de quelle propriété on parle.

    Dans le cas d'une méthode de classe l'utilisation de Self à une signification différente, il s'agit d'une variable de type référence de classe contenant la classe effective de l'objet.
    Schématiquement dans ce cas le mot clé Self répond à la question De quelle classe suis-je ? en répondant De la classe TMaclasse.
    Citation Envoyé par Hauwke
    Le self correspond à l'entité responsable de la destruction du composant. en l'occurence, "Self" signifie que le TTimer est responsable de sa destruction.
    Je ne pense que cela soit tout à fait ça. Dans ce contexte, le responsable de la destruction c'est plus le développeur via le code de finalisation de la DLL. Avec une Form le développeur ne s'en soucis pas.

    Si on regarde le code de TComponent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    constructor TComponent.Create&#40;AOwner&#58; TComponent&#41;;
    begin
      FComponentStyle &#58;= &#91;csInheritable&#93;;
      if AOwner <> nil then AOwner.InsertComponent&#40;Self&#41;;
    end;
    Le paramètre peut être à nil c'est à dire que le composant en question n'a tout simplement pas de propriétaire. cf l'aide en ligne de InsertComponents.
    J'utiliserais plutôt le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Timer1 &#58;= TTimer.Create&#40;NIL&#41;; // Pas de propriétaire
    Sinon à quoi correspond Self puisse qu'il n'y a pas de propriétaire et que Timer1 n'existe pas encore ?

    Pour plus d'info voir le tuto de SJRD sur la création de composant.

  4. #24
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Bonsoir,
    Citation Envoyé par Laurent Dardenne
    un peu de pub pour la prochaine FAQ :
    Bon, de mémoire celà fait déjà au moins deux fois qu'on nous met l'eau à la bouche avec cette nouvelle FAQ mais telle Soeur Anne...
    A quand la publication?
    Cordialement,
    Hauwke

  5. #25
    Membre confirmé

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Points : 485
    Points
    485
    Par défaut
    Self ne signifie pas qu'il est responsable de sa destruction, pour cela, on met nil.

    Self est utilise dans les methodes des objets pour faire reference a cet objet.

    Donc si tu utilise Self hors d'une methode d'un objet, tu devrais avoir une erreur de compilation, sinon le Self pointera vers l'objet utilise.

    Attention donc a ne pas faire de create(Self) en croyant qu'il se gere tout seul. (pour les utilisateurs, c'est pas grave, mais si vous creez des composants, il faut penser a gerer les composants dont vous etes le owner !!).

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 109
    Points : 71
    Points
    71
    Par défaut
    Dis j'pensais a un truc pour ton projet qui est une DLL si j'ai bien compris
    Tu peux pas essayer d'ajouter un DATA module? ca te permettera d'avoir une form sans l'avoir?

    Bon courage en tout cas

  7. #27
    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 Hauwke
    Bon, de mémoire celà fait déjà au moins deux fois qu'on nous met l'eau à la bouche avec cette nouvelle FAQ mais telle Soeur Anne...
    A quand la publication?
    Elle est finalisée mais on a décidé d'ajouter des éléments sur Intraweb donc cela repousse un peu sa publication.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 18
    Dernier message: 27/08/2010, 10h34
  2. Réponses: 7
    Dernier message: 17/07/2008, 10h32
  3. La modification du vote (étoile) du sujet est-elle possible ?
    Par pottiez dans le forum Evolutions du club
    Réponses: 1
    Dernier message: 04/05/2006, 22h48
  4. Comment utiliser un composant sans son nom ?
    Par aliwassem dans le forum Langage
    Réponses: 4
    Dernier message: 03/10/2005, 21h47
  5. une interpolation de forme est elle possible
    Par tetsuo chima dans le forum Flash
    Réponses: 3
    Dernier message: 07/10/2003, 17h31

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