Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-07-2020
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 159
Poder: 15
steelha Va por buen camino
Menu Dinamico utilizando Ribbon

Muy buenas, asi como el tema dice; necesito ayuda para realizar un menu dinamico utilizando el componente Ribbon pero utilizando una Db. El problema consiste en que puedo montar los tabs que seran las diferentes opciones de menu, pero a la hora de crear grupos y los items en unos me crea en otros no y solo me coloca un item. no tengo idea de que hago mal. A continuacion dejo codigo he imagenes

Código Delphi [-]
procedure Tfrmprincipal.Carga_Menu;
var
  Group     : TRibbonGroup;
  TabItem   : TRibbonTabItem;
  BarItem   : TActionBarItem;
  BarAction : TActionClientItem;
  AnAction  : TAction;
  oldsql    : string;
begin
  oldsql := Dm.qrymenuitems.SQL.Text;
  Dm.qrymenu.Open;
  Dm.qrymenu.First;

  while not dm.qrymenu.Eof  do   //Crear las paginas/pestañas
  begin
    //Crear Pagina de la opcion principales del menu
    TabItem := mnPrincipal.Tabs.Add;
    TabItem.Caption := Trim(Dm.qrymenumCaption.Value);

    dm.qrymenuitems.SQL.Clear;
    dm.qrymenuitems.SQL.Text := 'Select * from tblMenu Where (mactivo = 1) and (mpertenece =' + 
     IntToStr((dm.qrymenuIDmenu.Value)) + ') Order by mpertenece,morden ASC';

    dm.qrymenuitems.Open;
    dm.qrymenuitems.First;

    Group := TRibbonGroup.Create(mnPrincipal);
    Group.Parent := TabItem.Page;
    Group.Caption := Trim(dm.qrymenuitemsmmenu.Value);

    while not Dm.qrymenuitems.eof do
    begin
      BarItem := amPrincipal.ActionBars.Add;
      BarAction := BarItem.Items.Add;
      amPrincipal.ActionBars.Add;
//        BarAction.Action := Action1;
      BarAction.Caption := Trim(Dm.qrymenuitemsmCaption.Value);
      BarItem.ActionBar := Group;

      Dm.qrymenuitems.Next;
    end;
    dm.qrymenu.Next;
  end;
  dm.qrymenuitems.SQL.Text := oldsql;
end;
Imágenes Adjuntas
Tipo de Archivo: png imagen2.PNG (11,8 KB, 31 visitas)
Tipo de Archivo: png imagen1.PNG (8,7 KB, 30 visitas)
Tipo de Archivo: png imagen3.PNG (8,6 KB, 28 visitas)

Última edición por dec fecha: 15-07-2020 a las 09:54:56.
Responder Con Cita
  #2  
Antiguo 19-07-2020
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Poder: 21
GerTorresM Va por buen camino
Exclamation Mira esta opción

Hola buen@s días, tardes, noches !!

Te sugiero que te des una visita en esta página https://www.axolot.com/axwribbon.htm, el componente es gratuito y el ejemplo que trae es muy sencillo, sin un poco de paciencia y un poco de tiempo en pruebas a la fija podrás creer el menú en tiempo de ejecución
Responder Con Cita
  #3  
Antiguo 21-07-2020
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 159
Poder: 15
steelha Va por buen camino
Gracias verificare
Responder Con Cita
  #4  
Antiguo 21-07-2020
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 159
Poder: 15
steelha Va por buen camino
El componente me trae error y ademas no queria utilizar compenentes de terceros prefiero el que trae delphi por default
Responder Con Cita
  #5  
Antiguo 20-05-2025
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 159
Poder: 15
steelha Va por buen camino
Retomando Correcion Codigo Menu Ribbon Dinamico

