Der Befehl „Size Size Box anzeigen“ funktioniert in meiner For-Schleife nichtIch habe eine For-Schleife, die jedes Textfeld in einem V-Listenfeld überprüft und die Größe jedes Felds zurückgeben soll. Aus irgendeinem Grund wird es jedoch nicht funktionieren:
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);Wie bereits erwähnt, funktioniert der Befehl "<< Get Text" einwandfrei, nicht jedoch der Befehl "<< Get Size". Und auch außerhalb der For-Schleife funktioniert der Befehl "<< Get Size" nicht, wenn ich das gesamte Skript ausführte. Nur wenn ich ihn nach dem Rest des Skripts als einzelne Codezeile ausführte, funktioniert es.
Es muss etwas mit dem Anhängen der Textfelder an die VLB zu tun haben, aber ich kann nicht verstehen, was es ist.
Re: Get Size Display Box Der Befehl funktioniert nicht in meiner For-SchleifeIch bin etwas anders vorgegangen - ich habe eine Reihe von Textfeldern erstellt und diese in einer separaten Schleife gemessen.
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 Der Befehl funktioniert nicht in meiner For-SchleifeDanke euch allen. Der von wjlevin vorgeschlagene Wait () -Befehl war wesentlich. Auch die Breite der einspaltigen LUB, wie von gzmorgan0 vorgeschlagen, war eleganter als die Breite der einzelnen Textfelder. Ich fand jedoch, dass die für den Wait-Befehl erforderliche Mindestlänge von der Länge meiner Namensliste abhängt (längere Liste = längere Wartezeit).
Danke noch einmal.
Re: Get Size Display Box Der Befehl funktioniert nicht in meiner For-SchleifeStandardmäßig hat ein Textfeld keine feste Größe, dh feste Größe (0) ist festgelegt. Standardmäßig ist die Größe flexibel, die Angabe ist -1.
Wenn Sie nach der maximalen Größe der Namensanzeige suchen, möchten Sie möglicherweise VLB zu einer einspaltigen LineUpBox (ich habe den Namen in LUB geändert) machen und am Ende der Schleife die Breite des Containers abrufen.
Auch verwenden @wjlevin Vorschlag zum Warten (0). Hoffe das hilft
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);
Für meine Schriftgröße MaxWidth = 66 Pixel.
Re: Get Size Display Box Der Befehl funktioniert nicht in meiner For-SchleifeWann immer ich eine Situation habe, in der es funktioniert, wenn ich es zeilenweise aus dem Skriptfenster aus ausführe, und nicht funktioniert, wenn ich einen Skriptblock (vor allem innerhalb einer Art Schleife) ausführte, muss man Wait ( );
Und es muss nicht lange dauern. Folgendes habe ich getan:
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);
);
Das hat den Trick für mich gemacht.