El comando Get Size Display Box no funciona en mi For LoopTengo un bucle For que inspecciona cada cuadro de texto en un cuadro de lista V y se supone que devuelve el tamaño de cada uno. Por alguna razón no funcionará sin embargo:
Names Default to Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
win = New Window("Temp",
VLB = VListBox();
);
names = Column("Name") << Get Values;
//Write to window
For(j=1, j<=NItems(names), j++,
tb = TextBox(names[j]);
VLB << Append(tb);
text = VLB[j] << Get Text; //This works...
width = (VLB[j] << Get Size); //...but this just returns 0
Show(j, text, width);
);
//Nor does this work when I run with the script above, but does work if I run as a single line of code afterwards:
width = (VLB[1] << Get Size);
Show(width);Como indiqué, el comando "<< Obtener texto" funciona bien, pero no el comando "<< Obtener tamaño". Además, e incluso fuera del bucle For, el comando "<< Obtener tamaño" no funciona cuando ejecuto todo el script. Solo si lo ejecuto como una sola línea de código después de haber ejecutado el resto del script funcionará.
Debe tener algo que ver con agregar los cuadros de texto a VLB, pero no puedo entender qué es.
Re: Get Size Display Box El comando no funcionará en mi For LoopTomé un enfoque ligeramente diferente: creé una serie de cuadros de texto y los medí en un bucle separado.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
win = New Window( "Temp", VLB = V List Box() );
names = Column( "Name" ) << Get Values;
tb = {};
//Write to window
For( i = 1, i <= N Items( names ), i++,
tb[i] = Text Box( names[i] );
VLB << Append( tb[i] );
);
For( i = 1, i <= N Items( names ), i++,
text = tb[i] << Get Text;
width = tb[i] << Get Size;
Show( i, text, width );
);
Re: Get Size Display Box El comando no funcionará en mi For LoopGracias a todos. El comando Wait () sugerido por wjlevin era esencial. También obtener el ancho del LUB de una sola columna como lo sugiere gzmorgan0 fue más elegante que obtener el ancho de los cuadros de texto individuales. Sin embargo, encontré que la longitud mínima necesaria para el comando Esperar dependía de la longitud de mi lista de nombres (lista más larga = mayor tiempo de espera).
Gracias de nuevo.
Re: Get Size Display Box El comando no funcionará en mi For LoopDe forma predeterminada, un cuadro de texto no tiene un tamaño fijo, es decir, el tamaño fijo (0) está establecido. Por defecto es que el tamaño es flexible, la especificación es -1.
Si está buscando el tamaño máximo de la pantalla de nombre, es posible que desee convertir VLB en una sola columna LineUpBox (cambié el nombre a LUB), y al final del bucle obtener el ancho del contenedor.
Además, usar @wjlevin Sugerencia para esperar (0). Espero que esto ayude
Names Default to Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
win = New Window("Temp",
LUB = LineUpBox(ncol(1));
);
names = Column("Name") << Get Values;
//Write to window
For(j=1, j<=NItems(names), j++,
tb = TextBox(names[j]);
LUB << Append(tb);
);
For(j=1, j<=NItems(names), j++,
text = LUB[j] << Get Text; //This works...
width = LUB[j] << Get Width; //...but this just returns -1 meaning it is not fixed
Show(j, text, width);
);
wait(0);
MaxWidth = LUB << get width;
Show(MaxWidth);
Para mi tamaño de fuente MaxWidth = 66 píxeles.
Re: Get Size Display Box El comando no funcionará en mi For LoopSiempre que tengo una situación en la que funciona cuando lo ejecuto línea por línea desde la ventana del script y no funciona cuando ejecuto un bloque de script (especialmente dentro de algún tipo de bucle), creo que es necesario agregar Wait ( );
Y no tiene que ser una larga espera. Esto es lo que hice:
For(j=1, j<=NItems(names), j++,
tb = TextBox(names[j]);
VLB << Append(tb);
text = VLB[j] << Get Text; //This works...
wait(.01);
width = (VLB[j] << Get Size); //...but this just returns 0
Show(j, text, width);
);
Eso hizo el truco para mí.