[JMP 17.0.0]
Ho un file di progetto su cui sto lavorando che contiene molte tabelle di dati, ciascuna con uno script relativamente di lunga durata che utilizzo per generare un diario come output.Ho uno script separato in un'altra tabella che richiama ciascuno degli script delle singole tabelle, quindi raccoglie i singoli diari in un unico diario per creare un rapporto finale.[Probabilmente avrei potuto rendere questo approccio molto più pulito, ma non sono un programmatore a tempo pieno (o addirittura part-time).]
Volevo implementare una sorta di barra di avanzamento/finestra di messaggio di aggiornamento "X di Y completata" per tenere traccia dell'avanzamento dell'esecuzione dopo l'esecuzione di ogni singolo script di tabella.
Questa è la storia di come sono arrivato alla mia soluzione attuale.
TL;DR – Dopo aver trascorso una giornata a elaborare un approccio intelligente per me, mi sono imbattuto in Caption(), che sarebbe stata la cosa più semplice da fare.
Ma ho ancora alcune domande generali su come le finestre possono essere manipolate all'interno dell'ambiente del progetto, quindi resta con me se sei interessato.
Ci sono diverse ottime idee di implementazione in cui mi sono imbattuto durante la ricerca nelle discussioni, tra cui:
https://community.jmp.com/t5/Uncharted/Progress-Bar/ba-p/21160
https://community.jmp.com/t5/Uncharted/Progress-Bar-with-Cancel-Button/ba-p/433560#U433560
https://community.jmp.com/t5/Discussions/Suggestion-on-how-to-script-a-small-update-progress-window-for/mp/250419
Tuttavia, quando provo a implementare queste soluzioni all'interno di un ambiente di progetto, la nuova barra di avanzamento che viene creata viene sempre creata come una nuova scheda nel progetto. Quando viene avviato lo script successivo della serie, la finestra della barra di avanzamento viene sepolta dalle successive manipolazioni della tabella dati associate allo script, quindi non viene mai visualizzato il messaggio di avanzamento aggiornato.
Domanda generale n. 1: non riesco a capire come creare una finestra "pop-out" come finestra di messaggio senza che sia una finestra modale.Da quanto ho capito, le finestre modali mettono in pausa lo script finché l'utente non ha interagito con la finestra, che è ciò che non voglio.C'è qualcosa che mi manca su come posso creare una nuova finestra non modale come "pop-out" anziché come nuova scheda?
[Ancora una volta, mi rendo conto ora che esiste una cosa come Caption().Ma ho ancora questa domanda generale sul fatto se tutte le nuove finestre in un progetto debbano essere aperte come nuove schede anziché come finestre pop-out.]
Domanda generale n. 2: Poi ho pensato... forse c'è un modo per agganciare questa finestra della barra di avanzamento appena creata in un'altra posizione nel layout del progetto in modo che sia separata dal resto dell'azione – ad esempio, Nuova finestra() << Dock( “ Giusto").Ma non sono riuscito a trovare nulla del genere.C'è un modo per scrivere la posizione di aggancio di una finestra?
Poi ho passato molto tempo a imparare come funzionano i layout di progetto e come possono essere scritti in script.Ho imparato tantissimo da quell'esercizio.Alla fine, ho creato uno script che modifica temporaneamente il layout del progetto per sostituire la finestra "File recenti" con una finestra personalizzata "Aggiornamento avanzamento" che fa quello che sto cercando, per poi tornare alla finestra "File recenti". " finestra.Come puoi immaginare, è una sceneggiatura piuttosto goffa, ma porta a termine il lavoro.Ho provato a generalizzarlo nel miglior modo possibile e l'ho allegato qui nel caso qualcuno fosse interessato a vedere come funziona.
Ad un certo punto della giornata mi sono reso conto che forse c'è un modo per far funzionare questo forzando le nuove finestre create dai singoli script a essere invisibili, in modo che la finestra della barra di avanzamento rimanga in primo piano.Ma sarebbe stato meglio se ci avessi pensato in anticipo.A questo punto dovrei apportare un paio di centinaia di modifiche allo script per ottenere questa opzione (se possibile).
Dopo tutto questo, stamattina sono venuto al lavoro per raccontarvi tutta questa storia e quasi immediatamente mi sono imbattuto in Caption(), che fa praticamente tutto ciò che volevo fare in due concise righe di codice.Vorrei solo averlo capito prima.Immagino che se volessi davvero avere una vera "barra" di avanzamento e non solo testo, forse Caption() non funzionerebbe.Ma non avevo davvero bisogno che fosse così stravagante.
Grazie per l'attenzione.
Gioele