begin process at 2012 02 11 11:58:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Aide et documentation

 > 

Accéder à une autre classe


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Accéder à une autre classe

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ée 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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,998 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales