사용자의 상태에 따라 특정 메뉴 항목을 선택적으로 활성화해야합니다. 내가 원하는 실제 항목을 사용할 수 있도록 코드를 가져 왔지만 다중 레벨 메뉴에서 사용할 수있는 각 상위 메뉴 항목을 모두 활성화하는 방법을 볼 수 없습니다. 메뉴 항목을 활성화하지 않으면 사용자가 연결할 수 없으므로 메뉴 항목을 계속 사용할 수 없습니다.프로그래밍 방식으로 메뉴 항목 (및 모든 부모) - Delphi
예를 들어 내가
EditTop
EditSub1
Editsub2
EditSubSub1
EditSub3
이 있다면 나는 EditSubSub1을 활성화 할 수 있지만 나 또한 그러므로뿐만 아니라 Editsub2 및 EditTop를 활성화해야하거나 사용자에 의해 도달 할 수 없습니다. 그게 내가 도와 주셔서 감사합니다.
나는 순간에이 코드가있는 모든 것을 사용하지
우선 몇 가지 코드 (다른 코드 나에게 메뉴 I이 사용하려는 이름이 포함 된 TStringList를 주신 가정) 다음. 검색 및 이름 에 기초한 TmenuItem을 반환
procedure DisableMenu(AMenu: TMenuItem);
//recurses through all the menu and disables eveything
var
i: integer;
begin
for i := 0 to AMenu.Count - 1 do
begin
AMenu[i].enabled := false;
DisableMenu(AMenu[i]);
end;
end;
다음 코드는 마지막 코드 나는 몇 가지 도움이 필요
function FindMnuItem(Menu: TMenu; MenuName: string): TMenuItem;
procedure FindSubItems(mnuItem: TMenuItem);
var i: integer;
begin
for i:=0 to mnuItem.Count- 1 do
if mnuItem.Items[i].Name= MenuName then
begin
Result:= mnuItem.Items[i];
break;
end
else
FindSubItems(mnuItem.Items[i]);
end;
var i: integer;
begin
Result:= nil;
for i:= 0 to Menu.Items.Count -1 do
begin
if Menu.Items[i].name = MenuName then
begin
Result:= Menu.Items[i];
break;
end
else
if Result<> nil then
break
else
FindSubItems(Menu.Items[i]);
end;
end;
(이 http://www.delphipages.com/forum/showthread.php?t=45723에서왔다). 이렇게하면 Stringlist AllowedMenus의 이름을 기반으로 각 메뉴 항목을 선택적으로 사용할 수 있지만 트리의 각 항목 위에있는 메뉴 항목이 아닌 해당 메뉴 항목 만 사용할 수 있습니다. 어떻게해야합니까?
//first disable all menu items
DisableMenu(MainMenu1.Items);
//now enable the ones we want enabled
for i := 0 to AllowedMenus.count-1 do
begin
MenuName := AllowedMenus[i];
FindMnuItem(MainMenu1, MenuName).Enabled := true; //enable an item
end
액션을 사용하고 각 작업에 대해 OnUpdate 이벤트 처리기를 작성하면됩니다. –