Fermer immédiatement une fenetre modale

Fermer immédiatement une fenetre modale - Delphi/Pascal - Programmation

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  :cry:  
  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?

Reply

Marsh Posté le 21-06-2006 à 09:36:22   

Reply

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

Reply

Marsh Posté le 23-06-2006 à 07:24:50    

Je croi que je vait retenir le 1ere solution.
 
 :lol: 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.   :pt1cable:  
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  :cry:  
Bah... ils ont l'habitude. La veille, j'avais éffacé la base de prod  :sol:

Reply

Marsh Posté le 23-06-2006 à 07:33:49    

el zozo a écrit :


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  :cry:  
Bah... ils ont l'habitude. La veille, j'avais éffacé la base de prod  :sol:


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 [:mlc]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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 [:mlc]


Ben non :D Y'avais vraiment plus rien qui répondait  [:alph-one] M'est avis que je suis tombé sur un driver d'imprimante méchant  [:calimero]
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é  [:gijar]


Message édité par el zozo le 23-06-2006 à 09:46:54
Reply

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 :o
 
je trouve ca nettement plus propre :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed