런타임 프레임을 생성하고 패널의 부모를 프레임에 설정하는 것과 같은 기존 패널을 추가 할 수 있습니까? 추가 할 때 프레임을 중복하여 사용합니까?런타임시 Tframes 생성 :
좋아 :
f:= Tframe. create(..)
...
panel3.parent = f; //where panel3 has many controls.
은 다음 F를 복제? 그게 가능 했어? 방법? 또는 다른 suggerstion? e
런타임 프레임을 생성하고 패널의 부모를 프레임에 설정하는 것과 같은 기존 패널을 추가 할 수 있습니까? 추가 할 때 프레임을 중복하여 사용합니까?런타임시 Tframes 생성 :
좋아 :
f:= Tframe. create(..)
...
panel3.parent = f; //where panel3 has many controls.
은 다음 F를 복제? 그게 가능 했어? 방법? 또는 다른 suggerstion? e
복제로 해결할 수 없을 것이라고 생각합니다. 필요한 기능은 다음과 같습니다.
function CreateFrameAndHostPanel(Owner: TComponent; Parent: TWinControl; Panel: TPanel): TFrame;
begin
Result := TFrame.Create(Owner);
Try
Result.Parent := Parent;
Panel.Parent := Result;
Except
FreeAndNil(Result);
raise;
End;
end;
모든 컨트롤에는 부모와 소유자가 있다는 것을 기억해야합니다. 소유자는 nil
일 수 있지만 코드를 통해 해당 컨트롤을 해제해야하므로 대부분의 컨트롤은 다른 구성 요소의 소유입니다.
따라서 소유자가 파괴되면 패널도 파괴됩니다. 그리고 패널이 디자인 타임에 생성 된 경우에는 해당 패널이 소유 한 형태로 소유됩니다.
해당 양식을 삭제하면 패널이 파괴됩니다.
런타임에서 패널을 만들고 양식 대신 소유자로 Application
을 설정하면 여러 가지 양식과 프레임으로 이동할 수 있습니다.
하지만 좋은 디자인 패턴입니까? 네가하려는 일을 모르지만 나쁜 생각 일거야!
일반적으로 디자인 타임에 전체 프레임을 패널로 디자인하는 것이 더 실용적입니다. 그런 다음 다른 패널이나 컨트롤에서 데이터를 복사하여 프레임을 만들 수있는 코드를 추가하십시오. 그게 더 나은 디자인 패턴이 될거야 ...
첫 번째 (FRAME1)를 만드는 데 사용한 코드와 동일한 코드로 새 프레임 (FRAME2)을 만들어야합니다. 그리고 나중에 FRAME2의 FRAME1에 포함 된 모든 구성 요소 (런타임에 생성됨)를 만들어야합니다. 이것에 대한
는 사용
for i := 0 to (FRAME1.ComponentCount - 1) do
...
cmp := TComponent(FRAME1.Component[i]);
... create cmp on Frame2
당신은 두 번째 대안을 시도 할 수 있습니다; TMemoryStream (SaveComponent)을 사용하여 FRAME1을 저장하고 나중에 새 프레임을 만들고 Stream에 저장된 정보를 검색합니다 (이 옵션을 테스트하지 않았습니다).
감사합니다.