Plusieurs fenetres MDIchild

gorneaue Messages postés 6 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 16 novembre 2003 - 26 oct. 2003 à 20:59
gorneaue Messages postés 6 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 16 novembre 2003 - 27 oct. 2003 à 09:13
j'ai un projet de gestion de carnet d'adresses :
- la fenetre principale est une fenetre MDI (fsMDIForm)
- la fiche de visualisation d'un contact est une fenetre MDI Child (fsMDIChild)
- j'ai cree une classe TContact qui represente un contact

il est possible de visualiser plusieurs contacts (ie ouvrir plusieurs fenetres contact).

mon probleme est que je ne sais pas comment affecter un objet TContact different a chaque fenetre de contact.

actuellement, j'ai declare :
var le_contact : TContact
juste en dessous de la section "type ... end;" de la fiche contact.
mais le_contact est le meme objet pour chaque fenetre ouverte !

j'espere que je suis assez clair ...

2 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
26 oct. 2003 à 22:58
Tu peux, par exemple surcharger le constructeur des fiches contact et lui passer en paramètre une référence sur le contact créé :
//première chose, déclarer un nouveau constructeur pour la fiche Contact et un champ qui nous servira à manipuler les valeurs reçues en paramètre :
  private
    FContact: TContact;
  public
    constructor CreateWithContact(AOwner: TComponent; AContact: TContact);
  end;

puis, dans la partie implémentation :
constructor TMDIChild.CreateWithContact(AOwner: TComponent; AContact: TContact);
begin
  inherited Create(AOwner);
  FContact :=  AContact;
end;

Maintenant, il faut :
1/- créer un contact. Ici, j'ai initialisé ses valeurs de manière aléatoire.
2/- modifier l'appel dans du constructeur de la fiche TMdiChild :
procedure TMainForm.CreateMDIChild(const Name: string);
var
  Child: TMDIChild;
   Contact: TContact; 
begin
  Contact : = TContact.Create;
  Contact.Nom :=  StringOfChar(Chr(65 + Random(26)), random(20)+ 1);
   Contact.Prenom := StringOfChar(Chr(65 + Random(26)), random(15)+1); 
  { crée une nouvelle fenêtre enfant MDI }
  Child : = TMDIChild.CreateWithContact(Application, Contact);
  Child.Caption := Name;
  if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name);
end;


Pour vérifier tout celà, affichons les valeurs reçues dans un TMemo sur la fiche TMdiChild :
procedure TMDIChild.FormShow(Sender: TObject);
begin
  Memo1.Lines.Append('Nom : ' + FContact.Nom);
  Memo1.Lines.Append('Prénom : ' + FContact.Prenom);
end;

Ainsi, la fiche contient toutes les informations du contact qui lui est rattaché (FContact).

Pour info, j'ai déclaré la classe TContact de la façon suivante :
  TContact = class
  private
    FNom: String;
    FPrenom: string;
    procedure SetNom(const Value: String);
    procedure SetPrenom(const Value: string);
  public
    property Nom: String read FNom write SetNom;
    property Prenom: string read FPrenom write SetPrenom;
  end;

Etait-ce bien le sens de ta question ?
May Delphi be with you
0
gorneaue Messages postés 6 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 16 novembre 2003
27 oct. 2003 à 09:13
c'est exactement ce que je voulais !
merci beaucoup, mon retour a la programmation Delphi est fastidieuse ...
0
Rejoignez-nous