Gérer les fenêtre MDI fille MUTLIPLES

Résolu
sylviecl Messages postés 26 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 1 février 2006 - 20 juil. 2005 à 10:27
sylviecl Messages postés 26 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 1 février 2006 - 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

5 réponses

sylviecl Messages postés 26 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 1 février 2006
21 juil. 2005 à 15:39
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;
3
cs_neko Messages postés 135 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 12 octobre 2006 1
21 juil. 2005 à 10:09
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
0
sylviecl Messages postés 26 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 1 février 2006
21 juil. 2005 à 10:16
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
0
cs_neko Messages postés 135 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 12 octobre 2006 1
21 juil. 2005 à 10:43
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sylviecl Messages postés 26 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 1 février 2006
21 juil. 2005 à 10:47
J'essaye et je te tiens au courant .
Merci
0
Rejoignez-nous