Problème femeture d'une appli "multi Form" [Résolu]

Messages postés
459
Date d'inscription
lundi 19 avril 2004
Dernière intervention
8 avril 2009
- - Dernière réponse : DeltaFX
Messages postés
459
Date d'inscription
lundi 19 avril 2004
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.
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Dernière intervention
8 avril 2009
3
Merci
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.

Merci DeltaFX 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de DeltaFX
Messages postés
1232
Date d'inscription
lundi 4 février 2002
Dernière intervention
4 octobre 2006
0
Merci
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.
Commenter la réponse de jmp77
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Dernière intervention
8 avril 2009
0
Merci
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 !
Commenter la réponse de DeltaFX
Messages postés
1232
Date d'inscription
lundi 4 février 2002
Dernière intervention
4 octobre 2006
0
Merci
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.
Commenter la réponse de jmp77
Messages postés
121
Date d'inscription
jeudi 24 janvier 2002
Dernière intervention
13 avril 2010
0
Merci
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...
Commenter la réponse de padsou
Messages postés
1232
Date d'inscription
lundi 4 février 2002
Dernière intervention
4 octobre 2006
0
Merci
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.
Commenter la réponse de jmp77
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Dernière intervention
8 avril 2009
0
Merci
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 !
Commenter la réponse de DeltaFX
Messages postés
1232
Date d'inscription
lundi 4 février 2002
Dernière intervention
4 octobre 2006
0
Merci
Essayes en fesant MaForm.Free plutot que MaForm.Close.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
Commenter la réponse de jmp77

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.