Jump to content
steelha

Delphi 12 Ribbon Issue

Recommended Posts

 

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;

preview.png

preview2.png

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×