Bonjour,
Ce n'est qu'une suite de cette discussion avec quelques interrogations.
Plutôt que des frames, j'ai voulu à nouveau utiliser des formes que j'ajoute à la manière d'un programme MDI.
J'ai donc un forme principale composée Layout (MainLayout) contenant un menu (pour faire simple, chaque option du menu appelle une forme différente)
Le projet est donc composé de FormMain et Form1 ... Formn, chacune de ces formes enfant contient un Layout avec un bouton permettant de fermer cette fenêtre
le code suivant me permet de mémoriser et d'afficher la forme désirée,
pour chaque option du menu j'ai un code de ce type i.e pour Forme1
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 type TFormMain = class(TForm) MainLayout: TScaledLayout; MainMenu1: TMainMenu; Forme1 : TMenuItem; ... procedure Forme1Click(Sender: TObject); private { Déclarations privées } identifie : Boolean; CurrentForm : TCustomForm; procedure EmbeddedForm(AParent:TControl; AForm:TCustomForm); public { Déclarations publiques } end; var FormMain: TFormMain; implementation {$R *.fmx} uses Formulaire1, ... ; procedure TFormMain.EmbeddedForm(AParent: TControl; AForm: TCustomForm); begin // libère la forme en cours if Assigned(CurrentForm) then CurrentForm.Free; // efface le mainlayout while AForm.ChildrenCount>0 do AForm.Children[0].Parent:=AParent; // mémorise CurrentForm:=AForm; end;
Cela fonctionne parfaitement pour chaque option du menu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TFormMain.Forme1Click(Sender: TObject); begin EmbeddedForm(MainLayout,TForm1.Create(Self)); end;
Mon problème est maintenant d'implémenter le code du bouton permettant de fermer la fenêtre, cela me paraissait simple genrece qui efface bien la fenêtre principale, mais, le souci est que si j'utilise une autre option du menu c'est parfait, si je reprend la même option cela ne fonctionne pas !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=TCloseAction.caFree; end;
Qu'est-ce que je ne vois pas
Partager