Aggiunta di oggetti orizzontalmenteCIAO,
Ho creato personalmente un piccolo visualizzatore di immagini per consentirmi di sfogliare una cartella di fotografie digitali da JMP 9 e includere lo script seguente. Il problema che ho è che voglio mantenere le posizioni relative della casella di riepilogo e della casella del grafico in cui vengono visualizzate le immagini mentre viene utilizzato lo strumento. Al momento, quando seleziono un'immagine dall'elenco per sostituire quella iniziale, la nuova casella del grafico viene aggiunta sotto l'elenco, mentre voglio che appaia nella stessa posizione in cui l'avevo originariamente inserita, a destra dell'elenco . So perché lo sta facendo: la proprietà "<< append" allega il nuovo grafico verticalmente. La domanda è: come posso modificare lo script per aggiungerlo orizzontalmente?
// Inizio del programma;
Pulisci il registro();
Cartella foto= "C:\Le mie foto\Scheda fotocamera 1\102_FUJI\";
Elenco immagini= File nella directory(Cartella foto ); // Ogni file è un JPEG, quindi non è necessario filtrarli;
Espr_Crea_Immagine= Espr(
Nomeimmagine = Cartella foto || ElencoImmagini [ NumeroImmagine ] ;
GB= Casella del grafico(
Dimensione della cornice (410, 308 ),
Scala X( 0, 100 ),
Scala Y( 0, 100 ),
<<colore di sfondo ( {0,7, 0,7, 0,7} ),
<<Aggiungi immagine (Aprire(Nomeimmagine ),Limiti (Sinistra( 5 ), Giusto( 95 ),Superiore (95 ),Metter il fondo a (5 ) ) )
);
// Non voglio vedere le asce, quindi sbarazzatene;
gb [ scatola degli assi (2 )] <<eliminare;
gb [ scatola degli assi (1 )] <<eliminare;
);
Espr_Sostituisci_Grafico= Espr(
ora [ Casella Proprietario (1 )] <<eliminare; // Elimina quello vecchio dalla finestra;
ora<<aggiungere ( gb ); // Aggiungi quello nuovo;
);
libbre= Casella di riepilogo(
Elenco immagini,
Numero immagine=( libbre<<ottieni indici selezionati )[1];
Val(Espr_Crea_Immagine ); // Crea una nuova casella grafica;
Val(Espr_Sostituisci_Grafico ); // Sostituisce il nuovo grafico con quello vecchio;
,
massimo selezionato (1 )
);
Numero immagine= 1; // Inizialmente mostra il primo;
Val(Espr_Crea_Immagine ); // Crea il grafico;
libbre<<set selezionato ( NumeroImmagine, 1 ); // Preseleziona il primo elemento della lista;
ora= Nuova finestra( "Nuova finestra", Casella di riepilogo H(libbre,GB ) ); // E visualizza la finestra;
// Fine del programma;
Più in generale, esiste un modo per sostituire semplicemente il grafico originale con quello nuovo in modo tale che non sia necessario decostruire parzialmente e poi ricostruire la finestra di visualizzazione, come sto facendo in questo momento? La soluzione ovvia sarebbe semplicemente quella di sostituire l'immagine iniziale all'interno della casella del grafico con quella nuova selezionata dalla casella di riepilogo, ma non riesco a farlo: utilizzando la proprietà "<< aggiungi immagine" sulla stessa casella del grafico a la seconda volta non sembra funzionare, motivo per cui al momento creo ogni volta una nuova casella grafica.
Molte grazie per eventuali suggerimenti.
Aggiunta di oggetti orizzontalmenteBella applicazione! Non ho ancora approfondito la generalizzazione del problema (modificare invece di sostituire gb), ma ho apportato una piccola modifica che sembra mantenere il layout orizzontale. Nello script qui sotto mostro solo le righe che sono state modificate.
...
Expr_Replace_Chart = Espr (
nw [ OwnerBox ( 1 )] << elimina ; // Elimina quello vecchio dalla finestra;
hlb << append ( gb ) ; // Aggiunge il nuovo elemento alla casella di riepilogo H
);
...
prova ( Valutazione ( Expr_Create_Image )) ; // Crea il grafico; // Ho racchiuso questo in prova per evitare il messaggio di errore la prima volta
...
nuovo = Nuova finestra ( "Nuova finestra" , hlb = H Casella di riepilogo ( libbre , gb ) ) ; // E visualizza la finestra; Assegna un riferimento alla casella di riepilogo H
...
Aggiunta di oggetti orizzontalmenteOttimo, grazie mille! (In realtà, qualcosa che lo renderebbe più utile in generale sarebbe un modo per determinare le dimensioni di ogni immagine quando viene caricata: se potessi farlo, potrei creare ogni grafico con le proporzioni corrette ogni volta, invece di dover schiacciare tutte le foto scattate in modalità verticale in formato orizzontale, come sono al momento. Non riesco a vedere un modo per farlo a priori, ma questo non significa che non sia possibile. Se qualcuno sa come farlo, potrebbe mostrarmelo?)
Ancora una volta, grazie mille,
Davide
Re: Aggiunta di oggetti orizzontalmenteEcco un esempio (modifica della tua idea originale) che utilizza l'immagine<
Elenco immagini = File nella directory ( PhotoFolder = Seleziona directory () ) ;
NumeroImmagine = 1 ;
Expr_Crea_Immagine = Espr (
NomeImmagine = CartellaFoto || ElencoImmagine [ NumeroImmagine ] ;
img = Apri ( NomeImmagine , jpg ) ;
img_size = img << getsize ;
Se ( img_size [ 1 ] > img_size [ 2 ] ,
img << imposta dimensione ( { 410 , 308 } ) ,
img << imposta dimensione ( { 308 , 410 } )
);
pb = Scatola delle immagini ( img ) ;
bb = Pannello Box ( , pb ) ;
);
Expr_replace_image = Expr (
nw[Pannello Box( 1 )] << delete;
hlb << aggiungi ( bb ) ;
);
libbre = Casella di riepilogo (
Elenco immagini ,
ImageNumber = ( lb << ottieni gli indici selezionati )[ 1 ] ;
Valutazione ( Expr_Create_Image ) ;
Valutazione( Expr_replace_image );,
massimo selezionato ( 1 )
);
Valutazione( Expr_Create_Image );
nw = Nuova finestra ( "test" , hlb = H Casella di riepilogo ( lb , bb ) ) ;
Oggetto: Aggiunta di oggetti in orizzontalePerfetto, è esattamente ciò di cui avevo bisogno e, in più, semplifica le cose. Grazie mille!
Aggiunta di oggetti in orizzontaleÈ stato divertente. Pur correndo il rischio di rendere la tua app troppo pesante, pubblico anche una versione con pulsanti per ruotare e ingrandire l'immagine corrente. Il tasto Alt inverte la funzione.
ImageList = File nella directory ( Cartella foto = Seleziona la directory () ) ;
NumeroImmagine = 1 ;
Expr_pb = Esper ( pb = Casella pannello ( , Casella immagine ( img ) ) ) ;
Esper_Create_Image = Esper (
NomeImmagine = CartellaFoto || ElencoImmagini [ NumeroImmagine ] ;
img = Apri ( NomeImmagine , jpg ) ;
img_size = img << getsize ;
Se ( img_size [ 1 ] > img_size [ 2 ] ,
img << imposta dimensione ( { 410 , 308 } ) ,
img << imposta dimensione ( { 308 , 410 } )
);
Expr_pb ;
);
Expr_replace_image = Esper (
nw[Scatola di derivazione( 1 )] << delete;
hlb << append ( pb ) ;
);
ruota = Scatola dei pulsanti ( "Ruota" ,
Se ( è il tasto Alt () ,
img << ruota ( - 90 ) ,
img << ruota ( 90 )
);
Expr_pb ;
Expr_replace_image ;
);
zoom = Pulsante Casella ( "Zoom" ,
Se ( è il tasto Alt () ,
img << imposta dimensione ( Elenco di valutazione ( {( img << ottieni dimensione )[ 1 ] / 1.5 , ( img << ottieni dimensione )[ 2 ] / 1.5 } ) ) ,
img << imposta dimensione ( Elenco di valutazione ( {( img << ottieni dimensione )[ 1 ] * 1.5 , ( img << ottieni dimensione )[ 2 ] * 1.5 } ) )
);
Expr_pb ;
Expr_replace_image ;
);
ruota << imposta punta ( "Ruota di 90° a destra, tieni premuto il tasto Alt per ruotare di 90° a sinistra" ) ;
zoom << Imposta suggerimento ( "premi per aumentare le dimensioni, tieni premuto il tasto Alt per diminuirle" ) ;
libbre = Casella di riepilogo
Elenco immagini ,
ImageNumber = ( lb << ottieni indici selezionati )[ 1 ] ;
Expr_Create_Image ;
Expr_replace_image ;,
massimo selezionato ( 1 )
);
Expr_Create_Image ;
nw = Nuova finestra ( "test" , hlb = Casella di riepilogo H ( Casella di riepilogo V ( lb , ruota , zoom ) , pb ) ) ;
Oggetto: Aggiunta di oggetti in orizzontaleQuesto è fantastico : ho appena incorporato quanto sopra in un'applicazione su cui sto lavorando in questo momento per utilizzarla come browser di file grafici generico: l'unica modifica che probabilmente farò è generalizzare quel rapporto di aspetto (410 per 308) per riflettere qualsiasi dimensione di input fornita, poiché le immagini che sto guardando potrebbero includere output esportati da caselle grafiche JMP che in linea di principio potrebbero essere di qualsiasi dimensione. Perché non inviare una copia di quanto sopra a File Exchange? Ci sono esempi pratici qui nell'uso di Picture Box, nello scambio di componenti in una finestra di output e nell'uso del È fondamentale, e non è difficile immaginare un'infinità di potenziali utilizzi.
Ancora una volta, grazie mille!