2012-01-04 2 views
0

여러 폼의 델파이 애플리케이션이 있습니다. 처음에는 각 새롭게 열린 폼이 프레임이었고이 폼의 "부모"(양식을 여는 중 호출 된 곳)가 자식이 크기가 조정되고 재배치 된 상태로 표시되어 숨겨져있는 설치를 시도했습니다. 하나의 창을 가지고, 아이가 닫히면 부모는 재배치되어 다시 보입니다. 모든 양식에는 Windows 제목 블록에 대한 bsSingle 테두리 스타일이 있습니다. 이 접근법은 위치를 잘 잡았지만 부모 폼이 닫히고 아이가 열린 상태에서 눈에 띄는 깜박임이 있습니다. 폼이 열리지 않는 작은 시간대가 있기 때문에 시작 막대의 아이콘/트레이가 이동합니다 주변과 그 자체가 보이지 않게 보이게됩니다.Delphi - 하위 폼에는 부모 프레임이 있습니다.

누구든지이 문제를 해결하기위한 조언이 있습니까? 아마도 응용 프로그램 내에서 테두리가있는 양식이 하나만 있고이 테두리 안에 새로운 양식이 열리면 더 잘 작동 할 것입니다. 그러나 정확히 어떻게해야할지 확신 할 수 없습니다.

도움을 주시면 감사하겠습니다.

+2

여러 어린이가있는 한 개의 양식이 있어야하는 것처럼 들리지만 한 번에 하나씩 보여줍니다. –

+0

양식을 양육/도킹하지 않은 경우 깜박임이 발생하지 않을 것이라고 확신하십니까? 즉, 플리커가 도킹 또는 서식 호스팅으로 인해 명확하게 발생합니까? 이러한 동일한 형태는 자유롭게 떠 다니는 것처럼 보이면 깜박 거림이 없습니까? 두 가지 방법을 모두 테스트 했습니까? –

+0

미안 해요. 내가 어떻게 말했는지 불분명합니다. 양식에 부모 역할이 없거나 구체적으로 도킹되어 있지 않지만, 언제 어떤 형태가 "부모"또는 활성 상태인지 추적하고 새로운 "자식"이 열리면 위치를 얻습니다 현재 부모로부터의 크기는 새 폼이 표시 될 때 숨겨집니다. 그래서 모든 형태는 순간적으로 자유롭게 움직일 수 있습니다. – jmc

답변

1

하나의 양식을 다른 양식의 어린이로 사용하기 쉽습니다. 포함하고 다른 형태를 생성하는 새로운 양식을 만듭니다 :

procedure TMainForm.FormCreate(Sender: TObject); 
var 
    F : TForm; 
begin 
    F := TOneOfYourChildForms.Create(Self); 
    F.Parent := Self; 
    F.Show(); 
end; 

만들기 모두 당신의 아이는 당신이 표시하고 다른 한편으로 숨기려는 하나에 표시 할이 유사 형성한다. 캡션을 제거하려면 BorderStyle을 자식 폼의 bsNone으로 설정하십시오. 이러한 대신 직접 만든 경우 프로젝트 설정에서 양식 자동 작성 기능을 해제하십시오.

+1

가끔은 호스팅 된 양식을 잘 작동시키기 위해 좀 더해야합니다. http://stackoverflow.com/questions/4385948/how-to-avoid-issues-when-embedding-a-tform-in-another-tform/4386129 # 4386129 –

+0

안녕 Villie와 데이비드, 나는이 두 접근법과 여기에서 발견 된 정보에서 약간의 성공을 거뒀습니다. http://stackoverflow.com/questions/4385948/how-to-avoid-issues-when-embedding-a -type-in-another-tform/4386129 # 4386129 그러나 자식의 부모 값을 설정할 때 모든 컨트롤이 부모 폼에서 지정됩니다. 자식 폼에서 키 누르기 나 마우스 클릭이 감지되지 않습니다 ... 이것은 표준적인 자식 - 부모 동작입니까? 어떻게 피할 수 있습니까? 당신의 도움을 주셔서 감사합니다 – jmc

1

나는이 디자인으로 성공을 거두었으며 TFrame 내에서 "기본 폼"의 내용을 도왔다 고 생각합니다. 기본 폼을 표시하려면 프레임 스왑을 수행하면됩니다.

+0

포인터를 주셔서 감사합니다 존 - 여러 가지 "수준"의 부모 - 자식 관계가있을 때 이런 종류의 기법이 작동합니까? 예를 들어 메인 폼은 세 번째 하위 메뉴를 열 수있는 하위 메뉴를 엽니 다 (한 번에 3 개 이하). – jmc

+0

나는 왜 안 보이지. 모든 스왑을 처리하는 기본 폼에서 컨트롤러 클래스를 생성합니다. –