Search the Community
Showing results for tags 'dynamic menu'.
Found 1 result
-
Hello, I'm having trouble creating a dynamic menu from a table using the Ribbon component in Delphi 12. I've created the tabs as the main menu options and the groups as submenus, but when I try to create the items for each group, I only get one. Here's the image and code. If anyone knows how to solve the problem I would be very grateful. CODE: procedure TfrmPrincipal.Cargar_Menu; var TabItem : TRibbonTabItem; Group : TRibbonGroup; BarAction : TActionClientItem; PadreIDTab : Integer; PadreIDGrupo : Integer; BarItem : TActionBarItem; Bg : TRibbonLargeButtonControl; Bs : TRibbonSmallButtonControl; begin ribMenu.Tabs.Clear; QryMenu.Close; QryMenu.SQL.Clear; QryMenu.SQL.Add('SELECT * '); QryMenu.SQL.Add('FROM Menu '); QryMenu.SQL.Add('WHERE (padre_id IS NULL OR padre_id = 0) AND activo = 1 '); QryMenu.SQL.Add('ORDER BY orden'); QryMenu.Open; QryMenu.First; while not QryMenu.Eof do // Crear las pestañas principales begin TabItem := ribMenu.Tabs.Add; TabItem.Caption := Trim(QryMenu.FieldByName('titulo').Value); PadreIDTab := QryMenu.FieldByName('menu_item_id').Value; QrySubMenu.Close; QrySubMenu.SQL.Clear; QrySubMenu.SQL.Add('SELECT * '); QrySubMenu.SQL.Add('FROM Menu '); QrySubMenu.SQL.Add('WHERE padre_id = :PadreIDTab AND activo = 1 '); // Obtener los grupos de la pestaña QrySubMenu.SQL.Add('ORDER BY orden'); QrySubMenu.Parameters.ParamByName('PadreIDTab').Value := PadreIDTab; QrySubMenu.Open; QrySubMenu.First; while not QrySubMenu.Eof do // Crear los grupos dentro de la pestaña begin if UpperCase(QrySubMenu.FieldByName('tipo').Value) = 'GRUPO' then begin Group := TRibbonGroup.Create(ribMenu); Group.Parent := TabItem.Page; Group.Caption := Trim(QrySubMenu.FieldByName('titulo').AsString); PadreIDGrupo := QrySubMenu.FieldByName('menu_item_id').Value; // Capturar el ID del grupo QryItems.Close; QryItems.SQL.Clear; QryItems.SQL.Add('SELECT * '); QryItems.SQL.Add('FROM Menu '); QryItems.SQL.Add('WHERE padre_id = :PadreIDGrupo AND activo = 1 '); // Obtener los ítems del grupo QryItems.SQL.Add('ORDER BY orden'); QryItems.Parameters.ParamByName('PadreIDGrupo').Value := PadreIDGrupo; QryItems.Open; QryItems.First; while not QryItems.Eof do // Crear los ítems dentro del grupo begin if UpperCase(QryItems.FieldByName('tipo').Value) = 'ITEM' then begin BarItem := amMenu.ActionBars.Add; BarAction := BarItem.Items.Add; BarAction.Caption := Trim(QryItems.FieldByName('titulo').Value); BarItem.ActionBar := Group; end; QryItems.Next; end; QryItems.Close; // Cerrar la consulta de ítems end; QrySubMenu.Next; end; QrySubMenu.Close; // Cerrar la consulta de grupos QryMenu.Next; end; QryMenu.Close; // Cerrar la consulta de pestañas end;