Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Accéder à une autre classe [ Divers / Aide et documentation ] (ytillang30400)

vendredi 28 septembre 2007 à 02:10:39 | Accéder à une autre classe

ytillang30400

Bonjour. J'ai un petit problème pour accéder à une autre classe dans l'écriture d'un composant. Pas d'erreur à la compilation, mais BUG au lancement de l'application test (violation d'accès à l'adresse...) Mon code : type TMonComposant = class(TComponent) private // J'ai aussi testé dans "protected" Ville:String; public // Je ne veux pas mettre la propriété "FVille" ici sinon accès public TMaClasse2 = class(TPersistent) private SN: TMonComposant; procedure MaMethode; ... var // Je ne veux pas mettre la propriété "FVille" ici sinon accès public procedure MaMethode; begin // Besoin d'accéder à la propriété de l'autre classe. // Pas d'erreur à la compil mais Bug. Plus de bug si j'enlève la ligne TMonComposant(SN).Ville:='paris'; Merci d'avance

vendredi 28 septembre 2007 à 08:32:09 | Re : Accéder à une autre classe

japee

Membre Club Administrateur CodeS-SourceS
Salut,

N'aurais-tu pas oublié de créer une instance de SN ?

constructor TMaClasse2.Create(AOwner: TComponent);
begin
  inherited;
  ...
  SN := TMonComposant.Create(self);
  ...
end;


Bonne prog'

vendredi 28 septembre 2007 à 12:45:37 | Re : Accéder à une autre classe

ytillang30400

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.


vendredi 28 septembre 2007 à 13:35:55 | Re : Accéder à une autre classe

cirec

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

il faut créer un autre constructeur pour pouvoir lui passer en paramètre
le composant qui t'intéresse:

  TMaClasse2 = class(TPersistent)
  private
    SN: TMonComposant;
    FActive:boolean;
    procedure SetActive(value:boolean);
  public
    //constructor Create;
    constructor Create(aMonComposant : TMonComposant);
  published
    property Active : boolean read FActive write SetActive;
  end;


implementation

constructor TMonComposant.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FPays:=TMaClasse2.Create(Self);
end;

destructor TMonComposant.Destroy;
begin
  FPays.Free;
  inherited Destroy;
end;


{ Classe2 }
constructor TMaClasse2.Create(aMonComposant : TMonComposant);
begin
  inherited Create;
  SN := aMonComposant;
end;

procedure TMaClasse2.SetActive(value:boolean);
begin
  SN.FVille:='paris';
end;



J'ai fait ça de tête mais ça devrait fonctionner
j'ai souvant utiliser ce genre de liaison entre deux composants


 
@+
Cirec


vendredi 28 septembre 2007 à 14:26:02 | Re : Accéder à une autre classe

ytillang30400

Super, ça marche.
Merci beaucoup à vous deux !




Cette discussion est classé dans : bug, classe, accès, accéder, tmoncomposant


Répondre à ce message

Sujets en rapport avec ce message

Accès direct au port USB [ par BCL16C84 ] Bonjour à tous.Quelqu'un de vous à-t'il une idée sur le point suivant :comment puis-je accéder à l'électronique qui pilote un port USB, de la même man Bug dans TOpenDialog : ofNoDereferenceLinks sans effet. [ par fadiese ] Bonjour à tous,Mon besoin est de récupérer au moyen d'un TOpenDialog (filtré sur *.lnk), le fichier visé par le raccourci afin de l'utiliser via un Sh hum hum .... [ par StiriX ] Bonjour à tous,alours voila mon probleme est le suivant:Dans le cadre d'un projet delphi contenant des fenêtres très répétitives, j'aimerais faire une Beug dans la procedure Write de la classe TSream [ par MePoussePasHein ] Salut The Crazy Compagny Je suis entrain de faire joue joue avec les streams : Voila ce que je suis entrain de faireVarMonStream : TFileStream;AInt : destruction liste chaînée [ par zwyx ] Bonjour à tous,J'ai modélisé une classe (TA par exemple) qui contient l'adresse d'une instance d'une autre classe (que l'on nommera TB). Ensuite, chaq Classe [ par raneria ] Salut tout le monde!        Est-il possible de faire des innerclass dans delphi? Si oui, comment?Merci d'avance!!! comment recupere un Texte d'un ATL ? [ par lo_63 ] bonjour  a tous Je voudrai faire un programme externe qui lit le texte d'une classe ATL mais avec WM_GETTEXT cela ne fonctionne pas.Mais avec une autr handle fenetre precise [ par yannfrance ] Bonsoir,Je souhaiterais récuperer le handle d'une fenêtre bien precise.Si je fais :Code :monhandle := FindWindow(nil, ma_fenetre);-FinWindow va bien r accès à une base de données distante [ par djoli ] bonjour à tous les delphinaute, je débute en delphi et mon souci est de créer une application en delphi6 qui me permette de connecter un utilisateur d Images de très grande dynamique (HDR, 32 bits/couleur) [ par acanicio ] Bonjour, Je travaille sur un projet qui doit creer en temps réel des images de très grande dynamique (HDR) pour l'astronomie à partir d'une caméra qu


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,172 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.