這似乎是一個非常簡單的問題,但我無法使用滾動條來顯示滾動條,這讓我發瘋。爲什麼我的TScrollBox不顯示滾動條?
這是情況。我需要在表單的一部分中顯示可變數量的幀。正在顯示這些幀的區域可以通過TSplitter或調整窗體大小來調整大小。
我動態生成基於數據庫中的記錄的幀創建的形式時。這些框架是由一個FlowPanel負責框架放置的。 FlowPanel位於ScrollBox中。
由於FlowPanel,當用戶使用TSplitter或調整大小的形式中,該幀可以重新對準自己。如果任何框架重新定位在窗體視圖之外,我期望滾動框顯示滾動條,以便用戶可以向下滾動到那些不可訪問的框架。這不會發生。位於滾動框尺寸之外的流程面板區域中的這些框架不可訪問。
我已經建立了一些測試,在一個滾動框簡單的對象,以及滾動框正確地放置滾動條,如果任何包含的對象出現在滾動框的尺寸之外。
如果flowpanel對準clClient(在滾動框),或固定在滾動框,或沒有這些兩側沒關係。
我意識到我可以使用TPanel來替代面板的OnResize事件處理程序中的代碼執行框架的放置和重新定位,但這是FlowPanel的用途。
這是怎麼回事?我已經擺弄了許多不同的滾動框屬性,但仍然無法使其工作。有什麼問題,並有解決方案嗎?
好的。我選擇埃維的答案是正確的,但做這項工作的訣竅是在他的一個評論中,我對結果還沒有完全滿意。
這是瓢。我的ScrollBox和FlowPanel按照Ewe的建議進行了配置,但是由於該配置無法正常工作,因此需要使用其他一些設置。我很肯定這是由於表單用戶界面的複雜性,它在面板中有很多面板,很多分離器,而且表單本身是Patrol到PageControl的TabSheet中的(我將這個表格作爲一個表單測試,所以省略了這個事實獨自形式產生了相同的結果)。
什麼做了工作,儘管在一個笨重的時尚,是埃維的建議來切換FlowPanel的AutoWrap關機並重新開機。我下面的代碼添加到滾動框的onResize受到事件處理程序:
procedure TCurrentJobsForm.ScrollBox1Resize(Sender: TObject);
begin
Flowpanel1.Autowrap := False;
FlowPanel1.AutoWrap := True;
end;
調整時有一個明顯的閃爍,但我可以忍受的,因爲它產生預期的效果。用戶調整表單大小後,將始終使用這些維度重新創建,因此調整大小是用戶不常使用的操作。
TFlowPanel現在對齊了clTop,而VertScrollBar.Visible屬性設置爲True。那沒有做到。實際上,FlowPanel停止重新定位其中的控件,並且不出現水平或垂直滾動條。假設我一路搞亂了一些屬性,我刪除了流程面板和滾動框,並放置了新的實例。 ScrollBox與alClient對齊,AutoScroll設置爲True,VertScrollBar.Visible爲True。 FlowPanel Align設置爲alTop,AutoSize爲True。仍然沒有快樂。沒有滾動條出現,並且流程面板不流動。嗯。 – 2012-01-27 17:31:57
在這裏完美的作品。您應該知道AutoSize選項會阻礙流控面板在調整滾動條大小時對其控件重新排序(但與滾動條無關)。您可以在滾動框大小調整後將AutoWrap切換爲false並返回true。 – 2012-01-27 18:11:27
我相信你的答案是正確的,如果別人沒有拿出解決方案,我會在第二天接受它。我仍然有這個問題,但我的表單很複雜。它有8個面板,4個分離器,4個DBGrids,以及多達20個框架(在流程面板中)。 FlowPanel位於ScrollBox上,與另一個面板中的客戶端對齊。與ScrollBox相同的面板是另一個頂部對齊的面板。我簡單的測試工作,但這些測試都沒有重複這種特殊形式的複雜性。 – 2012-01-27 19:41:48