如何使 TFrame 的 OnResize 事件在首次出现时发生?



我有一个框架正在表单上放置。我希望在表单上放置该框架的多个实例。

它有一个包含2列的绘图网格,在OnResize事件中,我将第二列延伸到可用空间的末尾。当框架"对齐"设置为alTop时手动调整窗体大小时,这种方法有效。但是,当窗体首次出现时,即使调用了FrameResize,也没有任何效果。(尽管当我在上面加上一个断点时,它确实达到了预期的效果)。

所以,我现在正在做的是从窗体OnShow处理程序调用FrameResize,但这很难看。框架应该能够在没有表单帮助的情况下正确成形。

有什么想法吗?我确实尝试过覆盖SetParent,但没有成功。使用Xe2。

TIA标记

我在Delphi B团队Delphi成员Peter Below的建议下解决了这个问题。

我超过了帧的设定界限。它甚至在组件变量设置之前就被调用了,所以看起来像这个

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};

最新更新