2012-06-21 3 views
2

프로젝트와 관련하여 도움이 필요합니다. firemonkey의 페이지 컨트롤에 여러 개의 TabItems을 실행하는 루틴이 있으며 탭에 닫기 버튼이 있어야합니다. 새 탭에는 탭 항목의 스타일러에서 닫기 버튼을로드하기위한 체크 박스가 있습니다. 페이지에 기본 탭이 있으며 일부 버튼에는 새 탭 항목이 런타임에 추가됩니다. 기본 탭 페이지를 닫을 때 이벤트를 적용 할 수는 있지만 런타임에 생성 된 탭 페이지에서는 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다. 런타임 TTabItem 만들기, firemonkey

런타임 tabitems

procedure TForm1.Button1Click(Sender: TObject); 
var 
    t : TTabItem; 
    o : TFmxObject; 
    i : Integer; 
    c : TControl; 
begin 
    t := TTabItem.Create(pgeControl); 

    t.Parent := pgeControl; 

    o := FindBinding('imgCloseTabPage'); 
    if o<>nil then 
    begin 
    for i := 0 to ComponentCount - 1 do 
    begin 
     if Components[i] is TCheckBox then 
     begin 
     TCheckBox(Components[i]).OnClick := CheckBox1Click; 
     end; 
    end; 
    end; 

    if pgeControl.TabCount - 1 <= nTab then 
    begin 
    nTab := nTab + 1; 
    t.Index := nTab 
    end 
    else 
    begin 
    t.Index := pgeControl.TabCount - 1; 
    nTab := pgeControl.TabCount - 1; 
    end; 
    t.Tag := nTab; 

    t.Text := 'Some text...' + ' ' + IntToStr(nTab); 
    t.Name := 'tabPatient' + IntToStr(nTab); 

    t.Height := 35; 
    t.Width := 250; 
    t.Margins.Top := 0; 
    t.Margins.Left := 0; 
    t.Margins.Bottom := 0; 
    t.Margins.Right := 0; 

    t.Padding.Top := -5; 
    t.Padding.Left := 0; 
    t.Padding.Bottom := 0; 
    t.Padding.Right := 0; 

    t.TextAlign := TTextAlign.taLeading; 
    t.Width := (Length(t.Text) * 6) + 60; 
    t.Font.Size := 15; 
    t.StyleLookup := 'tabMainStyle1'; 

    l := TLayout.Create(t); 
    l.Parent := t; 
    l.Align := TAlignLayout.alClient; 
    l.Margins.Top := -5; 
    l.Margins.Left := 5; 
    l.Margins.Right := 5; 
    l.Margins.Bottom := 5; 
    l.Padding.Top := 0; 
    l.Padding.Left := 0; 
    l.Padding.Bottom := 0; 
    l.Padding.Right := 0; 

    pgeControl.ActiveTab := pgeControl.Tabs[pgeControl.TabCount - 1]; 
end; 
+0

새로운 탭마다 새로운 체크 박스를 만드시겠습니까? – Peacelyk

+0

아니요, 저는 새로운 탭 항목마다 체크 상자를 만들지 않습니다. 스타일러에서 마녀는 탭 항목을 런타임에 생성 할 때로드합니다. – ManosM

답변

1

사용자 지정 스타일을 applyed 한 당신은 후 FindBinding 전화 갈까요위한 코드의 조각이다. 현재이 보다 먼저 호출하므로 개체를 찾을 수 없습니다. 또한 물체를 찾을 때 실수가있었습니다.

때문에 할당해야이

o := t.FindBinding('imgCloseTabPage'); 
if o<>nil then 
begin 
    if o is TCheckBox then 
    TCheckBox(o).OnClick := CheckBox1Click; 
end; 

t.StyleLookup := 'tabMainStyle1'; 

후 이벤트했습니다.

+0

도와 줘서 고맙지 만 작동하지 않는 것 같습니다. 제안에 따라 코드를 변경하더라도 이벤트가 실행되지 않습니다. 두 경우 모두 이벤트가 무시됩니다. 다른 생각이 있으십니까? 홀 프로젝트를 보낼 수 있습니다. 필요한 경우가 있습니다. 다시 한 번 감사드립니다. 감사합니다. – ManosM

+0

내 의견을 잊어 버렸습니다. 도와 드리고 해결할 수있었습니다. 감사드립니다. – ManosM

관련 문제