<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Non è così facile come penseresti. Per qualche motivo non è possibile inviare il comando "<< Imposta icona finestra ()" durante il processo di creazione. Normalmente questo va bene, dato che puoi semplicemente inviare il comando alla finestra subito dopo. Così:
nw = Nuova finestra ( "test" , << Modale , casella di testo ( "test" )) ;
nw << Imposta l'icona della finestra ( "$ SAMPLE_IMAGES / pi.gif" ) ;
Tuttavia, quando si tratta di finestre modali, ci imbattiamo in alcuni problemi interessanti. Innanzitutto, la finestra modale impedisce l'esecuzione di ulteriori script finché l'utente non interagisce con la finestra modale. Questo in genere significa che quando è possibile inviare il comando Imposta icona finestra, la finestra è già chiusa. Per ovviare a questo, possiamo programmare il comando send, per 0 secondi nel futuro. Che cosa fa, dice a JMP di inviare il comando il prima possibile, AKA quando smetti di eseguire altri comandi. Poiché la finestra modale interromperà la continuazione dello script, sarà subito dopo la visualizzazione della finestra. Che è perfetto per il nostro intento.
Da quanto sopra potresti pensare che va bene, lo pianifico, metto il codice sopra la creazione della finestra e siamo bravi?
programma ( 0 , nw << Imposta l'icona della finestra ( "$ SAMPLE_IMAGES / pi.gif" )) ;
nw = Nuova finestra ( "test" , << Modale , casella di testo ( "test" )) ;
SBAGLIATO!
Vedere il problema con questo è che l'oggetto nw non viene creato fino a quando non viene visualizzata la finestra modale. A differenza di altre finestre, l'oggetto nw non conterrà un riferimento alla finestra di visualizzazione, ma è impostato per memorizzare l'oggetto dati inviato dalla finestra modale. Per la maggior parte questo sarà {Button = -1} o {Button = 1} a seconda che tu abbia premuto "Ok" o "Annulla". Quindi, per risolvere questo problema abbiamo bisogno di un oggetto di visualizzazione a cui possiamo inviare il comando. La casella di testo funzionerebbe, ma ho scelto di avvolgerla in una casella di riepilogo e inviarla lì.
Così otteniamo (dopo un piccolo refactoring):
iconFunction = Funzione ({ scatola , sentiero } ,
scatola << Imposta l'icona della finestra ( sentiero ) ;
) ;
S = programma ( 0 , iconFunction ( vlb , "$ SAMPLE_IMAGES / pi.gif" )) ;
rapporto ( S ) << Mostra finestra ( 0 ) ;
nw = Nuova finestra ( "test" , << Modale , vlb = vlistbox ( casella di testo ( "test" ))) ;
Questo è stato solo un capriccio interessante di JSL che ho incontrato oggi. Quali sono le tue peculiarità preferite di JSL?