Une application MDI (Multiple Document
Interface) est constitué d'une fenêtre principale appelé
le parent et des fenêtres enfants. Cette interface permet à
la fenêtre principale de contenir des fenêtre enfant.
La propriété FormStyle d'une Form permet de spécifier
le style d'une fenêtre.
Style
|
Description
|
fsMDIChild |
Fenêtre enfant
d'une application MDI. |
fsMDIForm |
Fenêtre principale
d'une application MDI. |
fsNormal |
Fenêtre normale. |
fsStayOnStop |
Fenêtre persistante. |
Par défaut, la propriété FormStyle
est à fsNormal.
Construire
une application MDI |
Pour commencer, il faut créer une nouvelle
application. Insérez un composant TMainMenu, TOpendialog. Créez
dans le menu une option Fichier et insérez dans celui-ci les
options Ouvrir et Quitter. Mettez pour la première fiche qui
sera la fenêtre principale du projet la propriété
FormStyle de l'inspecteur d'objet à fsMDIForm.
Il faut ensuite créer une nouvelle fiche, pour cela allez dans
le menu Fichier de delphi et cliquez sur Nouvelle fiche.
Votre projet comporte alors deux fiches appelées Form1 et Form2.
Mettez pour la deuxième fiche qui sera la fenêtre enfant
du projet la propriété FormStyle de l'inspecteur d'objet
à fsMDIChild. Insérez un composant TImage dans la form2.Mettez
la propriété AutoSize du compoant TImage à true.
Ouvrir une fenêtre
enfant
Pour ouvrir la fenêtre enfant, il faut tout
d'abord créer la fenêtre puis insérer ce que l'on
veut dedans et enfin redimensionner la fenêtre.
Voici un exemple permettant d'ouvrir
un fichier image dans une fenetre enfant.
procedure
TForm1.Ouvrir1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
//Créer la fenêtre enfant
Form2:=TForm2.Create(application);
//Insére le fichier dan le composant
TImage
Form2.Image1.Picture.LoadFromFile(OpenDialog1.FileName);
//redimensionne la fenêtre enfant
Form2.ClientHeight:=Form2.Image1.Picture.Bitmap.Height; Form2.ClientWidth:=
Form2.Image1.Picture.Bitmap.Width;
//Récupère le nom et l'extension
du fichier ouvert
Form2.Caption:=ExtractFileName(OpenDialog1.FileName);
end;
end; |
|
Fermer la fenêtre
enfant
Pour fermer la fenêtre enfant, il faut cliquez
deux fois sur l'évènement OnClose pour y insérer
le source.
Il y a plusieurs possibilités pour fermer une fiche.
Valeur
|
Description
|
caNone |
La fiche n'est pas autorisée à se
fermer, il ne se passe rien. |
caHide |
La fiche n'est pas fermée, juste cachée.
L'application peut toujours accéder à la fiche. |
caFree |
La fiche est fermée et toute la mémoire
allouée à la fiche est libérée. |
caMinimize |
La fiche est réduite,
pas fermée. C'est l'action par défaut pour les fiches enfant MDI. |
Voici un exemple
avec "caFree".
procedure
TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end; |
|
Fermeture d'une
mdi |
[ 13-08-2001 ] |
Programme
qui montre les possibilités de la fermeture d'une application
mdi.
Télécharger : [9
Ko] [
mdi.zip]
Auteur : Yoann
Site internet : http://delphipage.free.fr/
|
|
Construire
un menu fenêtre |
On peut construire un menu fenêtre
ce qui permettra d'offrir des options à la fiche.
Voici les différentes options que l'on utilisera.
- Suivante
- Précèdente
- Cascade
- Mosaique horizontal
- Mosaique vertical
- Fermer
- Tout fermer
Nous aurons également dans ce menu fenetre les noms des fenêtres
enfant.
Suivante
Lorsque vous avez plusieurs fiches enfants dans votre
application, vous pouvez cliquer sur Suivante pour passer à la
fenetre enfant suivante.
procedure
TForm1.Suivante1Click(Sender: TObject);
begin
Form1.Next;
end; |
|
Précèdente
Quand vous avez plusieurs fiches enfants dans votre application, vous
pouvez cliquer sur Précèdente pour revenir à la
fenetre enfant précèdente.
procedure
TForm1.Prcdente1Click(Sender: TObject);
begin
Form1.Previous;
end; |
|
Cascade
Organise les fenêtres enfant MDI afin qu'elles se
recouvrent.
procedure
TForm1.Cascade1Click(Sender: TObject);
begin
Cascade;
end; |
|
Mosaique horizontal
Organise les fiches enfant MDI horizontalement de
façon à ce qu'elles aient toutes la même taille.
procedure
TForm1.Mosaiquehorizontal1Click(Sender: TObject);
begin
Form1.TileMode:=tbHorizontal;
Form1.Tile;
end; |
|
Mosaique vertical
Organise les fiches enfant MDI verticalement de façon
à ce qu'elles aient toutes la même taille.
procedure
TForm1.Mosaiquevertical1Click(Sender: TObject);
begin
Form1.TileMode:=tbVertical;
Form1.Tile;
end; |
|
Fermer
Active la fenêtre enfant et la ferme.
procedure
TForm1.Fermer1Click(Sender: TObject);
begin
with ActiveMDIChild as TForm2 do
Close;
end; |
|
Tout fermer
Compte le nombre de fenêtre enfant mdi et les
ferme tous.
procedure
TForm1.Toutfermer1Click(Sender: TObject);
var i: integer;
begin
for i:= 0 to MdiChildCount - 1 do
MDIChildren[i].Close;
end; |
|
Obtenir les noms des fenetres
enfants dans le menu Fenêtre
Pour les applications MDI (multifiche), Delphi integre une option
pour réaliser l'effet suivant (avoir les mdi répertoriées
dans un menu):
Pour obtenir cela, il suffit de mettre
dans la propriété WindowMenu de la form principale (MDIForm)
le nom du menu voulu.
Propriété
|
Exemple
|
WindowMenu |
Fenetre1 |
Menu fenêtre |
[ 02-10-2001 ] |
Programme
montrant l'ouverture d'un fiche mdi et ayant un menu fenêtre.
Télécharger : [9
Ko] [
mdi2.zip]
Auteur : Yoann
Site internet : http://delphipage.free.fr/
|
|
Pourquoi
lors de l'exécution, la fenêtre enfant s'ouvre t-elle
? |
Par défaut, lorsque vous créez une
application mdi, la fenêtre enfant apparait lors de l'execution.
Pour y remédier, il suffit de cliquer dans le menu Projet de
delphi puis de cliquez sur Voir le source. Voici ce que vous voyez.
program
Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
begin
Application.Initialize; Application.CreateForm(TForm1, Form1);
Application.Initialize; Application.CreateForm(TForm2, Form2);
Application.Run;
end. |
|
Il faut pour ne plus voir apparaitre
à l'execution du projet la fenetre enfant, supprimer un ligne.
program
Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end. |
|