2017-05-03 16 views
0

많은 페이지 (AdvPage1, AdvPage2, AdvPage3 ...)가있는 TAdvToolBarPager를 사용하고 있습니다. 각 페이지에는 많은 편집, 탐색기 등이 있습니다. 사용자 권한을 기반으로하고 싶습니다 제약 조건 속성, 즉 ADMIN에 대한 모든 페이지 (1,2,3)를 표시하고 싶지만 USER에 대해서만 페이지 (1,2) 또는 (1)을 표시하고 싶습니다.델파이의 한 페이지에 대해 visible 속성을 동적으로 설정했습니다.

다음 코드를 사용하여 모든 편집, 탐색기를 사용 중지 할 수 있습니다. 어떤 사람이 제약 조건에 따라 TAdvToolBarPager visble의 페이지를 설정할 수있는 방법을 도울 수 있습니까?/이것을 달성하기위한 다른 대안 방법. 미리 감사드립니다!

Procedure SetForm(Form: TForm; enabled: Boolean); 
var PropInfo : PPropInfo; 
i  : Integer; 
begin 
    for i := 0 to Pred(Form.ComponentCount) do 
    begin 
    if (Form.Components[i] is TDBEdit) or (Form.Components[i] is DBNavigator) then 
    begin 
    PropInfo := GetPropInfo(Form.Components[i].ClassInfo, 'Enabled'); 
    if PropInfo <> nil then 
     SetOrdProp(Form.Components[i], PropInfo, Ord(enabled)); 
    end; 
    end; 
end; 
+1

당신이 바로 TabVisible 속성을 설정할 수 없습니다 3 페이지의 거짓? 페이지를 보이지만 선택할 수 없도록하려면 TabEnabled를 False로 설정할 수 있습니다. –

+0

네, 언급 한 것을 사용하여 할 수 있습니다. 어떻게하면 TAdvToolBarPager에서 AdvPage로 TabVisible/TabEnabled를 반복하고 설정할 수 있습니까? Form.AdvToolBarPager1.AdvPages [1] .TabVisible : = False; Form.AdvToolBarPager1.AdvPages [2] .TabVisible : = False; Form.AdvToolBarPager1.AdvPages [1] .TabVisible : = False; 하지만 동적으로 설정하고 싶습니다. –

+0

"동적으로 설정"이란 의미를 설명 할 수 있습니까? 위의 SetForm 프로 시저를 어떻게 호출할까요? –

답변

1

질문에 대한 귀하의 의견에 따르면 및 관리자 페이지가 당신이 원하는 것을 항상이 단순화 된 절차를 수행해야을 세 번째로 가정 :

Procedure SetForm(Form: TForm; enabled: Boolean); 
var 
    i: Integer; 
begin 
    for i := 0 to Form.ComponentCount - 1 do begin 
    if (Form.Components[i] is TAdvToolBarPager) then begin 
     TAdvToolBarPager(Form.Components[i]).AdvPages[2].TabVisible := enabled; 
     Exit; // probably only one AdvToolBarPager available 
    end; 
    end; 
end; 
+0

감사합니다, 거의 작동합니다. 그러나 페이지 2, 3을 사용자에게, 1, 2, 3을 관리자에게 표시하려고하면 실패합니다. –

+0

코드를 조정하는 것이 상당히 쉽습니다. 관리 페이지가 각 양식마다 다를 때 까다로울 수 있습니다. 그러므로 나의 초기 질문. 어떤 페이지를 표시할지 여부를 결정하려면 공통 조건이 필요합니다. 이 조건을 완전히 명료하게 표현하지 않는 한 우리는 단지 추측 할 수 있습니다. –

+0

프로 시저에서 다른 매개 변수를 전달하여 표시 할 페이지를 결정했습니다. 이 코드를 사용하는 다른 문제가 있습니다. TAdvToolBarPager (Form.Components [i])를 만들 때 AdvPages [0] .TabVisible : = false. 페이지가 디스패치되지는 않지만 페이지의 내용이 표시됩니다. –