Determinación del tamaño de un cuadro de texto antes de dibujarlo.Hola,
¿es posible obtener el tamaño de un cuadro de texto antes de dibujar el cuadro de texto?
Genero dinámicamente una ventana y necesito generar espaciadores para alinear objetos. Por lo tanto, necesito el tamaño de varios elementos del cuadro de texto, antes de dibujarlos.
Aclamaciones
Re: Determinar el tamaño de un cuadro de texto antes de dibujarlo.Es posible que desee probar Esperar (0). Esto básicamente dice: espera hasta que las tareas se hayan completado.
Re: Determinar el tamaño de un cuadro de texto antes de dibujarlo.Aquí está la función que utilizo para determinar la altura del cuadro de texto. El argumento hide (1) evita que se muestre.
get_height = function({_text, _pixels},
{Default Local},
pname = "get_height";
if (is missing(_text),
// then
pix_height = 0;
,
// else if
_text == "",
pix_height = 0;
,
// else we've got some text to work with
tb = text box(_text, set wrap(_pixels), set width(_pixels), hide(1));
tmp_win = new window("test", tb);
// Get size info
pix_height = (tb << get size)[2];
tmp_win << close window;
);
pix_height;
); // end get_height
Re: Determinar el tamaño de un cuadro de texto antes de dibujarlo.Hola David,
básicamente, eso es lo que hice al final, solo que no eliminé la ventana sino que simplemente envié los mensajes de tamaño correcto a los cuadros de texto con "<< Establecer ancho"
!¡TENER CUIDADO!
todos los que intentan esto: después de dibujar su ventana inicial, debe esperar un poco antes de poder tomar las medidas con "<< Obtener tamaño". Una espera (0.0001) fue suficiente para mí. Si no lo haces, suceden cosas extrañas. (Eso me tomó medio día para averiguarlo).
!¡TENER CUIDADO!
Re: Determinar el tamaño de un cuadro de texto antes de dibujarlo.El método básico: crear una ventana que contenga su contenido, luego enviar mensajes para obtener los tamaños, luego eliminar la ventana (con suerte antes de que se renderice), luego usar los tamaños para renderizar la ventana de manera más elegante. Tengo que usar esta técnica a veces para obtener resultados consistentes tanto en Windows como en Mac.
Re: Determinar el tamaño de un cuadro de texto antes de dibujarlo.Sí, es posible, pero quería mantener algunos elementos de la interfaz gráfica de usuario que interactúan todos juntos con la misma tabla de datos, para que el código sea más fácil de leer. Por lo tanto, sería bueno tener un mensaje con las dimensiones por adelantado. Chrismas llegará pronto, así que lo puse en mi lista de deseos.
Re: Determinar el tamaño de un cuadro de texto antes de dibujarlo.Sí, es posible,
pero quería mantener algunos elementos gui que interactúan todos juntos con la misma tabla de datos para facilitar la lectura del código.
Por lo tanto, sería bueno tener un mensaje con las dimensiones por adelantado.
Chrismas llegará pronto, así que lo puse en mi lista de deseos.
Re: Determinar el tamaño de un cuadro de texto antes de dibujarlo.¿Ha agotado los cuadros de visualización existentes que son específicamente responsables de la alineación y el diseño? Su comportamiento automático podría reducir o eliminar su necesidad de "rodar su propio rollo".
Re: Determinar el tamaño de un cuadro de texto antes de dibujarlo.¿Intentó 'ShowProperties ()' con el cuadro de texto para ver qué mensajes entiende? Supongo que el tamaño requerido depende del texto que quieras poner (y la fuente utilizada). El siguiente ejemplo muestra que JMP respetará cualquier ancho que haya establecido, pero se ve obligado a anular la altura cuando se dibuja el cuadro.
tb = TextBox();
tb << setWidth(20);
tb << setHeight(30);
Print(tb << getWidth, tb << getHeight, "\!n");
tb << setText("How now brown cow");
Print(tb << getWidth, tb << getHeight, "\!n");
NewWindow("Test", tb);
Print(tb << getWidth, tb << getHeight, "\!n");