Classe déclarée mais non trouvée dans un composant [Résolu]

- - Dernière réponse : beckerich
Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
- 2 juil. 2010 à 17:02
Salut à tous

J'ai besoin de vos lumières car je bute sur un problème que je n'arrive pas à identifier (Surement un truc con que je vois pas )

J'ai réalisé un composant dont voici la structure

unit TracksMix;

type
 	
 TTracksMix=Class;
  
 TEffect = class(TCollectionItem)
  private
    fTracksMix:TTracksMix;
  protected 
  public
  published
  end;  
 
  TTrackMixPn = class(TCustomControl)
  private
    fTracksMix:TTracksMix;  
    ScrollBox:TScrollBox;
    fEffectCnt:TEffectCnt;
    fCaption:String;
    fSlider:TSlider;
    fPrgrBar:TPrgrBar;
    fFader:TFader;
    fOnChange : TNotifyEvent;
    Procedure Set_Caption(Value:String);
  protected
    procedure Resize; override;
    procedure Paint; override;   
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: integer); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    Property Caption : String Read fCaption Write Set_Caption;
    Property Slider:TSlider Read fSlider Write fSlider;
    Property PrgrBarr:TPrgrBar Read fPrgrBar Write fPrgrBar;
    Property Fader:TFader Read fFader Write fFader;
    Property EffectCnt:TEffectCnt Read fEffectCnt Write fEffectCnt;  
  end;


{>>TTrackMix}
 TTrackMix = class(TCollectionItem)
  private
    fOnChange: TNotifyEvent;
    fTrackMixPn:TTrackMixPn;
    fCollection  : TCollection;	
  protected
    procedure AssignTo(Dest : TPersistent); override;
    procedure Change; virtual;
    function GetDisplayName : string; override;
    property Collection : TCollection  read fCollection write fCollection;  	
  public
    constructor Create(ACollection: TCollection); override;
    destructor Destroy; override;
    procedure Assign(Source : TPersistent); override;
  published
    Property TrackMixPn : TTrackMixPn Read fTrackMixPn write fTrackMixPn;
    property OnChange    :TNotifyEvent read fOnChange write fOnChange;
  end;  
  
{>>TTrackMixCnt}
  TTrackMixCnt = class(TOwnedCollection)
  Private
    fOwner : TPersistent;
  protected
    function GetItem(Index: Integer): TTrackMix;
    procedure SetItem(Index: Integer; Value: TTrackMix);
    function GetOwner: TPersistent; override;	
  public
    ItemIndex:Integer;
    constructor Create(AOwner: TPersistent);
    function Add: TTrackMix;
    property Items[Index: Integer]: TTrackMix Read GetItem Write SetItem;
  end;

  {EVENEMENTS}
    TSolo_Event = procedure(Sender: TObject) of object;
    TMute_Event = procedure(Sender: TObject) of object;
    TPanel_Event = procedure(Sender: TObject) of object;
    TEffectClick_Event = procedure(Sender: TObject) of object;
    TSliderChange_Event = procedure(Sender: TObject) of object;
    TPrgrChange_Event = procedure(Sender: TObject) of object;
    TFaderChange_Event = procedure(Sender: TObject) of object;

  {>>TTracksMix}
  TTracksMix = class(TCustomControl)
  private
    fTrackMixCnt:TTrackMixCnt;
  protected
    procedure Paint; override;
    procedure Resize; override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: integer); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    Property TrackMixCnt:TTrackMixCnt Read fTrackMixCnt Write fTrackMixCnt;  
  end;


Jusque là pas de problème, le composant fonctionne nickel chrome .

Ceci dit j'essaye de lire et enregistrer ce composant et ses propriétés dans un fichier. J'utilise donc les procédures suivantes

{>>Procédure pour sauvegarder un projet}
procedure Save_Project(DestFile:String;Components:Array Of TComponent);
Var
  FS:TFileStream;
  IndexElmt:Integer;
Begin
  //On crée FS en mode création
  FS:=TFileStream.Create(DestFile,fmCreate);
  //On essaye
  Try
    //Pour tout les éléments du tableau
    For IndexElmt:=Low(Components) To High(Components) Do
    //D'enregistrer le composant correspondant
    FS.WriteComponent(Components[IndexElmt]);
  //Finalement
  Finally
    //On libere FS
    FS.Free;
  End;
End;

{>>Procédure pour ouvrir un projet}
procedure Open_Project(SourceFile:String;Components:Array Of TComponent);
Var
  FS:TFileStream;
  IndexElmt:Integer;
Begin
  //On crée FS en mode lecture
  FS:=TFileStream.Create(SourceFile,fmOpenRead);
  //On essaye
  Try
    //Pour tout les éléments du tableau
    For IndexElmt:=Low(Components) To High(Components) Do
    //De lire le flux dans le composant correspondant
    FS.ReadComponent(Components[IndexElmt]);
  //Finalement
  Finally
    //On libere FS
    FS.Free;
  End;
End;


Que j'utilise ainsi :

Open_Project('MonFichier.aze',[TracksMix]);

Save_Project('MonFichier.aze',[TracksMix]);



Ceci dit je rencontre un chtit problème l'utilisation de la fonction Open_Project conduit à une exception que je ne saisis pas :
La classe TTrackMixPn n'est pas trouvée.

Si quelqu'un a une idée du pourquoi je suis preneur

Merci à vous
Afficher la suite 

4 réponses

Meilleure réponse
3
Merci
Arff je viens de trouver la solution : elle était devant mes yeux

Dans le OnCreate de TTrackMix mettre :
RegisterClass(TTrackMixPn)


Merci à toi et désolé du dérangement : j'ai été nul sur ce coup là

Dire « Merci » 3

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

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

Commenter la réponse de Utilisateur anonyme
Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
0
Merci
Salut,

ça me saute aux yeux mais je ne suis pas spécialiste en TCollection :

Open_Project('MonFichier.aze', [TTracksMix]);  // et non pas TracksMix !


Luc.
Commenter la réponse de beckerich
0
Merci
Salut Beckerich : Merci pour ta réponse mais non il s'agit bien de TracksMix . TracksMix est un TTracksMix qui est déclaré dans mon projet. A moins que j'ai rien compris aux procédures WriteComponent et ReadComponent
Commenter la réponse de Utilisateur anonyme
Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
0
Merci
de rien, on est là pour ça (quand c'est constructif...)
Commenter la réponse de beckerich