La commande Obtenir la taille de la boîte d'affichage ne fonctionnera pas dans ma boucle ForJ'ai une boucle For qui inspecte chaque zone de texte dans une zone de liste V et est supposée renvoyer la taille de chaque. Pour une raison quelconque, cela ne fonctionnera pas si:
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);Comme je l'ai indiqué, la commande "<< Obtenir le texte" fonctionne bien, mais pas la commande "<< Obtenir la taille". De plus, et même en dehors de la boucle For, la commande "<< Obtenir la taille" ne fonctionne pas lorsque j'exécute le script complet. Cela ne fonctionnera que si je l'exécute comme une seule ligne de code après avoir exécuté le reste du script.
Cela doit avoir quelque chose à voir avec l'ajout des zones de texte à VLB, mais je ne comprends pas ce que c'est.
Re: La commande Afficher la taille de la boîte ne fonctionnera pas dans ma boucle ForJ'ai adopté une approche légèrement différente: j'ai créé un tableau de zones de texte et les ai mesurées dans une boucle séparée.
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: La commande Afficher la taille de la boîte ne fonctionnera pas dans ma boucle ForMerci a tous. La commande Wait () suggérée par wjlevin était essentielle. Obtenir la largeur de la colonne à une colonne, comme suggéré par gzmorgan0, était plus élégant que la largeur de zones de texte individuelles. Bien que, j’ai trouvé que la longueur minimale requise pour la commande Wait dépendait de la longueur de ma liste de noms (liste plus longue = temps d’attente plus long).
Merci encore.
Re: La commande Afficher la taille de la boîte ne fonctionnera pas dans ma boucle ForPar défaut, une zone de texte n'a pas de taille fixe, c'est-à-dire que Taille fixe (0) est définie. Par défaut, la taille est flexible, la spécification est -1.
Si vous recherchez la taille maximale de l'affichage du nom, vous voudrez peut-être faire de VLB une seule colonne LineUpBox (j'ai changé le nom en LUB) et obtenir à la fin de la boucle la largeur du conteneur.
Utiliser aussi @wjlevin suggestion d'attendre (0). J'espère que cela t'aides
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);
Pour ma taille de police MaxWidth = 66 pixels.
Re: La commande Afficher la taille de la boîte ne fonctionnera pas dans ma boucle ForChaque fois que j'ai une situation où cela fonctionne lorsque je l'exécute ligne par ligne à partir de la fenêtre de script et ne fonctionne pas lorsque j'exécute un bloc de script (en particulier dans une sorte de boucle), je suppose qu'il est nécessaire d'ajouter Wait )
Et il ne faut pas attendre longtemps. Voici ce que j'ai fait:
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);
);
Cela a fait le tour pour moi.