سلام.
شما باید از خصوصیت Tag هر کنترل استفاده کنید.
به هر یک از امکانات (نه هر یک از سطوح) یک شماره اختصاص بدید. بعد هر یک از این شماره ها رو روی Tag کنترل(های) مربوط به اون امکان قرار بدید (مثلا روی زیر منوهای یک منو). بعد موقع نمایش هر فرم با حلقه اون کنترلها رو فعال یا غیر فعال کنید.
برای دسترسی به همه زیر منوها هم میتونی (مثلا) از یک تابع بازگشتی استفاده کنی:
procedure SetMenuItem_Visibility(C:TMenuItem);
var
i: Integer;
begin
for i:=0 to C.Count-1 do
SetMenuItem_Visibility(C.Items[i]) ;
if C.Tag<>0 then
if FlagsList.IndexOf(IntToStr(C.Tag)) >=0 then
C.Visible:= False;
end;
فعلا خداحافظ :موفق: