2013-11-03 121 views
2

我想重置TControlBar內的一組工具欄位置。用戶可以拖動工具欄並將其解除。我試圖創建重置按鈕,將重新排列工具欄是一種預設時尚。以編程方式設置停靠的工具欄的位置

我很難讓工具欄按照我想要的順序重置。根據我的代碼執行之前的排列方式,我的ManualDock調用的結果似乎有所不同。

我有4個工具欄,我想排列成兩行是這樣的:

 
[Toolbar1][Toolbar2] 
[Toolbar3][Toolbar4] 

我曾嘗試下面的代碼的變種沒有成功:

// I found some references to different docking issues when controls were visible 
// Hide everything first and then show them in the order I want them added. 
Toolbar1.Visible := false; 
Toolbar2.Visible := false; 
Toolbar3.Visible := false; 
Toolbar4.Visible := false; 

ToolBar1.Visible := true; 
ToolBar1.ManualDock(DockSite); 
ToolBar1.Left := 0; 

Toolbar2.Visible := true; 
Toolbar2.ManualDock(DockSite, Toolbar1, alRight); 

Toolbar3.Visible := true; 
Toolbar3.ManualDock(DockSite, Toolbar1, alBottom); 
Toolbar3.Left := 0; 

Toolbar4.Visible := true; 
Toolbar4.ManualDock(DockSite, Toolbar3, alRight); 

在屏幕上的結果是根據不同在我的代碼執行之前工具欄開始的位置。

我嘗試了好幾種不同的方法 - 設置工具欄頂部和手動對接通話後離開 - alLeft /是alTop代替上述選項 - 使用無作爲ManualDock調用中的第二PARM,一切都設置爲是alTop

我試着用2個工具欄強制它們出現在同一行(並排)或兩行。再次,我的結果是不同的,這取決於我的代碼執行之前工具欄的起始位置。

回答

3

隱藏,停靠,設置位置和顯示應導致預期結果。

begin 
    ToolBar1.Visible := false; 
    ToolBar2.Visible := false; 
    ToolBar3.Visible := false; 
    ToolBar4.Visible := false; 
    ToolBar1.ManualDock(ControlBar1); 
    ToolBar2.ManualDock(ControlBar1); 
    ToolBar3.ManualDock(ControlBar1); 
    ToolBar4.ManualDock(ControlBar1); 

    ToolBar1.Left := 0; 
    ToolBar1.Top := 0; 
    ToolBar2.Left := ToolBar1.Width; 
    ToolBar2.Top := 0; 
    ToolBar3.Left := 0; 
    ToolBar3.Top := MAX(ToolBar1.Height, ToolBar2.Height); 
    ToolBar4.Left := ToolBar3.Width; 
    ToolBar4.Top := ToolBar3.Top; 

    ToolBar1.Visible := true; 
    ToolBar2.Visible := true; 
    ToolBar3.Visible := true; 
    ToolBar4.Visible := true; 
end; 
+0

這是爲我做的。在這個和我的代碼之間嘗試不同的選項,在更改左邊和頂部位置之前,關鍵似乎是在* all *工具欄上調用ManualDock。 –

相關問題