Gérer les fenêtre MDI fille MUTLIPLES [Résolu]

sylviecl 26 Messages postés vendredi 24 septembre 2004Date d'inscription 1 février 2006 Dernière intervention - 20 juil. 2005 à 10:27 - Dernière réponse : sylviecl 26 Messages postés vendredi 24 septembre 2004Date d'inscription 1 février 2006 Dernière intervention
- 21 juil. 2005 à 15:39
Bonjour,
J'ai récupéré sur le site (d'ailleurs bravo à celui qui la fait, c'est génial) comment gérer une fiche mdi fille unique mais le problème c'est que je dois gérer des filles multiples.
Pouvez-vous m'aidez ?
Voici le code :

function TFormMenu.OpenChild(FormFichesInter: TFormClass): TForm;
var
i : Integer;
begin
Result := nil;
for i := 0 to Application.MainForm.MdiChildCount - 1 do
begin
if Application.MainForm.MdiChildren[i].ClassType = FormFichesInter then
begin
//On mémorise directement MdiChildren[i] car l'ordre
//du tableau est changé ensuite par BringToFront
Result := Application.MainForm.MdiChildren[i];
break;
end;
end;
if Result <> nil then
begin
//si déjà créé et pas visible alors on remet la fenêtre au 1er plan
if Result.WindowState = wsMinimized then
Result.WindowState := wsNormal;
Result.BringToFront;
end
else
//sinon on crée la fenêtre
Result := FormFichesInter.Create(Application);
end;

Désolée j'ai pas pu mettre entre code j'ai des problèmes avec l'affichage du site.
Merci
Afficher la suite 

5 réponses

Répondre au sujet
sylviecl 26 Messages postés vendredi 24 septembre 2004Date d'inscription 1 février 2006 Dernière intervention - 21 juil. 2005 à 15:39
+3
Utile
Bon, j'ai réussi à trouver quelquechose qui fonctionne. J'ai bien la fiche d'intervention que j'ai cliqué dans la liste des interventions qui s'affiche. Par contre je ne peux pas en afficher plusieurs en même temps. Etant donné que je travaille à partir des tables, il ne peut pas apparemment faire apparaître les données de plusieurs enregistrements en même temps. Dommage, si quelqu'un sait comment faire ?
Autrement, si cela intéresse quelqu'un voilà mon code.
Merci pour votre aide, car ça ma permis d'avancer et surtout de voir mon problème différemment.
Tchao

//Cette fonction permet de gérer les fenêtre MDI fille UNIQUE:
//- si la fiche est déjà ouverte, elle passe au premier plan
//- si elle était minimisée, elle reprend une taille normale
//- si elle n'existe pas, elle est créée
//- si la fiche existait déjà mais que ce n'est plus les mêmes données
// elle est mise à jour
function TFormMenu.OpenChild(FormFichesInter: TFormClass): TForm;
var
i : Integer;
NumFiche : integer;
begin
Result := nil;
NumFiche := DM1.QFicheInter.FieldValues['NUMINTER'];
for i := 0 to Application.MainForm.MdiChildCount - 1 do
begin
if Application.MainForm.MdiChildren[i] is FormFichesInter then
begin
DM1.TFicheInter.First;
while not DM1.TFicheInter.Eof do
begin
if NumFiche = DM1.TFicheInter.FieldValues['NUMINTER'] then
begin
Result := Application.MainForm.MdiChildren[i];
break;
end
else
DM1.TFicheInter.Next;
end;
end;
end;
if Result <> nil then
begin
//si déjà créé et pas visible alors on remet la fenêtre au 1er plan
if Result.WindowState = wsMinimized then
Result.WindowState := wsNormal;
Result.BringToFront;
end
else
begin
//sinon on crée la fenêtre
DM1.TFicheInter.First;
while not DM1.TFicheInter.Eof do
begin
if NumFiche = DM1.TFicheInter.FieldValues['NUMINTER'] then
begin
Result := FormFichesInter.Create(Application);
break;
end
else
DM1.TFicheInter.Next;
end;
end;

end;
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sylviecl
cs_neko 135 Messages postés jeudi 14 août 2003Date d'inscription 12 octobre 2006 Dernière intervention - 21 juil. 2005 à 10:09
0
Utile
J'ai pas tout compris a ta question, pourrait-tu être un peu plus précis ?
Tu veux creer des fiches MDI dynamiquement ? Toutes les mêmes ou des differentes ?

PS:
Prefere l'opérateur is au lieu d'utiliser ClassType
if Application.MainForm.MdiChildren[i].ClassType = FormFichesInter then
-> if Application.MainForm.MdiChildren[i] Is FormFichesInter then

bouh
Commenter la réponse de cs_neko
sylviecl 26 Messages postés vendredi 24 septembre 2004Date d'inscription 1 février 2006 Dernière intervention - 21 juil. 2005 à 10:16
0
Utile
Bonjour et merci de te penchez sur mon problème.
En fait je dois ouvrir plusieurs fiches enfants de même nom.
Je m'explique : j'ai une fiche parent menu principal, une fiche enfant liste des interventions et quand je clique sur la liste, je dois pouvoir afficher autant de fiches que je le souhaite. Pour l'instant, avec ce prog, si la fiche est minimisé, il me l'a met en normal, si elle n'est pas créée, il me la crée et si elle n'est pas visible elle apparait. Sauf que c'est toujours la même fiche qui apparaît et pas celle que j'ai cliqué une deuxième fois. En plus il ne veut m'en ouvrir qu'une.
Si tu peux m'aider ? Merci
Commenter la réponse de sylviecl
cs_neko 135 Messages postés jeudi 14 août 2003Date d'inscription 12 octobre 2006 Dernière intervention - 21 juil. 2005 à 10:43
0
Utile
J'ai compris ( enfin je crois lol )

Bon alors admettons que TFille soit la class type de fenetre MDI fille, de même admettons que TPrincipale soit la class de ta form principale
Sur la form principale on met 2 bouttons ( btAjouter qui va ajouter une fille et btEnlever qui va virrer une fille )
On va stocker les fiches Fille dans une list ( qu'on appelle LstChild )

Dans ton unité de la fille Principale tu te retrouve avec ça:

type
TPrincipale = class (TForm)
btAjouter: TButton;
btEnlever: TButton;
procedure btAjouterClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btEnleverClick(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
LstChild: TList;
end;


var
Principale: TPrincipale;


implementation
Uses Unit2;


{$R *.dfm}


procedure TPrincipale.btAjouterClick(Sender: TObject);
begin
//Ajout d'une fille
LstChild.Add(TFille.Create(Self));
end;


procedure TPrincipale.FormCreate(Sender: TObject);
begin
LstChild : = TList.create;
end;


procedure TPrincipale.btEnleverClick(Sender: TObject);
begin
//Destruction de la premiere fille créée
If LstChild.Count<>0 Then Begin
TFille(LstChild.Items[0]).Free;
LstChild.Delete(0);
End;
end;


end.

Voilà, avec ça tu peux creer/detruire des filles à la volée
J'espere que c'etait ce que tu attendait ^^'
bouh
Commenter la réponse de cs_neko
sylviecl 26 Messages postés vendredi 24 septembre 2004Date d'inscription 1 février 2006 Dernière intervention - 21 juil. 2005 à 10:47
0
Utile
J'essaye et je te tiens au courant .
Merci
Commenter la réponse de sylviecl

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.