Je ne peux pas créer avec (self) car types incompatibles.
J'ai besoin d'accéder à une propriété du composant depuis ma classe 2.
Mon code ci-dessous :
unit MonComposant;
interface
uses Classes,Dialogs,Contnrs;
type
{ Pré-déclaration du composant, sinon ma classe 2 ne le reconnait pas }
TMonComposant = class;
{ Déclaration de ma classe 2 }
TPays = class(TObjectList)
end;
TMaClasse2 = class(TPersistent)
private
SN: TMonComposant;
FActive:boolean;
procedure SetActive(value:boolean);
public
constructor Create;
published
property Active : boolean read FActive write SetActive;
end;
{ Déclaration du composant }
TMonComposant = class(TComponent)
private
// J'ai aussi testé dans "protected"
FVille : String;
FPays:TMaClasse2;
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Ville : String read FVille write FVille;
property Pays : TMaClasse2 read FPays write FPays;
end;
//var
// Je ne veux pas mettre la propriété "FVille" ni "SN" ici sinon accès public
// Si je place 2 composants dans la même page, ils doivent travailler indépendamment un de l'autre
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Examples', [TMonComposant]);
end;
{ Composant }
constructor TMonComposant.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FPays:=TMaClasse2.Create;
end;
destructor TMonComposant.Destroy;
begin
inherited Destroy;
end;
{ Classe2 }
constructor TMaClasse2.Create;
begin
inherited Create;
// ERREUR DE COMPILATION ICI
// Types incompatibles :'TComponent' et 'TMaClasse2'
// SN := TMonComposant.Create(self);
end;
procedure TMaClasse2.SetActive(value:boolean);
begin
// Pas d'erreur à la compil mais Bug à l'exécution
TMonComposant(SN).FVille:='paris';
end;
end.