如果我改變視窗內的顯示框的大小,哪個屬性會使視窗自動拉伸?我有一個帶有多個顯示框的 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 上的工作列自動隱藏有關:如果我將其打開,並且我的工作列被隱藏,則我的加載項視窗將完美地打開以容納所有內容。但是,一旦我關閉自動隱藏功能,視窗就會調整大小以隱藏內容的底部,並出現垂直捲軸。最重要的是,AddIn 視窗的底部甚至沒有觸及工作列。這絕對是個 bug。
回覆:如果我改變視窗內的顯示框的大小,哪個屬性會使視窗自動拉伸?這是我的視窗的底部,以此頁面作為背景。我已打開工作列自動隱藏。一切都如我所期望的。

一旦我進入 Windows 工作列設定並關閉自動隱藏功能,我的視窗就會調整大小,從而出現垂直捲軸:

截圖位置與像素相同。我唯一做的事情就是取消選取 Windows 設定中的「自動隱藏工作列」。如果我再次檢查它 - 它將恢復到第一個螢幕截圖。並不是說視窗甚至沒有觸及工作列。
因此,為了解決這個問題,我必須明確設定視窗大小。就像上面的腳本一樣,這會在更改 Col 列錶框時破壞自動視窗拉伸。
回覆:如果我改變視窗內的顯示框的大小,哪個屬性會使視窗自動拉伸?這個腳本和我在第一則訊息的更新中的小腳本有完全相同的問題。

當您運行它並嘗試將 Col 列錶框更改為超出視窗大小時 - 視窗會完美拉伸。但是,只要您嘗試透過抓住螢幕截圖上標有紅色圓圈的點的角落來更改視窗本身的大小,並將其移動甚至幾個像素 - 視窗就會停止響應 Col 列錶框大小的變化並停止拉伸,改為製作滾動條。
回覆:如果我改變視窗內的顯示框的大小,哪個屬性會使視窗自動拉伸?由於您現在正在調整視窗大小而不是 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)