Welche Eigenschaft würde dazu führen, dass sich das Fenster automatisch dehnt, wenn ich die Größe der Anzeigefelder im Fenster ändere?Ich habe eine GUI mit mehreren Anzeigefeldern, einige davon sind Spaltenlistenfelder, deren Größe der Benutzer ändern kann.
Wenn sie das tun, würde das Fenster Bildlaufleisten anzeigen. Ich möchte keine Bildlaufleisten. Ich möchte, dass die Größe des Fensters automatisch angepasst wird, damit alles hineinpasst. So wie es jede Plattform tut (zum Beispiel „Y an X anpassen“).
Ich kann keine Nachrichtenkombination finden, mit der das funktionieren würde ... Kann mir jemand den richtigen Weg weisen?
Aktualisieren:
Hier ist eine Illustration.
Wenn Sie dieses Skript ausführen:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
bb = Border Box( Left( 10 ), Right( 10 ), Top( 5 ), Bottom( 10 ), Sides( 15 ),
clb = Col List Box( all, width( 250 ), maxSelected( 1 ) ),
);
nw = New Window( "Col List Box Example",
bb
);
Sie erhalten ein Fenster mit einer Spaltenliste.
Wenn Sie versuchen, die Größe dieses Spaltenlistenfelds über das Fenster hinaus zu ändern, wird das Fenster erweitert.
Wenn Sie jedoch versuchen, die Fenstergröße auch nur ein kleines bisschen zu ändern, reagiert es nicht auf die Größenänderung des Col List Box über die Fenstergröße hinaus. Es werden Schieberegler angezeigt.
In meinem Add-In passt mein Inhalt aus irgendeinem Grund nicht vertikal in das Fenster.
Die einzige Lösung, die ich finden konnte, war, die Größe des Fensters zu ändern. Aber jetzt, wo wir die Größe des Fensters geändert haben, reagiert es nicht mehr auf Änderungen der Größe des Inhalts.
Ist das ein Fehler? Oder ist das erwartetes Verhalten? Gibt es eine Möglichkeit, das zu beheben?
Automatisierung und SkriptingBetreff: Welche Eigenschaft bewirkt, dass sich das Fenster automatisch dehnt, wenn ich die Größe der Anzeigefelder im Fenster ändere?Sehr schwer zu sagen, da ich nicht sicher bin, welche Probleme Sie haben (das Hinzufügen von Bildlauffeldern ist kein wirkliches Problem, sie haben meistens einen Grund, warum sie da sind). Sie haben << Set Stretch (oder << Set Auto Stretching), was in einigen Fällen funktionieren könnte, aber es hängt auch davon ab, wie Sie Ihre GUI aufgebaut haben.
Ich bin mir nicht ganz sicher, was Sie mit „Fit Y by X-Plattform (Bericht)“ meinen, das automatisch die Größe anpasst, damit alles hineinpasst, da es das meiner Meinung nach nicht tut. Es fügt bei Bedarf Scroll-Boxen hinzu. Sie sind aus einem bestimmten Grund da: Wenn der Inhalt nicht in das Fenster passt, können Benutzer den Inhalt trotzdem durchsuchen UND wissen, dass etwas nicht angezeigt wird. Und wenn Sie Starter meinen und wie deren Größenanpassung der Spaltenlistenfelder das Fenster skaliert, hängt das höchstwahrscheinlich damit zusammen, wie Sie die GUI aufgebaut haben, und sie werden bei Bedarf auch Scroll-Boxen hinzufügen.
Betreff: Welche Eigenschaft bewirkt, dass sich das Fenster automatisch dehnt, wenn ich die Größe der Anzeigefelder im Fenster ändere?Entschuldigen Sie, dass ich mich nicht ganz klar ausgedrückt habe. Ich bezog mich auf das Startfenster der Fit Y by X-Plattform. Starten Sie die Plattform, das Fenster, in dem Sie Spalten in Rollen zuweisen. Wenn Sie die Größe eines der Spaltenlistenfelder ändern, wird die Fenstergröße entsprechend angepasst, ohne dass Bildlaufleisten hinzugefügt werden.
Mein Add-In verfügt über eine sehr ähnliche Startplattform, die Bildlaufleisten hinzufügt, wenn ich die Größe von Spaltenlistenfeldern ändere.
Bitte sehen Sie sich auch ein Update zur Frage an. Das von mir gepostete Skript zeigt ein ähnliches Verhalten.
Darüber hinaus habe ich herausgefunden, dass es etwas mit der automatischen Ausblendung der Taskleiste unter Windows zu tun hat: Wenn ich sie einschalte und meine Taskleiste ausgeblendet ist, öffnet sich mein Add-In-Fenster und passt den gesamten Inhalt perfekt an. Aber sobald ich die automatische Ausblendung ausschalte, wird die Fenstergröße so angepasst, dass der untere Teil des Inhalts ausgeblendet wird und eine vertikale Bildlaufleiste angezeigt wird. Darüber hinaus berührt der untere Teil des Add-In-Fensters nicht einmal die Taskleiste. Dies ist definitiv ein Fehler.
Betreff: Welche Eigenschaft bewirkt, dass sich das Fenster automatisch dehnt, wenn ich die Größe der Anzeigefelder im Fenster ändere?Hier ist der untere Teil meines Fensters mit dieser Seite als Hintergrund. Ich habe die automatische Ausblendung der Taskleiste aktiviert. Alles ist wie erwartet.

