Fermer immédiatement une fenetre modale - Delphi/Pascal - Programmation
Marsh Posté le 23-06-2006 à 00:27:05
Bonjour,
Il est normal que celà se produise car tu lance deux instructions opposées. Il y a deux façons que je vois pour régler ton problème
La première consiste à te créer une fonction public que tu appelle juste après la création et qui te retourne le nombre d'éléments dans ton checkboxlist et tu lance ou non le modal selon le nombre retourné
Ex :
MaFenetreModale := TMaFenetreModale.create; // création de ton modal
if MaFenetreModale.PossedeElement then // vérifie si des éléments sont présents
MaFenetreModale.ShowModal // si oui, ouvre si éléments
else
MessageDlg('Pas d''éléments, fenêtre fermée',mtError,[mbOk],0); // si non, affiche un message d'erreur
La deuxième solution (que j'aime moins) s'applique si tu veux absolument voir qu'il y ai eu une fenêtre s'afficher et se fermer. Il te suffit de mettre un timer qui est activé au show de ta fiche et qui ferme la fenêtre s'il n'y a pas d'éléments. Bien sûr, il faut désactiver le timer après la première vérification si tu ne veux pas pomper du cpu pour rien. Ce n'est pas une belle solution, je te conseille l'autre mais elle peut te dépanner si tu doit voir la fenêtre
J'espère t'avoir aider
Marsh Posté le 23-06-2006 à 07:24:50
Je croi que je vait retenir le 1ere solution.
En fait, j'avais deja essayé la 2nde, mais sans desactiver le timer apres la 1ere verif (puisque de toute facon, je ferme). Manque de bol, la commande close n'etait pas prise en compte au falacieu pretexte qu'il y avait une impresion en cour (ma fenetre sert à choisir quels document imprimer, dans ce cas, toutes les impression etant obligatoire, il sufit d'imprimer des la creation)
Resultat : il a lancé en boucle l'impression.
La pov bécane ne repondant absolument plus (un p'tit bi-proc avec 1Go de RAM), j'ai du retirer la prise. Il y avais 300 fichers dans le spooler
Bah... ils ont l'habitude. La veille, j'avais éffacé la base de prod
Marsh Posté le 23-06-2006 à 07:33:49
el zozo a écrit : |
si tu avais utilisé un thread pour ton impression, tu n'aurais pas eu le souci... et je sais pas si t'es au courant, mais quand une tache part en couilles, tu peux la stopper avec le gestionnaire de taches, c'est moins violent que débrancher la prise
Marsh Posté le 23-06-2006 à 09:44:31
Harkonnen a écrit : si tu avais utilisé un thread pour ton impression, tu n'aurais pas eu le souci... et je sais pas si t'es au courant, mais quand une tache part en couilles, tu peux la stopper avec le gestionnaire de taches, c'est moins violent que débrancher la prise |
Ben non Y'avais vraiment plus rien qui répondait M'est avis que je suis tombé sur un driver d'imprimante méchant
M'fin bon... On est un peu en mode 36.15 mylife, là ;-) Un p'tit flag pour pas lancer 2 fois l'impression et le monde est sauvé
Marsh Posté le 24-06-2006 à 14:47:17
sinon tu redéfinis le constructeur de ta fenetre et celui-ci renvoi une exception s'il n'y a rien a imprimer
je trouve ca nettement plus propre
Marsh Posté le 21-06-2006 à 09:36:22
Alors voila : J'ai une fenetre principale qui appele une fenetre modale perso.
MaFenetreModale := TMaFenetreModale.create;
MaFenetreModale.ShowModal;
La fenetre modales est composée d'un CheckBoxList et d'un bouton de validation.
La CheckBoxList est remplit à la création. Il se peut alors qu'elle n'ai aucun élément.
dans ce cas, je souhaiterait fermer immédiatement la fenetre.
Mais j'y arrive pas
J'ai essayé de mettre "ModalValue=MrOK" ou "self.Close" dans l'évenement "OnShow", mais ça n'a aucun effet.
Quelqu'un à une idée?