Problème femeture d'une appli "multi Form"

Résolu
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 12 oct. 2005 à 23:07
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 14 oct. 2005 à 20:53
Bonsoir la planete

J'ai un gros problème: je me suis lancé dans la création d'un programme multi Form.

J'ai donc
- une Form Principale qui me fait l'affichage d'une webcam
- une première Form secondaire qui gère une interface USB vers une carte I/O
- une seconde Form secondaire qui phagocyte un programme de navigation routiere
- Et une troisième form qui contient un player MP3.

Toutes mes Form sont en bsnone, elles ont des positions prédéfinie à l'écran, et son susceptiblede changer de taille, de se recouvrir mutuellement. Par exemple, la partie MP3 est un rectangle de 120(w) *268(h) dans 90% des cas, sauf quand j'ai besoin d'une interface + complete, au quel cas la form fait 680*268 et là j'ai les boutons load et scan, mes scrollList pour les mp3 et les playlists etc etc. A ce moment là, elle cache la Form de navigation routiere (pas grave, guidage vocal) Vous voyez le principe ?

Tout semble marcher jusqu'au moment ou je veux quitter l'appli, et là ca se gate.

j'ai systématiquement une erreur A win32 api function failed, je tente un CTRL-F2, boom, le programme a provoquer un gros merdier dans Kernel 32, la machine freeze et j'ai le droit de rebooter à la manière hard (le piti bouon reset en facade, ahemmm).

Pourl'instant, j'ai un bouton exit (surla Form principale ) qui fait :

Begin
Form_Nav.Close;
Application.processmessages;

Form_Hard.Close;
Application.processmessages;

Form_MP3.Close;
Application.processmessages;

Form_Main.Close;
end.

Bien evidement, les OnCLose de chaques form secondaires sont présents pour arreter les timers, liberer les images si besoins, fermer le prog de navigation proprement (et c'est pas du gateau), purger mes tableaux dynamique, fermer la carte interface.

En fait, chacune de ces form marche bien en tant qu'appli autonome, mais ensemble...

D'ou mon problème,comment fermer de manière propre une appli Multi Form.?

Delphi 7 Ent. sous win98se.

8 réponses

DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
14 oct. 2005 à 20:53
Résolu ! En traquant bien se qui se passait, à la fermeture du module hardware, la dll qui link le prog à la carte interface usb était tellement lente à faire son CloseDevice que le toute l'appli était déja fermée au moment où elle retournait son résultat => bug !

En fait ca s'est résolu au début en mettant 5 secondes de loop à faire des Application.Processmessages... c'est chiant, puis pris d'un doute je suis allé faire un tour sur le site du fabricant le carte I/O => dll updatée, temps de réaction quasi nul désormais, j'ai juste mis un sleep(10) histoire d'être sur.
3
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
13 oct. 2005 à 09:41
Hello,



Mais le bug se produit à la fermeture de quelle fenetre?

Sinon tu as la commande Application.Terminate pour finir une appli.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
13 oct. 2005 à 10:14
Ca se produit à la fermeture de la fenetre principale. Et ca arrive aussi avec un application.terminate (et d'ailleurs j'ai lu ici que application.terminate n'était pas recommandé...)...

gnh !
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
13 oct. 2005 à 10:29
re,



Copie le onclose de ta derniere fenetre pour que l on puisse t'aider.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0

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

Posez votre question
padsou Messages postés 121 Date d'inscription jeudi 24 janvier 2002 Statut Membre Dernière intervention 13 avril 2010
13 oct. 2005 à 10:46
tu dois libérer toutes les ressources allouées avant de fermer la fiche. Je pense spécialement à la libération des fenetres créées...
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
13 oct. 2005 à 10:51
Re,



Effectivement je pense que tu devrais un free plutot qu'un close pour fermer et libérer la mémoire allouée.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
13 oct. 2005 à 10:55
J'ai pasde onClose sur ma derniere fenetre ( la principale), uste un bouton exit



procedure TForm_Main.btn_ExitClick(Sender: TObject);

begin

Alertes.Enabled:=False;

Application.ProcessMessages;



// Fermeture Form hardware

Form_Hard.Close;

Application.ProcessMessages;



// Fermeture Form Navigation

Form_Nav.Close;

Application.ProcessMessages;



// Fermeture Form mp3

// Form_Test.Close;

Sleep(100);

// Et arret de l'appli elle-même.

Application.Terminate;



end;


gnh !
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
13 oct. 2005 à 11:16
Essayes en fesant MaForm.Free plutot que MaForm.Close.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
Rejoignez-nous