WoW tiempo sin pasar por aca. Habia dejado este tema sin resolver por cuestiones de mucho trabajo, malas decisiones y no tenia cabeza para seguir pero haces un mes retome la programación de este tipo de menu. Por fin les puedo dar un código funcional, terminado. Utilícenlo libremente para que no les
duela la cabeza como a mi.
Código Delphi [-]
procedure TfrmPrincipal.Button2Click(Sender: TObject);
var
  TabItem: TRibbonTabItem;
  Group: TRibbonGroup; // This will act as our TCustomActionBar
  BarAction: TActionClientItem;
  PadreIDTab: Integer;
  PadreIDGrupo: Integer;
  Action: TAction;
  i: Integer;
  GroupCaption: string;
  CurrentActionBarItem: 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 ASC');
  QryMenu.Open;
  QryMenu.First;

  // Limpiar las actionbars antes de empezar el proceso
  amMenu.ActionBars.Clear; // Importante: limpiar las action bars existentes

  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 ASC');
    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
        GroupCaption := Trim(QrySubMenu.FieldByName('titulo').AsString);
        Group := nil; // Inicializamos Group a nil

        // Buscar si ya existe un grupo con este Caption en la pestaña actual
        for i := 0 to TabItem.Page.ControlCount - 1 do
        begin
          if (TabItem.Page.Controls[i] is TRibbonGroup) and (TRibbonGroup(TabItem.Page.Controls[i]).Caption = GroupCaption) then
          begin
            Group := TRibbonGroup(TabItem.Page.Controls[i]);
            Break; // Se encontró el grupo existente, salir del bucle
          end;
        end;

        // Si no se encontró el grupo, crear uno nuevo
        if not Assigned(Group) then
        begin
          Group := TRibbonGroup.Create(ribMenu);
          Group.Parent := TabItem.Page;
          Group.Caption := GroupCaption;
        end;

        PadreIDGrupo := QrySubMenu.FieldByName('menu_item_id').Value; // Capturar el ID del grupo

        // Find or create the TActionBarItem associated with this TRibbonGroup
        CurrentActionBarItem := nil;
        for i := 0 to amMenu.ActionBars.Count - 1 do
        begin
          // A TRibbonGroup can be assigned to an ActionManager through an ActionBarItem
          // We can use the Group itself as the identifier, or set the ActionBarItem.Tag
          if amMenu.ActionBars[i].ActionBar = Group then
          begin
            CurrentActionBarItem := amMenu.ActionBars[i];
            Break;
          end;
          // Alternatively, if you prefer to use Tag (and ensure Tag is set for the ActionBarItem)
          // if (amMenu.ActionBars[i].Tag = PadreIDGrupo) then
          // begin
          //   CurrentActionBarItem := amMenu.ActionBars[i];
          //   Break;
          // end;
        end;

        if not Assigned(CurrentActionBarItem) then // If ActionBarItem for this group doesn't exist, create it
        begin
          CurrentActionBarItem := amMenu.ActionBars.Add; // Add creates a new TActionBarItem
          CurrentActionBarItem.ActionBar := Group; // Assign the TRibbonGroup to the ActionBarItem
          CurrentActionBarItem.Tag := PadreIDGrupo; // Store the group's ID in the ActionBarItem's Tag for lookup
        end;

        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
            OutputDebugString(PWideChar('Creando ítem: "' + Trim(QryItems.FieldByName('titulo').Value) + '" para el grupo "' + Group.Caption + '"'));

            Action := TAction.Create(Self); // Action owner is the form
            Action.Caption := Trim(QryItems.FieldByName('titulo').Value);
            Action.OnExecute := ItemClick;
            Action.Tag := QryItems.FieldByName('menu_item_id').AsInteger;

            BarAction := CurrentActionBarItem.Items.Add as TActionClientItem;
            BarAction.Action := Action;
            BarAction.Caption := Trim(QryItems.FieldByName('titulo').Value);

            // Add the correct control to the group, linked to the ActionClientItem
            if QryItems.FieldByName('tipo_control').AsString = 'LARGEBUTTON' then
            begin
              Bg := TRibbonLargeButtonControl.Create(Group); // Group as owner
              Bg.ActionClient := BarAction;
            end
            else if QryItems.FieldByName('tipo_control').AsString = 'SMALLBUTTON' then
            begin
              Bs := TRibbonSmallButtonControl.Create(Group); // Group as owner
              Bs.ActionClient := BarAction;
            end;
          end;
          QryItems.Next;
        end;

        QryItems.Close; // Close the query for items

      end; // End of if tipo = 'GRUPO'
      QrySubMenu.Next;
    end;
    QrySubMenu.Close; // Cerrar la consulta de grupos
    QryMenu.Next;
  end;

  if ribMenu.Tabs.Count >= 2 then
  begin
    // Simular click en la segunda pestaña (índice 1)
    ribMenu.TabIndex := 1;
    ribMenu.TabIndex := 0;
  end;

  ribMenu.Refresh;
  QryMenu.Close; // Cerrar la consulta de pestañas
end;

Muchas pero mucha suerte en sus proyectos el mio acaba de empezar asi que preparense para una tanda de preguntadera
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Menu Dinamico Utilizando Componente dxnavbar steelha Varios 13 16-04-2024 01:39:01
Menú dinámico con JavaScript y PHP lucasarts_18 PHP 14 24-11-2007 21:13:54
¿Cómo puedo hacer un menú Ribbon en Turbo Delphi? handel777 Gráficos 3 13-08-2007 09:55:55
Main Menu Dinamico cahosoft Varios 2 30-06-2005 09:45:56
Menu dinamico xxxFALKORxxx OOP 1 23-03-2005 18:06:51


La franja horaria es GMT +2. Ahora son las 17:56:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi