Je n'ai pas bien compris ton histoire d'appel, mais je suppose que tu as simplement affecté CreateFQClick au OnClick d'un bouton, car l'exemple d'appel que tu as fourni contient une erreur sur l'utilisation de méthodes de classes ...
Sinon ... je n'utilises jamais les Frames, on peut faire exactement la même chose avec des Form, en changeant juste le BorderStyle à bsNone ...
Ensuite, normalement, tes classes sont enregistrées, ce qui est nécessaire pour le mécanisme de flux via DFM ... (un RegisterClass peut être fait au cas où)
et dans ce cas tu pourrais écrire simple
1 2 3 4
|
FMyEcranClass := GetClass('T'+FMyEcran);
if Assigned(FMyEcranClass ) then
FMyFrame := FMyEcranClass.Create(self); |
voir encore plus simple créer un Type
TFrModeleClass = class of FrModele;
et déclarer
FMyEcran: TFrModeleClass;
et l'utiliser comme ceci
1 2 3
|
if Assigned(FMyEcran) then
FMyFrame := FMyEcran.Create(self); |
l'avantage, tu peux ajouter autant de frame, tu n'auras que peu de code à maintenir, au lieu d'une cascade de if ...
pour l'Appel
1 2 3 4 5
| procedure TFPrincipal.CreateFQClick(Sender: TObject);
begin
FMyEcran:= TFrCreationfiche; // Directement la class ... c'est plus "classe" qu'une chaine, et moins exposé aux erreurs ...
AfficherEcran;
end; |
En fin, essaye d'ajouter ceci avant le FreeAndNil
1 2
| if Assigned(FMyFrame) then
FMyFrame.Parent := nil; |
Pour répondre à ton problème, si tu appeles toujours AfficherEcran, la variable FMyFrame va contenir la dernière Frame créée ... le problème est que si tu appels une frame depuis une autre, tu vas perdre la première ... tu peux donc essayer d'utiliser une TObjectList que tu te servira comme une FILO (First In Last Out), qui te serviras de pile, ou tu déposeras une fiche avec un Add, que tu récupérera avec un Last (il existe je crois) et que tu retira avec un Delete(Count -1) jusqu'à ce que count = 0
et Sinon, tu oublies ton Système de Frame, et tu utilise du MDI, et cela donnera à mon avis globalement le même aspect en bénéficiant de quelques variables qui fournissent les MDIChild (je n'ai pas Delphi pour confirmé)
Partager