Sobald ich zu den Windows-Taskleisteneinstellungen gehe und die automatische Ausblendung DEAKTIVIERE, wird die Größe meines Fensters so geändert, dass eine vertikale Bildlaufleiste angezeigt wird:

Die Positionen der Screenshots sind identisch mit den Pixeln. Das Einzige, was ich zwischendurch gemacht habe, war, die Option „Taskleiste automatisch ausblenden“ in den Windows-Einstellungen zu deaktivieren. Wenn ich sie wieder aktiviere, wird sie auf den ersten Screenshot zurückgesetzt. Nicht, dass das Fenster die Taskleiste nicht einmal berührt.
Um dieses Problem zu lösen, musste ich die Fenstergröße explizit festlegen. Und dies führte dazu, dass die automatische Fensterstreckung beim Ändern der Col List Box wie im obigen Skript nicht mehr funktionierte.
Betreff: Welche Eigenschaft bewirkt, dass sich das Fenster automatisch dehnt, wenn ich die Größe der Anzeigefelder im Fenster ändere?Dieses Skript hat genau das gleiche Problem wie mein kleines Skript beim Update der ersten Nachricht.

Wenn Sie es einfach ausführen und versuchen, die Spaltenlistenfelder über die Fenstergröße hinaus zu ändern, wird das Fenster perfekt gestreckt. Sobald Sie jedoch versuchen, die Größe des Fensters selbst zu ändern, indem Sie die Ecke mit den Punkten, die im Screenshot mit einem roten Kreis markiert sind, greifen und sie auch nur um ein paar Pixel verschieben, reagiert das Fenster nicht mehr auf Größenänderungen der Spaltenlistenfelder und wird nicht mehr gestreckt, sondern es werden stattdessen Bildlaufleisten erstellt.
Betreff: Welche Eigenschaft bewirkt, dass sich das Fenster automatisch dehnt, wenn ich die Größe der Anzeigefelder im Fenster ändere?Vereinfachen Sie Ihre Demo, da Sie jetzt die Größe des Fensters und nicht des Spaltenlistenfelds ändern.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
vlb = V List Box(
tb = Text Box("Text"),
hlb1 = H List Box(
pb = Panel Box("Cast LUB",
lub = Lineup Box(N Col(2),
Button Box("Responses"),
clb = Col List Box(dt
, << Set N Lines(2)
)
)
)
)
)
);
Beginnen Sie nun damit, herauszufinden, was los ist und warum das Einstellen einer Streckung hier und da nicht funktioniert. Hoffentlich stoßen Sie dabei (wahrscheinlich aus Versehen, so wie bei mir) darauf, dass Sie daran denken müssen, die maximale (und möglicherweise minimale) Größe einzustellen.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
vlb = V List Box(
tb = Text Box("Text"),
hlb1 = H List Box(
pb = Panel Box("Cast LUB",
lub = Lineup Box(N Col(2),
Button Box("Responses"),
clb = Col List Box(dt
, << Set N Lines(2)
)
)
)
)
)
);
show(clb << Get Stretch, clb << Get Min Size, clb << Get Max Size);
clb << Set Stretch("Window", "Neutral");
clb << Set Max Size(10000, 100)
Vielleicht ist es das, wonach Sie suchen? Eine Kombination aus „Streckung festlegen mit Füllung/Fenster“ und „Max./Min.-Größe festlegen“?
Betreff: Welche Eigenschaft bewirkt, dass sich das Fenster automatisch dehnt, wenn ich die Größe der Anzeigefelder im Fenster ändere?Nun, in diesem einfachen Fall scheint es zu funktionieren.
Ich habe jedoch genau das versucht und es hat in meiner viel komplexeren GUI nicht funktioniert.
Auf jeden Fall scheint dies die Lösung zu sein, und ich werde es als solche kennzeichnen. Ich muss nur noch herausfinden, wie ich es auf meinen Fall anwenden kann.
Betreff: Welche Eigenschaft bewirkt, dass sich das Fenster automatisch dehnt, wenn ich die Größe der Anzeigefelder im Fenster ändere?Sie können den einfachen Fall überspringen, wenn Sie meinen, Sie könnten ein großes Problem lösen, ohne zuerst mehrere kleinere Probleme zu lösen. Meistens ist dies jedoch unmöglich oder wird im Vergleich zur Lösung einiger kleiner/einfacher Probleme, die Ihnen beim Verständnis des Problems helfen, unnötig viel Zeit in Anspruch nehmen.
Wie das Stretching funktioniert, hängt stark von der Struktur ab, mit der Sie Ihre GUI erstellt haben. Auch hier ein einfaches Beispiel, obwohl ich nicht sicher bin, welchen Wert sie Ihrer Meinung nach haben:
Beide Spaltenlistenfelder werden gleichzeitig skaliert, wenn Sie das Aufstellungsfeld verwenden und die Streckung nur für eines davon festlegen:
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
vlb = V List Box(
tb = Text Box("Text"),
hlb1 = H List Box(
pb = Panel Box("Cast LUB",
lub = Lineup Box(N Col(2),
Button Box("Responses"),
clb = Col List Box(dt,
, << Set N Lines(2)
),
Button Box("Responses"),
Col List Box(dt,
, << Set N Lines(2)
)
)
)
)
)
);
clb << Set Stretch("Window", "Neutral");
clb << Set Max Size(10000, 100)
Dasselbe passiert nicht, wenn Sie V List Box + H List Box verwenden.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
vlb = V List Box(
tb = Text Box("Text"),
hlb1 = H List Box(
pb = Panel Box("Cast LUB",
V List Box(
H List Box(
Button Box("Responses"),
clb = Col List Box(dt,
, << Set N Lines(2)
)
),
H List Box(
Button Box("Responses"),
Col List Box(dt,
, << Set N Lines(2)
)
)
)
)
)
)
);
clb << Set Stretch("Window", "Neutral");
clb << Set Max Size(10000, 100)
Wenn Sie das übergeordnete Anzeigefeld (Panelfeld in diesem Beispiel) so geändert haben, dass es nicht gestreckt wird, werden die untergeordneten Elemente ebenfalls nicht gestreckt
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
vlb = V List Box(
tb = Text Box("Text"),
hlb1 = H List Box(
pb = Panel Box("Cast LUB",
lub = Lineup Box(N Col(2),
Button Box("Responses"),
clb = Col List Box(dt,
, << Set N Lines(2)
),
Button Box("Responses"),
Col List Box(dt,
, << Set N Lines(2)
)
)
)
)
)
);
pb << Set Max Size(100, 10);
pb << Set Stretch("Off", "Off");
clb << Set Stretch("Window", "Neutral");
clb << Set Max Size(10000, 100)