Problème Indentificateur 'self' [Résolu]

jnmchl 67 Messages postés dimanche 16 octobre 2005Date d'inscription 13 novembre 2009 Dernière intervention - 26 août 2006 à 21:52 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 29 août 2006 à 04:31
Bonjour,
Excusez-moi si ce post apparaît deux fois, j'ai eu un plantage au moment de poster ma question.
Voilà donc : j'ai un projet ou dans la form principale je crée dynamiquement un objet personnel : TSegment qui dérive de TCustomControl.
Je déclare :
var TSeg : TSegment;
puis je crée :
TSeg := TSegment.Create(self);
et ça marche admirablement bien.
Pour plus de lisibilité de mon source, j'ai déplacé la procédure qui crée le TSegment dans une autre unité et là j'obtiens l'erreur : Identificateur non déclaré : 'self'

J'ai essayé plusieurs choses, déplacé mes déclaration, utilisé sender, aowner etc ... j'ai pas trouvé !
Seul TSeg := TSegment.Create(nil);
fonctionne partiellement : des méthodes ne fonctionnent pas !!!
Merci d'avance,

Jean-Michel
Afficher la suite 

3 réponses

Répondre au sujet
elguevel 735 Messages postés jeudi 19 décembre 2002Date d'inscription 22 novembre 2016 Dernière intervention - 27 août 2006 à 07:07
+3
Utile
Dans ta form principal, "self" représentais l'objet TForm1 (si tu ne l'a pas renommé) alors que dans une autre unité où il n'y à pas d'objet, self ne représente rien !

<!-- blocPrincipal -->
 /\_/\
( o.o ) ~ ElGuevel ~
 > ^ <
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de elguevel
jnmchl 67 Messages postés dimanche 16 octobre 2005Date d'inscription 13 novembre 2009 Dernière intervention - 27 août 2006 à 10:06
+3
Utile
Ok, il suffisait de faire :
TSeg := TSegment.Create(Form1);
(j'avais essayé TForm1)
Jean-Michel
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jnmchl
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 29 août 2006 à 04:31
0
Utile
correction de l'explication d'elguevel :

Self correspond a l'instance de l'objet dans lequel il est declaré, en l'occurence quand on appel Self dans une fiche, Self fait reference a l'instance de l'objet TForm (Form1, Form2 ect...).

C'est pour cela que Self n'existe pas en dehors d'un objet.

Il faut egalement faire attention a la classe des objets que l'on declare dans les constructeurs. parfois ce sont de TObject, TComponent, TPersistent, TControl, TWinControl etc...
Il faut donc bien verifier que l'objet qu'on transmet est ou est derivé de cette derniere.

Ensuite il faut faire trés attention quand on transmets Nil a un constructeur, cela peut provoquer des erreurs et ne fonctionne la plupart du temps qu'avec des constructeur ne demandant pas de Owner plus haut que TObject, TPersistent et composants non visuel ou encore quand le Owner n'est pas utilisé implicitement dans la classe.

Le mieux etant aussi de lire le guide du concepteur de composants pour se familiariser avec les constructeurs et destructeurs, en sachant comment les objets sont construit on comprend mieux comment on doit s'en servir.

Si la classe TSegment est de toi, tu peu faire une verification sur le owner avec la fonction Assigned.
cela permet de verifier si owner est nil ou non.

<hr size="2" width="100%" />Croc (click me)
Commenter la réponse de f0xi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.