Il comando Get Size Display Box non funzionerà nel mio ciclo ForHo un ciclo For che ispeziona ogni casella di testo in una casella di elenco V e si suppone che restituisca la dimensione di ciascuno. Per qualche motivo non funzionerà però:
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);Come ho indicato, il comando "<< Ottieni testo" funziona bene, ma non il comando "<< Ottieni dimensioni". Inoltre, anche al di fuori del ciclo For, il comando "<< Get Size" non funziona quando eseguo l'intero script. Solo se lo eseguo come una singola riga di codice dopo aver eseguito il resto dello script funzionerà.
Deve avere qualcosa a che fare con l'accodamento delle caselle di testo a VLB, ma non riesco a capire di cosa si tratta.
Ri: Ottieni comando Visualizza dimensioni casella non funzionerà nel mio ciclo ForHo adottato un approccio leggermente diverso: ho creato una serie di caselle di testo e le ho misurate in un ciclo separato.
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 );
);
Ri: Ottieni comando Visualizza dimensioni casella non funzionerà nel mio ciclo ForRingrazia tutti. Il comando Wait () suggerito da wjlevin era essenziale. Anche ottenere la larghezza del LUB a colonna singola come suggerito da gzmorgan0 era più elegante che ottenere le larghezze delle singole caselle di testo. Sebbene, ho trovato la lunghezza minima necessaria per il comando Wait dipendeva dalla lunghezza della mia lista nomi (elenco più lungo = tempo di attesa più lungo).
Grazie ancora.
Ri: Ottieni comando Visualizza dimensioni casella non funzionerà nel mio ciclo ForDi default una casella di testo non ha dimensioni fisse, cioè è impostata la dimensione fissa (0). Di default la dimensione è flessibile, la specifica è -1.
Se stai cercando la dimensione massima della visualizzazione del nome, potresti voler rendere VLB una LineUpBox a colonna singola (ho cambiato il nome in LUB) e alla fine del loop ottenere la larghezza del contenitore.
Inoltre, usa @wjlevin suggerimento di aspettare (0). Spero che questo ti aiuti
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);
Per la dimensione del mio carattere MaxWidth = 66 pixel.
Ri: Ottieni comando Visualizza dimensioni casella non funzionerà nel mio ciclo ForOgni volta che ho una situazione in cui funziona quando lo eseguo line-by-line dalla finestra di script e non funziona quando eseguo un blocco di script (in particolare all'interno di un qualche tipo di ciclo) immagino che sia necessario aggiungere Wait ( );
E non deve essere una lunga attesa. Ecco cosa ho fatto:
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);
);
Questo ha fatto il trucco per me.