2013-12-11 38 views
-1

我有一個框架被放置在窗體上。我希望在表單上放置這個框架的一些實例。第一次出現時,如何使TFrame的OnResize事件發生?

它有一個2列的drawgrid,在OnResize事件中,我使第二列延伸到可用空間的末尾。當框架Align被設置爲alTop時,手動調整窗體的大小時,這將起作用。但是,即使FrameResize被調用,表單第一次出現時也不起作用。 (儘管當我在其上放置一個斷點時它確實具有期望的效果)。

所以,我現在正在做的是從窗體OnShow處理程序調用FrameResize,但這很醜陋。無需窗體幫助,框架應該能夠正確顯示。

任何想法?我嘗試覆蓋SetParent,但沒有奏效。使用Xe2。

TIA 馬克

+1

它對我來說確實很好。我放置了一個Frame,其中align = alNone,另一個放置在我的表單上。該表單首先獲得一個「WM_SIZE」消息,該消息導致每個TFrame上的onResize事件。他們的'TDrawGrids'然後得到調整。一切安好。你可以發佈你的'onResize'事件處理程序代碼嗎? –

+1

我創建了一個空框架和一個空表單,並將該框架的一個實例添加到表單中。我爲調用「Beep」的框架實現了一個'OnResize'事件。當我運行該應用程序時,它會在啓動時發出蜂鳴聲。我認爲我們需要一個SSCCE。 –

+0

感謝你們的努力,並教我SSCCE的首字母縮略詞。它可能是一個特定於版本的錯誤?我正在使用XE2。既然我已經解決了這個問題,我需要去做其他的事情。 –

回答

1

我與諮詢解決它從彼得下面,德爾福B隊德爾福成員。

我覆蓋了框架的邊界。它甚至在組件變量被設置之前就被調用,所以它看起來像這樣

procedure TfaDupDisplay.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); // Had to use SetBounds because OnRezise was not working 
var grid: TDrawGrid; 
begin 
    inherited; 
    if pnlWebData = nil then 
    exit; 
    pnlWebData.Width := Width div 2; 
    for grid in TArray<TDrawGrid>.Create(grdData, grdDup) do 
    grid.ColWidths[1] := grid.Width - grdData.ColWidths[0]; 
end{ SetBounds};