2015-04-01 18 views
4

時TPanel不AUTOSIZE我有內的另一個面板:含有TPanel

enter image description here

內板對準alTop

enter image description here

和外板是設置爲AutoSize=true

enter image description here

和所有尺寸。如果我改變了在設計時的內板的高度,外板自動調整大小來適應它:

enter image description here

現在運行時

現在我需要change the height of the inner panel at runtime

procedure TForm2.Button1Click(Sender: TObject); 
begin 
    pnlInner.Height := pnlInner.Height + 50; 
    lblPointer.Top := pnlOuter.Top + pnlInner.Height; 
end; 

除了當我改變內部面板的高度在運行時間,所述自動調整大小面板自動調整大小

enter image description here

當然這個工作在Delphi 5,圖7和probably XE2 - XE5

什麼是修復?

的解決辦法是,當然,繞過對齊/自動調整,並在各種onResize受到事件所做的一切。但這顯然不是RAD。我確定這是VCL中的一個小錯誤。而且由於我們已經有大約二十個我們已經修補的XE6 VCL bug,所以最好修復它,以免別人考慮它。

獎金看點

我愛行:

和,你可以請附上樣的項目?

這幾乎就好像沒有人打擾,甚至試圖重現它。

+1

快速修復是升級到XE7 :-)。無法複製XE7 Upd 1中的問題。 – 2015-04-01 16:13:56

+1

不確定爲什麼有人決定對此進行降級。 – 2015-04-01 16:31:04

+1

@LURD我們已經爲XE6分了幾千美元,而且由於缺陷,我們還沒有設法發貨。想象一下,如果伊恩現在回來了,並說我們必須爲XE7分出幾千個; [這仍然沒有解決從2005年的錯誤!](http://stackoverflow.com/questions/25449362/xe6-tlistview-column-widths-become-zero-if-you-read-column-width)我真的Embarcadero將爲現有產品發佈修補程序。 – 2015-04-01 16:54:07

回答

5

的問題是TWinControl.AlignControls迴歸:

procedure TWinControl.AlignControls(AControl: TControl; var Rect: TRect); 
begin 
    //...snip 

    // Apply any constraints 
    if Showing and ((sfWidth in FScalingFlags) or (sfHeight in FScalingFlags)) then 
     DoAdjustSize; 

    //...snip 
end; 

這裏的錯誤是,它不會叫DoAdjustSize除非任何sfWidthsfHeight縮放標誌都存在。

修復的方法是不要試圖智勝自己,DoAdjustSize不管:

procedure TWinControl.AlignControls(AControl: TControl; var Rect: TRect); 
begin 
    //...snip 

    // Apply any constraints 
    //QC125995: Don't look to scaling flags to decide if we should adjust size 
    if Showing {and ((sfWidth in FScalingFlags) or (sfHeight in FScalingFlags))} then 
     DoAdjustSize; 

    //...snip 
end; 

用此修復程序中,我們一半是解決the similar issue except with a TOleControl (e.g. TWebBrowser) rather than a TPanel

注意:任何代碼發佈到公共領域。無需歸屬。

4

這是報道Embarcaderos質量中心:

  • QC125995:迴歸在XE6 UPDATE1] TPanel。自動調整大小不工作
  • QC129330:AutoSize屬性並不總是適用

我可以XE6重現此,但與XE7。

相關問題