<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ce n'est pas aussi facile qu'on pourrait le penser. Pour une raison quelconque, vous ne pouvez pas envoyer la commande "<< Définir l'icône de la fenêtre ()" pendant le processus de création. Normalement, ça va, puisque vous pouvez simplement envoyer la commande à la fenêtre juste après. Ainsi:
maintenant = Nouvelle fenetre ( "tester" , << Modal , zone de texte ( "tester" )) ;
maintenant << Définir l'icône de la fenêtre ( "$ SAMPLE_IMAGES / pi.gif" ) ;
Cependant, en ce qui concerne les fenêtres modales, nous rencontrons des problèmes intéressants. Tout d'abord, la fenêtre modale empêche l'exécution d'autres scripts jusqu'à ce que l'utilisateur interagisse avec la fenêtre modale. Cela signifie généralement qu'au moment où nous pouvons envoyer la commande Définir l'icône de la fenêtre, la fenêtre est déjà fermée. Pour contourner ce problème, nous pouvons planifier la commande d'envoi pour 0 seconde dans le futur. Cela signifie-t-il que JMP envoie la commande dès que possible, AKA, lorsque vous arrêtez d’exécuter d’autres commandes. Puisque la fenêtre modale empêchera le script de continuer, ce sera juste après que la fenêtre soit affichée. Ce qui est parfait pour notre intention.
D'après ce qui précède, vous pourriez penser que c'est très bien, je vais simplement le programmer, mettre le code au-dessus de la création de la fenêtre et tout va bien?
programme ( 0 , maintenant << Définir l'icône de la fenêtre ( "$ SAMPLE_IMAGES / pi.gif" )) ;
maintenant = Nouvelle fenetre ( "tester" , << Modal , zone de texte ( "tester" )) ;
FAUX!
Voir le problème avec ceci est que l'objet nw n'est créé qu'après la réponse de la fenêtre modale. Contrairement aux autres fenêtres, l'objet nw ne contiendra pas de référence à la fenêtre d'affichage, mais est configuré pour stocker l'objet de données qui lui est envoyé par la fenêtre modale. Pour la plupart, ce sera {Button = -1} ou {Button = 1} selon que vous frappez "Ok" ou "Annuler". Ainsi, pour résoudre ce problème, nous avons besoin d’un objet d’affichage auquel nous pouvons envoyer la commande. La zone de texte fonctionnerait, mais j'ai choisi de l'envelopper dans une zone de liste et de l'envoyer là-bas.
On obtient donc (après un peu de refactoring):
iconFunction = Une fonction ({ boîte , chemin } ,
boîte << Définir l'icône de la fenêtre ( chemin ) ;
) ;
s = programme ( 0 , iconFunction ( vlb , "$ SAMPLE_IMAGES / pi.gif" )) ;
rapport ( s ) << Afficher la fenêtre ( 0 ) ;
maintenant = Nouvelle fenetre ( "tester" , << Modal , vlb = Vlistbox ( zone de texte ( "tester" ))) ;
C'était juste une bizarrerie intéressante de JSL que j'ai rencontrée aujourd'hui. Quelles sont vos bizarreries préférées de JSL?