2013-12-11 6 views
-1

폼에 프레임이 있습니다. 폼에이 프레임의 인스턴스를 여러 개 배치 할 것으로 예상됩니다.TFrame의 OnResize 이벤트가 처음 나타날 때 어떻게 만드나요?

2 열이있는 drawgrid가 있고 OnResize 이벤트에서 두 번째 열을 사용 가능한 공간의 끝까지 확장합니다. 이는 폼이 alTop으로 정렬 된 프레임을 사용하여 수동으로 크기가 조정될 때 작동합니다. 그러나 FrameResize가 호출 되더라도 폼이 처음 나타날 때 아무 효과가 없습니다. (비록 내가 그것에 브레이크 포인트를 두었을 때 원하는 효과를 가졌지 만).

그래서 지금 내가하고있는 일은 폼의 OnShow 핸들러에서 FrameResize를 호출하는 것입니다.하지만 이것은 추한 것입니다. 프레임은 양식의 도움없이 올바르게 형성 될 수 있어야합니다.

아이디어가 있으십니까? SetParent를 재정의하려고 시도했지만 작동하지 않았습니다. Xe2 사용.

TIA 마크

+1

그것은 나를 위해 완벽하게 작동합니다. align = alNone 인 프레임과 alRight를 가진 프레임을 폼에 배치했습니다. 폼은 먼저 각 TFrame에서'onResize' 이벤트를 발생시키는'WM_SIZE' 메시지를 얻습니다. 그러면 그들의 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};