如果我改变窗口内的显示框的大小,哪个属性会使窗口自动拉伸?我有带有多个显示框的 GUI,其中一些是用户可以调整大小的 Col 列表框。
当他们这样做时,窗口会产生滚动条。我不想要滚动条。我希望窗口能够自动调整大小以适合所有内容。就像任何平台一样(例如,按 X 调整 Y)。
我找不到可以完成这项工作的消息组合...有人可以给我指明正确的方向吗?
更新:
以下是一个例子。
如果你运行此脚本:
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
);
您将看到一个带有 Col 列表框的窗口。
如果您尝试调整此 Col 列表框的大小使其超出窗口范围,则窗口将会扩大。
但是,如果您尝试稍微改变窗口大小 - 它不会对 Col List Box 超出窗口大小的改变做出反应。它会产生滑块。
在我的插件中,由于某种原因,我的内容不能垂直放置在窗口中。
我能找到的唯一解决方法是更改窗口大小。但是现在我们更改了窗口大小 - 它不会对内容大小的变化做出反应。
这是错误吗?还是这是预期行为?有什么方法可以修复它吗?
自动化和脚本回复:如果我改变窗口内的显示框的大小,哪个属性会使窗口自动拉伸?很难说,因为我不确定您遇到了什么问题(添加滚动框其实不是问题,它们大多数时候都有存在的理由)。您确实有 << 设置拉伸(或 << 设置自动拉伸),在某些情况下可能会起作用,但这也取决于您如何构建 GUI。
我不太清楚您所说的“按 X 调整 Y 轴”平台(报告)自动调整大小以适应所有内容是什么意思,因为在我看来它并没有这样做。它确实会在必要时添加滚动框。它们存在的目的是,如果内容不适合窗口,则让用户仍然可以浏览内容并让他们知道某些内容未显示。如果您指的是启动器以及它们的 col 列表框调整大小如何调整窗口大小,那么这很可能与您构建 GUI 的方式有关,如果需要,它们还会添加滚动框。
回复:如果我改变窗口内的显示框的大小,哪个属性会使窗口自动拉伸?抱歉,我说得不是很清楚。我指的是 Fit Y by X 平台的启动窗口。启动平台,即您在其中按角色分配列的窗口。如果您调整任何 Col 列表框的大小 - 窗口将相应调整大小,而不会添加滚动条。
我的插件有一个非常相似的启动平台,当我调整 Col 列表框的大小时它会添加滚动条。
另外,请查看该问题的更新。我发布的脚本显示了类似的行为。
除此之外,我发现它与 Windows 上的任务栏自动隐藏有关:如果我将其打开,并且我的任务栏被隐藏,则我的加载项窗口会完美地打开,适合所有内容。但是,一旦我关闭自动隐藏功能 - 窗口会调整大小以隐藏内容的底部,并出现垂直滚动条。除此之外,加载项窗口的底部甚至不会触及任务栏。这肯定是一个错误。
回复:如果我改变窗口内的显示框的大小,哪个属性会使窗口自动拉伸?这是我的窗口底部,以此页面为背景。我已将任务栏自动隐藏功能打开。一切都如我所料。

一旦我进入 Windows 任务栏设置并关闭自动隐藏功能,我的窗口就会调整大小,从而出现垂直滚动条:

屏幕截图位置与像素相同。我唯一做的就是在 Windows 设置中取消选中“自动隐藏任务栏”。如果我重新选中它 - 它将恢复到第一个屏幕截图。并不是说窗口甚至没有触及任务栏。
因此,为了解决这个问题,我必须明确设置窗口大小。这会破坏更改 Col List Box 时的自动窗口拉伸,就像上面的脚本一样。
回复:如果我改变窗口内的显示框的大小,哪个属性会使窗口自动拉伸?这个脚本和我在第一条消息的更新中的小脚本有完全相同的问题。

当您运行它并尝试将 Col List Boxes 更改为超出窗口大小时 - 窗口会完美拉伸。但是,只要您尝试通过抓住屏幕截图上标有红色圆圈的点来更改窗口本身的大小,并将其移动甚至几个像素 - 窗口就会停止响应 Col List Boxes 大小的变化并停止拉伸,而是生成滚动条。
回复:如果我改变窗口内的显示框的大小,哪个属性会使窗口自动拉伸?由于您现在正在调整窗口大小而不是 col 列表框,因此请简化您的演示。
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)
)
)
)
)
)
);
现在开始弄清楚发生了什么,以及为什么在这里和那里设置拉伸不起作用,并且希望(很可能是偶然的,就像我一样)你会发现你必须记住设置最大尺寸(并且可能是最小尺寸)。
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)
也许这就是你要找的?设置拉伸与填充/窗口以及设置最大/最小尺寸的组合?
回复:如果我改变窗口内的显示框的大小,哪个属性会使窗口自动拉伸?嗯,在这个简单的情况下它似乎起了作用。
然而,我确实尝试过了,但它并没有在我所用的更复杂的 GUI 上工作。
无论如何,这似乎是一个解决方案,我会将其标记为解决方案,我只需要弄清楚如何将它应用到我的情况中。
回复:如果我改变窗口内的显示框的大小,哪个属性会使窗口自动拉伸?如果您认为无需先解决多个较小的问题就可以解决大问题,那么您可以跳过简单的情况,大多数情况下,与解决一些有助于您理解问题的小问题/简单问题相比,这是不可能的,或者会花费不必要的时间。
拉伸的工作原理在很大程度上取决于您构建 GUI 的结构。再次举一个简单的例子,尽管我不确定您认为它们有多大价值:
当使用 Lineup 框并仅将拉伸设置为其中一个时,两个 col 列表框将同时缩放:
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)
使用 V 列表框 + H 列表框时不会发生同样的事情
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)
如果你修改了父显示框(本例中为面板框)使其不拉伸,则子元素也不会拉伸
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)