|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Enseignant Inscription : octobre 2004 Messages : 175 ![]() |
Bonjour,
j'ai une application qui peut créer de multiples fiches sous forme de boites de message de même class mais pas de même caption. Jusqu'à présent la fermeture de l'application entrainait la fermeture de toutes les fiches (elles ne sont pas MDIChild). Je souhaiterais dorénavant les fermer en cours d'utilisation et je ne trouve pas le moyen même avec Fincomponent. j'ai bien tenté d'utiliser Code :
|
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Développeur C++\Delphi Inscription : juillet 2006 Messages : 9 202 ![]() |
FindWindow n'est pas utile à l'intérieur d'une application
TerminateProcess va fermer ton programme, c'est plutôt un SendMessage(WM_CLOSE) pour fermer une fenêtre tu peux utilise MDIChildren[] et MDIChildCount Tu as aussi Application.Components[] et Component, ça dépend le paramètre Owner passé au Create de tes Fenêtres Tu as aussi Screen.Forms[] et FormCount
__________________
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y ! Attention Troll Méchant ! ![]() "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer ! L'ignorance n'excuse pas la médiocrité ! L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde) Il faut avoir le courage de se tromper et d'apprendre de ses erreurs Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié ! |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Enseignant Inscription : octobre 2004 Messages : 175 ![]() |
Salut et merci de ta réponse,
Effectivement TerminateProcess ferme le programme, alors j'ai essayé SendMessage(LeHandle,WM_CLOSE,0,0), mais ça veut rien savoir... Pour MDIChildren[] et MDIChildCount, c'est exclus en effet la MainForm crée une multitude de MDIChildren de différentes class en fonction des sollicitations. L'une de ces class dont les résultats m'intéressent appelle une unité sans Form par une détection sur une grille des résultats du clic gauche de la souris et des touches schift et alt associées. Cette unité elle-même envoie un signal à la fiche MainForm qui décide de la création de toutes ces boîtes de message. Je vais creuser, merci de la piste. |
|
|
00
|
|
|
#4 | ||
|
Nouveau Membre du Club
![]() Enseignant Inscription : octobre 2004 Messages : 175 ![]() |
on ne peut plus simple... merci de ton coup de pouce
![]() Code :
|
||
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Enseignant Inscription : octobre 2004 Messages : 175 ![]() |
Je viens de m'apercevoir que si l'on teste à nouveau la liste des fenêtres après la fermeture des n fiches identiques, les noms des fiches closed subsistent et le nombre de fiches reste celui d'avant fermeture. :
Donc si l'on en a fermé 4 sur 9 il reste toujours... 9 nanes en mémoire... et si on en ouvre une supplémentaire on se retrouve avec 10 fiches dont seulement 6 sont bien réelles. Comment faire la mise à jour ? Encore mieux si je ferme les dites fiches individuellement par l'évènement Onclose... elles demeurent dans la liste Si j'utilise Free au lieu de Close, je lève évidemment une classe d’exception sauf pour la dernière bien sûr... |
|
|
00
|
|
|
#6 | ||
|
Membre émérite
![]() Inscription : avril 2008 Messages : 863 ![]() |
il suffit de les retirer du projet
pour créer une nouvelle instance de fiche tu fais Code :
|
||
|
|
00
|
|
|
#7 | |||
|
Membre Expert
![]() Dev/For/Vte/Ass Inscription : août 2008 Messages : 1 499 ![]() |
Citation:
Utilise plutôt screen.Forms[i].Release; De plus il faudrait savoir comment tu les crées ?? comme le dit shail tu peux utiliser ceci aussi : Code :
|
|||
|
|
00
|
|
|
#8 | |||||
|
Nouveau Membre du Club
![]() Enseignant Inscription : octobre 2004 Messages : 175 ![]() |
Citation:
la FormStyle est fsStayOnTop... elles ne doivent pas bloquer l'application... Je suis un âne... j'avais oublié de compléter l'évènement OnClose Code :
Que ces fiches soient fermées manuellement ou par commande... Screen.FormCount est correctement mis à jour et la liste des fiches ouvertes est tout à fait exacte. |
|||||
|
|
00
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Enseignant Inscription : octobre 2004 Messages : 175 ![]() |
Merci à vous deux,
Mais j'utilise le Tag pour autre chose. Screen.Forms[I].Release; ne me va pas non plus, en effet si j'ai des fiches qui trainent sur le bureau, quand je ferme l'application, leur mémoire est libérée trop tard. C'est franchement inesthétique. Donc dans mon module de fermeture, je passe d'abord par Screen.Forms[I].Hide;, puis, plus tard j'appelle l'élément du menu qui me les ferme toutes en libérant l'espace (peu importe quand). |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com