2012-07-20 2 views
0

작은 메뉴에서 여러 패널에 액세스 할 수있는 단일 창 응용 프로그램을 만들고 싶습니다. 나는 한쪽에서 패널을 밀어 넣고 싶다.TPanel in extra unit (디자이너 포함)

작은 데모 응용 프로그램을 만들었고 모든 것이 작동합니다. 유일한 문제는 내 데모 응용 프로그램에 대해 한 가지 형식으로 약 7 개의 패널이 있다는 것입니다. 그것들이 서로 위에 놓여 있기 때문에 그 패널들에 대한 개요를 유지하고 그것들을 바꾸기는 어렵다.

그래서 각 패널에 대한 추가 단위를 만들고 싶습니다. 원하는대로 패널을 디자인하고 변경 한 다음 코드를 사용하여 기본 폼에 추가 할 수 있습니다.

양식 fmx 파일을보고 패널 용으로 만들고 패널 용 .pas를 만들었습니다.

Unit2.pas :

unit Unit2; 

interface 

uses ... 

type 
    TPanel1 = class(TPanel) 
    Label1: TLabel; 
end; 
var 
    Panel1: TPanel1; 

implementation 
{$R *.fmx} 

end. 

Unit2.fmx는 :

object Panel1: TPanel1 
    Left = 0 
    Top = 0 
    Caption = 'Panel1' 
    ClientHeight = 551 
    ClientWidth = 800 
    Visible = False 
    StyleLookup = 'backgroundstyle' 
    object Label1: TLabel 
    Position.Point = '(8,8)' 
    Width = 120.000000000000000000 
    Height = 15.000000000000000000 
    TabOrder = 9 
    Text = 'Panel1' 
    end 
end 

나는 지금 내 패널을 설계하는 디자이너를 사용할 수 있습니다. 내가 좋아하는 뭔가를 수행하여 기본 폼에서 사용 할 때 :

Panel1 := TPanel1.Create(Self); 
Panel1.Parent := Self; 

나는 단지 표준 TPanel과, 내가 디자인이 아닌 하나를 얻을.

모든 것을 동일하게 유지하고 기본 클래스를 TPanel에서 TForm으로 변경하면 예상대로 작동합니다 (테스트 할 .Parent 대신 .Show).

설계된 패널을 기본 폼으로 가져 오려면 어떻게해야합니까?

도움 주셔서 감사합니다.

+0

이유가 프레임을 도입 한 이유 ... – whosrdaddy

+0

@whosrdaddy와 동의하면 각 패널을 각 장치의 TFrame에 넣은 다음 1) 프레임을 만들고 2) 집합을 만들고 각 프레임의 부모를 양식의 기본 패널에 추가하십시오. –

+0

나는이 문제가 Firemonkey에 있다고 썼다. Firemonkey에는 프레임이 없습니다. – Marks

답변

3

내가 이것을하는 방법은 프레임의 FireMonkey와 동일한 임베디드 폼을 사용하는 것입니다. 당신의 패널의 각각에 대해

는 양식을 만들고, 여기에 패널을 추가 패널 내부

type TPanelForm1 = class(TForm) 
    Panel1: TPanel; 
    ... 

장소는 당신을 제어합니다.

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    PF1 := TPanelForm1.Create(Self); 
    PF1.Panel1.Parent := Self; 
    PF1.Position := ... 
    PF1.Align := ... 
end; 

(설정 위치 및 필요에 따라 속성을 맞 춥니 다) : 기본 형태에서

는 각 양식의 인스턴스를, 그리고 그것의 패널을 가져옵니다.

패널이 작 으면 하나의 양식에 여러 개의 패널을 추가하고 각 패널을 개별적으로 설정할 수 있습니다. 더 큰 패널 또는 더 나은 모듈성을 위해 각 양식에 하나씩 추가하십시오.

+0

이것은 수 시간 동안의 검색 및 시도 후에도 발견되었습니다. 필자는 패널 대신 TLayout을 사용하는 것을 권장합니다. 그들은 스타일이 아니며 이런 종류의 행동에 더 적합하다고 생각합니다. – Marks

+0

TPanel 대 TLayout은 원하는 방식에 따라 다릅니다. 물론 모든 컨트롤을 포함 할 수 있습니다. 예 : TTreeView는 디자인에 편리한 하위 단위입니다. –

1

TPanel 양식 자원에서 하위 구성 요소를로드하는 방법을 알지 못합니다. 그것이 폼과 프레임을 특별하게 만드는 이유입니다. 프레임에 액세스 할 수 없으면 대신 create all the subcomponents in code을 사용할 수 있습니다. GExperts를 사용하면 시작할 때 도움이됩니다. 새 양식을 만들고 패널을 디자인하는 방식으로 디자인하십시오. 모든 구성 요소를 선택하고 GExperts "components to code"도구를 사용하십시오. 그러면 클립 보드에 코드가 생깁니다. 패널 단위를 열고 생성자에서 생성 된 코드를 붙여 넣습니다. 아직 TPanel1에 존재하지 않는 필드를 참조하십시오, 그래서 클래스 선언에 누락 된 필드를 선언 갈 것

constructor TPanel1.Create(AOwner: TComponent); 
begin 
    inherited; 

    // paste GExperts-generated code here 
end; 

코드입니다. 이제 설계중인 양식을 삭제하거나 향후 설계 수정을 위해 저장할 수 있습니다. 변경 사항을 이전 코드에 붙여 넣기 만하면됩니다.