Añadir objetos horizontalmenteHola,
He creado un pequeño visor de imágenes para poder explorar una carpeta de fotografías digitales desde JMP 9 e incluyo el script a continuación. El problema es que quiero conservar las posiciones relativas del cuadro de lista y el cuadro de gráfico donde se muestran las imágenes mientras se usa la herramienta. Actualmente, al seleccionar una imagen de la lista para reemplazar la inicial, el nuevo cuadro de gráfico se añade debajo de la lista, mientras que quiero que aparezca en la misma posición que la puse originalmente: a la derecha de la lista. Sé por qué ocurre: la propiedad "<< append" añade el nuevo gráfico verticalmente. La pregunta es: ¿cómo puedo modificar el script para añadirlo horizontalmente?
// Inicio del programa;
Borrar registro();
Carpeta de fotos= "C:\Mis fotos\Tarjeta de cámara 1\102_FUJI\";
Lista de imágenes= Archivos en el directorio(Carpeta de fotos ); // Cada archivo es un JPEG, por lo que no es necesario filtrarlos;
Expr_Crear_Imagen= Expr(
ImageName = PhotoFolder || ImageList [ ImageNumber ] ;
es= Cuadro gráfico(
Tamaño del marco (410, 308 ),
Escala X( 0, 100 ),
Y Scale( 0, 100 ),
<<color de fondo ( {0.7, 0.7, 0.7} ),
<<Agregar imagen (Abierto( ImageName ),Límites (Izquierda( 5 ), Bien( 95 ),Arriba (95 ),Abajo (5 ) ) )
);
//No quiero ver los ejes, así que deshazte de ellos;
gb [ caja de ejes (2 )] <<borrar;
gb [ caja de ejes (1 )] <<borrar;
);
Expr_Reemplazar_Gráfico= Expr(
nw [ OwnerBox (1 )] <<borrar; //Eliminar el antiguo de la ventana;
noroeste<<añadir ( gb) ); //Añadir el nuevo;
);
libra= Cuadro de lista(
Lista de imágenes,
Número de imagen=( libra<<obtener índices seleccionados )[1];
Evaluar(Expr_Crear_Imagen ); // Crea un nuevo cuadro gráfico;
Evaluar(Expr_Reemplazar_Gráfico ); // Sustituye el nuevo gráfico por el antiguo;
,
máximo seleccionado (1 )
);
Número de imagen= 1; // Inicialmente muestra el primero;
Evaluar(Expr_Crear_Imagen ); //Crea el gráfico;
libra<<conjunto seleccionado ( Número de imagen, 1 ); // Preseleccione el primer elemento de la lista;
noroeste= Nueva ventana( "Nueva ventana", Cuadro de lista H(libra,es ) ); //Y mostrar la ventana;
//Fin del programa;
En términos más generales, ¿hay alguna manera de reemplazar el gráfico original por el nuevo sin tener que deconstruir y reconstruir parcialmente la ventana de visualización, como hago actualmente? La solución obvia sería reemplazar la imagen inicial del cuadro gráfico por la nueva seleccionada en el cuadro de lista, pero no puedo hacerlo: usar la propiedad "<< añadir imagen" en el mismo cuadro gráfico una segunda vez no parece funcionar, por lo que creo un nuevo cuadro gráfico cada vez.
Muchas gracias por cualquier sugerencia.
Re: Agregar objetos horizontalmenteEsto es genial : acabo de incorporar lo anterior a una aplicación en la que estoy trabajando actualmente para usarla como explorador de archivos gráficos de propósito general: el único cambio que probablemente haré es generalizar esa relación de aspecto (410 por 308) para reflejar cualquier dimensión de entrada proporcionada, ya que las imágenes que estoy viendo potencialmente incluyen salida exportada de cuadros gráficos de JMP que en principio podrían ser de cualquier tamaño. ¿Por qué no enviar una copia de lo anterior al Intercambio de Archivos? Aquí hay ejemplos prácticos en el uso de Picture Boxes, intercambio de componentes en una ventana de salida y uso de la Es fundamental, y no es difícil imaginar una gran cantidad de usos potenciales.
¡Muchas gracias de nuevo!
Agregar objetos horizontalmenteFue divertido. Aunque corra el riesgo de que su aplicación se vuelva demasiado pesada, también publico una versión con botones para rotar y ampliar la imagen actual. La tecla Alt invierte la función.
Lista de imágenes = Archivos en el directorio ( Carpeta de fotos = Seleccionar directorio () ) ;
Número de imagen = 1 ;
Expr_pb = Expr ( pb = Caja de panel ( , Picture Box ( img ) ) ) ;
Expr_Crear_Imagen = Expr (
NombreImagen = CarpetaFotos || ListaImagen [ NúmeroImagen ] ;
img = Abrir ( NombreImagen , jpg ) ;
img_size = img << getsize ;
Si ( img_size [ 1 ] > img_size [ 2 ] ,
img << establecer tamaño ( { 410 , 308 } ) ,
img << establecer tamaño ( { 308 , 410 } )
);
Expr_pb ;
);
Expr_replace_image = Expr (
nw[Caja de panel( 1 )] << delete;
hlb << agregar ( pb ) ;
);
rotar = Caja de botones ( "Rotar" ,
Si ( es la tecla Alt () ,
img << rotar ( - 90 ) ,
img << rotar ( 90 )
);
Expr_pb ;
Expr_replace_image ;
);
zoom = Caja de botones ( "Zoom" ,
Si ( es la tecla Alt () ,
img << establecer tamaño ( Lista de evaluación ( {( img << obtener tamaño )[ 1 ] / 1.5 , ( img << obtener tamaño )[ 2 ] / 1.5 } ) ) ,
img << set size ( Lista de evaluación ( {( img << get size )[ 1 ] * 1.5 , ( img << get size )[ 2 ] * 1.5 } ) )
);
Expr_pb ;
Expr_replace_image ;
);
girar << establecer consejo ( "Gire 90° a la derecha, mantenga presionada la tecla alt para girar 90° a la izquierda" ) ;
zoom << Establecer consejo ( "presione para aumentar el tamaño, mantenga presionada la tecla Alt para disminuir" ) ;
libras = Cuadro de lista (
Lista de imágenes ,
ImageNumber = ( lb << obtener índices seleccionados )[ 1 ] ;
Expr_Create_Image ;
Expr_replace_image ;,
máximo seleccionado ( 1 )
);
Expr_Create_Image ;
nw = Nueva ventana ( "prueba" , hlb = Cuadro de lista H ( Cuadro de lista V ( lb , rotar , zoom ) , pb ) ) ;
Re: Agregar objetos horizontalmentePerfecto, justo lo que necesitaba, y además simplifica mucho las cosas. ¡Muchísimas gracias!
Re: Agregar objetos horizontalmenteAquí tienes un ejemplo (modificación de tu idea original) que utiliza imágenes.
Lista de imágenes = Archivos en el directorio ( Carpeta de fotos = Seleccionar directorio () ) ;
Número de imagen = 1 ;
Expr_Crear_Imagen = Expr (
NombreImagen = CarpetaFotos || ListaImagen [ NúmeroImagen ] ;
img = Abrir ( NombreImagen , jpg ) ;
tamaño_imagen = imagen << obtener_tamaño ;
Si ( img_size [ 1 ] > img_size [ 2 ] ,
img << set size ( { 410 , 308 } ) ,
img << set size ( { 308 , 410 } )
);
pb = Caja de imágenes ( img ) ;
bb = Caja de panel ( , pb ) ;
);
Expr_reemplazar_imagen = Expr (
nw[Caja de panel( 1 )] << delete;
hlb << append ( bb ) ;
);
lb = Cuadro de lista (
Lista de imágenes ,
NúmeroImagen = ( lb << obtener índices seleccionados )[ 1 ] ;
Evaluar ( Expr_Create_Image ) ;
Evaluación( Expr_replace_image );,
máximo seleccionado ( 1 )
);
Evaluación( Expr_Create_Image );
nw = Nueva ventana ( "prueba" , hlb = Cuadro de lista H ( lb , bb ) ) ;
Añadir objetos horizontalmente¡Excelente, muchas gracias! (De hecho, algo que lo haría más útil en general sería algún método para determinar las dimensiones de cada imagen al cargarla: si pudiera hacerlo, podría crear cada gráfico con la relación de aspecto correcta cada vez, en lugar de tener todas las fotos tomadas en modo vertical comprimidas en formato horizontal, como está ahora. No veo la manera de hacerlo ahora mismo, pero eso no significa que no sea posible. Si alguien sabe cómo hacerlo, ¿podría mostrarme cómo?)
Una vez más, muchas gracias,
David
Añadir objetos horizontalmente¡Excelente aplicación! No he analizado la generalización del problema (modificar en lugar de reemplazar gb), pero hice un pequeño cambio que parece conservar el diseño horizontal. En el script a continuación, solo muestro las líneas modificadas.
...
Expr_Reemplazar_Gráfico = Expr (
nw [ OwnerBox ( 1 )] << eliminar ; //Eliminar el antiguo de la ventana;
hlb << append ( gb ) ; // Agrega el nuevo al cuadro de lista H
);
...
intentar ( Evaluar ( Expr_Create_Image )) ; // Crea el gráfico; // Incluí esto en try para evitar el mensaje de error la primera vez
...
nuevo = Nueva ventana ( "Nueva ventana" , hlb = Cuadro de lista H ( libra , gb ) ) ; // Y mostrar la ventana; Darle una referencia al cuadro de lista H
...