Hi,
How can I switch menus in the same container?
Thanks,
Ken
Hi,
How can I switch menus in the same container?
Thanks,
Ken
I'm not sure what you mean.
What is 'switch menus'? You have two menus you want to alternate with at form level?
Or something else?
Yes. I have multible tabs. When the tab is changed I want to use the appropriate menu for that tab.
The best solution I can find so far i to have a base menu and update this menu in the TWebPageControl OnChange event:
if WebPageControl1.ActivePage.Tag=1 then
begin
BaseMenu.BeginUpdate;
BaseMenu.Items.Assign(WebMainMenu1.Items);
BaseMenu.EndUpdate;
end else
if WebPageControl1.ActivePage.Tag=2 then
begin
BaseMenu.BeginUpdate;
BaseMenu.Items.Assign(WebMainMenu2.Items);
BaseMenu.EndUpdate;
end;
I spoke to soon. The TMenuItem events aren't assigned.
This works:
case WebPageControl1.ActivePageIndex of
0:BaseMenu:=WebMainMenu1;
1:BaseMenu:=WebMainMenu2;
end;
BaseMenu.Container:=WebHTMLDiv2;
BaseMenu.Visible:=True;
TfrmMain = class(TWebForm)
MainMenu: TWebMainMenu
public
{ Public declarations }
procedure MainMenuDelete();
procedure MainMenuInsert();
procedure MainMenuInsertSub();
procedure DoMainMenuClick(Sender: TObject);
end;
procedure TfrmMain.MainMenuDelete();
var
I: Integer;
LMenuItem: TMenuItem;
begin
MainMenu.BeginUpdate;
try
LMenuItem := TMenuItem(MainMenu.Components[0]);
for I := LMenuItem.Items.Count-1 downto 0 do
begin
LMenuItem.Items.Delete(I);
end;
finally
MainMenu.EndUpdate;
end;
end;
procedure TfrmMain.MainMenuInsert(AParentItem: TMenuItem);
var
LMenuItemNew: TMenuItem;
LMenuIndex: Integer;
begin
MainMenu.BeginUpdate;
try
if AParentItem=nil then
LMenuIndex := MainMenu.Items.Count
else
LMenuIndex := AParentItem.Count;
LMenuItemNew := TMenuItem.Create(nil);
LMenuItemNew.Name := 'ITEM_' + IntToStr(LMenuIndex); // encode parameter data in name
LMenuItemNew.Tag := LMenuIndex; // or tag
LMenuItemNew.Caption := 'NewMenuItem ' + IntToStr(LMenuIndex);
LMenuItemNew.OnClick := DoMainMenuClick; // common event handler
LMenuItemNew.Enabled := True; // or False
if AParentItem=nil then
begin
//MainMenu.Items.Insert(0, LMenuItemNew); // insert item at start
MainMenu.Items.Insert(LMenuIndex, LMenuItemNew); // insert item in the end
end else
AParentItem.Insert(LMenuIndex, LMenuItemNew);
finally
MainMenu.EndUpdate;
end;
end;
procedure TfrmMain.MainMenuInsertSub();
var
LMainMenuItem: TMenuItem;
LParentItem: TMenuItem;
begin
MainMenuInsert(nil);
LMainMenuItem := TMenuItem(MainMenu.Components[0]);
LParentItem := TMenuItem(LMainMenuItem.Items[LMainMenuItem.Count-1]);
MainMenuInsert(LParentItem);
MainMenuInsert(LParentItem);
MainMenuInsert(LParentItem);
MainMenuInsert(LParentItem);
MainMenuInsert(LParentItem);
MainMenuInsert(LParentItem);
MainMenuInsert(LParentItem);
end;
procedure TfrmMain.DoMainMenuClick(Sender: TObject);
begin
// read name or tag to determine action
ShowMessage(TMenuItem(Sender).Name);
end;