Bonjour,

Je me prends pas mal la tete avec les frames. Je vais tenter de simplifier le pb.

J'ai un formulaire principal FPrincipal.
J'ai créé plusieurs frames de la même classe FrModele.

Depuis mon formulaire FPrincipal, j'appel correctement chaque frame dans un conteneur TPanel.

j'ai une variable publiée FMyFrame d'instance de classe FrModele;

J'ai une procédure AfficherEcran
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
procedure TFPrincipal.AfficherEcran;
begin
try
  FreeAndNil(FMyFrame);
  if FMyEcran='FrEcran1' then FMyFrame := TFrmEcran1.Create(self);
  if FMyEcran='FrCreationfiche' then FMyFrame := TFrmCreationfiche.Create(self);
  if FMyEcran='FrListeParticipants' then FMyFrame := TFrmListeParticipants.Create(self);
  if FMyEcran='FrMajFiche' then FMyFrame := TFrmMajFiche.Create(self);
  if FMyEcran='FrMajAdresse' then FMyFrame := TFrmMajAdresse.Create(self);
  if FMyEcran='FrMajContacts' then FMyFrame := TFrmMajContacts.Create(self);
  if FMyEcran='FrMajSuperviseur' then FMyFrame := TFrmMajSuperviseur.Create(self);
  if FMyEcran='FrMajCatalogue' then FMyFrame := TFrmMajCatalogue.Create(self);
  FMyFrame.Parent := PanelFrame;
  FMyFrame.Afficher;
except
    on E: Exception do MessageDlg('Contacter l''administrateur  :'#13#10+E.Message,mtError,[mbOk],0);
end;
end;
Depuis les boutons de ma barre d'outils j'appel simplement ma procédure AfficherEcran comme suit

Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
procedure TFPrincipal.CreateFQClick(Sender: TObject);
begin
  FMyEcran:='FrCreationfiche';
  AfficherEcran;
end;
Jusque là c'est pas bien compliqué, je vous l'accorde.

ce qui se corse désormais c'est que je voudrai depuis une frame chargée pouvoir appeler une autre frame.

pour cela je voudrai pouvoir le faire en appelant directement les procédures de mon formulaire FPrincipal.

par exemple

Evénement OnClick d'un bouton posé sur une de mes frames, j'appelle directement :

TFPrincipal.CreateFQClick(sender);
En faisant ainsi, cela fonctionne 1 fois et la 2nde je me mange un AccessViolation dans la tronche.

Comment pourrais je réaliser ce que je souhaite facilement ?
l'objectif étant de pouvoir facilement passer d'une frame à une autre en fonction d'une personnalisation de l'utilisateur.

Merci de vos lumières

@