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

Messages postés
67
Date d'inscription
dimanche 16 octobre 2005
Dernière intervention
13 novembre 2009
- - Dernière réponse : f0xi
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
2 janvier 2019
- 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 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Dernière intervention
22 novembre 2016
4
3
Merci
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 ~
 > ^ <

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de elguevel
Messages postés
67
Date d'inscription
dimanche 16 octobre 2005
Dernière intervention
13 novembre 2009
5
3
Merci
Ok, il suffisait de faire :
TSeg := TSegment.Create(Form1);
(j'avais essayé TForm1)
Jean-Michel

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jnmchl
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
2 janvier 2019
34
0
Merci
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.