2012-09-27 22 views
1

我有一個delphi應用程序,使用PageControlTabSheets的數量。我還在運行時創建新的TabSheets,並使用預定義幀的實例填充它們。除了不以TabSheet爲中心的整容問題外,這些框架可以很好地工作。我試圖使用Frame.Align := alClient,但那並沒有。相關代碼如下:在TTabSheet中居中一個Tframe;

CreateNewPage(3); 
NewLimitedChoiceFrame := TLimitedChoiceFrame.Create(NewInputPage); 
NewLimitedChoiceFrame.Parent := NewInputPage; 

CreateNewPage創建TabSheet的新實例,使PageControl它的主人和家長。結果被分配給全局變量NewInputPage

+1

不要忘記接受答案;-)這個評論會在幾分鐘內摧毀自己,請不要回應它。謝謝! – TLama

回答

3

要居中其父控制做到這一點:

procedure CentreControl(Control: TControl); 
begin 
    Control.Left := (Control.Parent.ClientWidth-Control.Width) div 2; 
    Control.Top := (Control.Parent.ClientHeight-Control.Height) div 2; 
end; 

調用此函數,將幀。顯然你需要等到你分配父母之後才這樣做。

如果可以在運行時重新調整頁面控件的大小,請從標籤頁的OnResize事件中添加對此函數的調用。或者,如NGLN points out只需將控件的Anchors設置爲[],並且VCL框架將在其父級調整大小時關注控件的居中。

+1

+1爲了在頁面控件在運行時調整大小時保持控件居中,那麼'Control.Anchors = []'也可以。 – NGLN

+0

@NGLN我不這麼認爲。爲了保持居中,Left和Top需要更新每個調整大小。 –

+3

@DavidHeffernan,NGLN是正確的(檢查XE2)。如果「對齊」設置爲alNone並且沒有設置錨點,則該控件位於其父控件中間。您可以檢查TWinControl.ArrangeControl中的代碼。 –