2017-05-05 73 views
0

我做了一個Delphi應用程序與德爾福,但我有一個奇怪的行爲。這是情況。德爾福克隆佈局

enter image description here

我有一個TLayout(稱爲InputLayout),它包含了GridPanelLayout。我必須複製InputLayout這裏面格但我得到這樣的結果:

enter image description here

結果當然是我在左邊的一個。你可以看到,這是而不是我在找什麼,因爲我想有一個上面的網格的確切副本。最後的結果必須是兩個GridPanelLayout,其中第二個放置在第一個之下。這是代碼:

procedure TForm1.Button3Click(Sender: TObject); 
var c: TGridPanelLayout; 
begin 

try 

    c := TGridPanelLayout(InputLayout.Children[0].Clone(InputLayout)); 
    c.Align := TAlignLayout.Top; 
    InputLayout.AddObject(c); 

except 

    // ... 

end; 

end; 

什麼是錯?請注意,InputLayout是包含GridPanelLayout的佈局,並且該組件是唯一的,所以我可以安全地使用0索引進行訪問。

+0

設計時間'GridPanelLayout'似乎沒有對齊到頂部。目前還不清楚'GridPanelLayout'有多少列和行。當我嘗試你的問題時(有3列,1行和第一個'GridPanelLayout'對齊頂部),如果我最小化和恢復表單,我會得到一些消失的繪製文物。試試發生了什麼,並添加到您的問題。 –

+0

@TomBrunberg是的,它與頂部對齊(設計時佈局中的一個)。我是否也必須將克隆的那個放到TAlignLayout.Top中?我正在使用該代碼,但即使我調整了不起作用的頁面。這可能是一個錯誤? –

+0

我想我已經找到了解決方案,但它適用於TGridLayout。出於某些原因,GridPanelLayout不能很好地工作,而且我的行爲與@TomBrunberg相同。 –

回答

1

我認爲你不能使用TGridPanelLayout,因爲看起來該組件有問題。我正在使用德爾福東京啓動,我已經找到了解決您的問題。

  1. 刪除一個VertScrollBox(或TLayout或HorzScrollBox)
  2. 將一個TGridLayout中的VertScrollBox
  3. 之外添加的網格佈局,你需要的東西,例如一個TEditTLabel
  4. 設置TGridLayout.Visible := false;因爲你使用這個作爲「模板」。我將製作一份副本,並將克隆添加到InputLayout中。

A TGridLayout適用於Windows,但我想它也適用於Android和iOS(我無法用啓動器測試它)。事件處理程序添加到這樣一個按鈕:

//Button1 onclick 
for i := 1 to max do 
    begin 
    c := (GridLayout1.Clone(Owner) as TGridLayout); 
    (c as TGridLayout).Visible := True; 
    (c as TGridLayout).Parent := InputLayout; 
    InputLayout.AddObject(c); 
    end; 

這裏有一個名爲max一個整型變量,當然這表示你要多少個孩子裏面InputLayout創建。如果你必須製作一個副本,這並不是真的需要,但是我正在給你這個循環,以防萬一你改變了主意。這裏有結果:

enter image description here

這裏你可以看到3個TEdit組成部分,但你有一個TLabel,一個TEditTButton。該怎麼辦?只需將TGridLayout可見性恢復爲True,添加任何你想要的(在這種情況下是一個標籤,一個編輯和一個按鈕),並將屬性重新設置爲false。

+0

我已經理解了,我想要使用另一個組件來做類似的事情。是的,循環是無用的,因爲我沒有在操作中要求它,但無論如何都是好的解決方案。我希望他們能解決這個錯誤... –