Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-01-2013
cd.rafael cd.rafael is offline
Miembro
 
Registrado: abr 2012
Posts: 59
Poder: 13
cd.rafael Va por buen camino
popupmenu, menuitems y eventos

Cordial Saludo,

Solicito colaboración para resolver el siguiente tema:

Quiero generar un menú con base en los PopUpMenus contenidos en un Form. Ej.

(POPUPMENU)

Menu1 -> SubMenu1
--------> SubMenu2
Menu2 -> SubMenu3
--------> SubMenu4 -> SubMenu5
--------> SubMenu6
Menu3 -> SubMenu7
Menu4

El menú que se quiere crear es con un Ribbon (no fue decisión mia). La idea es que todos los menús y submenús que tengan eventos, se vuelvan botones en el ribbon.

Lo que no tengo ni idea es como hacer para leer la jerarquía de menús y submenús para q con los menús armar grupos y con los submenús los botones de cada grupo y además asignarle a cada OnExecute de cada uno de los TAction los eventos OnClick del SubMenú.



Agradezco de Antemano toda la colaboración que me puedan brindar.
Responder Con Cita
  #2  
Antiguo 30-01-2013
cd.rafael cd.rafael is offline
Miembro
 
Registrado: abr 2012
Posts: 59
Poder: 13
cd.rafael Va por buen camino
Cordial Saludo,

Logré realizar el armado del Menú Ribbon, pero ahora tengo problemas de Access Violation cuando cierro el form (MDICHILD). A continuación pongo el código para ver si alguien me puede indicar en dónde estoy cometiendo un error. Cabe anotar que en el evento close del formulario libero los objetos.

Los objeto globales son:

Código:
crpOpPagina: TCustomRibbonPage;
rtiOpTab:    TRibbonTabItem;
rgpOpciones: array of TRibbonGroup;
aclOpLista:  TActionList;
actOpciones: array of TAction;
Código:
var
    mniMenu:  TMenuItem;
    i, j:     integer;
    lBlItems: Boolean;
begin
    //Creación del ActionList
    aclOpLista := TActionList.Create(self);
    aclOpLista.Name := 'OpcionesForma';

    //Crear Página (TAB) Ribbon
    with FrmPrincipal.Ribbon1.Tabs.Add do
    begin
        Caption := 'Opciones Forma';
        KeyTip := 'OpcionesForma';
    end;

    crpOpPagina := FrmPrincipal.Ribbon1.Tabs[FrmPrincipal.Ribbon1.Tabs.Count - 1].Page;

    //Crear Grupos Ribbon
    for i := 0 to ComponentCount - 1 do
    begin
        if (Components[i].ClassName = 'TMenuItem') then
        begin
            if (TMenuItem(Components[i]).Caption <> '-') then
            begin
                if (Length(Trim(TMenuItem(Components[i]).Parent.Caption)) = 0) then
                begin
                    SetLength(rgpOpciones, Length(rgpOpciones) + 1);
                    rgpOpciones[Length(rgpOpciones)] := TRibbonGroup.Create(crpOpPagina.Parent);
                    rgpOpciones[Length(rgpOpciones)].Caption := TMenuItem(Components[i]).Caption;
                    rgpOpciones[Length(rgpOpciones)].Parent := crpOpPagina;
                    rgpOpciones[Length(rgpOpciones)].ActionManager := FrmPrincipal.MnuPrincipal;
                    rgpOpciones[Length(rgpOpciones)].KeyTip := TMenuItem(Components[i]).Caption;
                    rgpOpciones[Length(rgpOpciones)].Enabled := true;
                    rgpOpciones[Length(rgpOpciones)].Rows := 2;
                    rgpOpciones[Length(rgpOpciones)].GroupAlign := gaVertical;
                    with FrmPrincipal.MnuPrincipal.ActionBars.Add do
                    begin
                        lBlItems := False;
                        ActionBar := rgpOpciones[Length(rgpOpciones)];
                        //Crear las Opciones para cada grupo
                        for j := 0 to ComponentCount - 1 do
                        begin
                            if (Components[j].ClassName = 'TMenuItem') then
                            begin
                                mniMenu := TMenuItem(Components[j]);
                                while (Length(Trim(mniMenu.Parent.Caption)) > 0) do
                                begin
                                    if (mniMenu.Parent.Caption = TMenuItem(Components[i]).Caption) then
                                    begin
                                        SetLength(actOpciones, Length(actOpciones) + 1);
                                        actOpciones[Length(actOpciones)] := TAction.Create(aclOpLista);
                                        actOpciones[Length(actOpciones)].Name := mniMenu.Name;
                                        actOpciones[Length(actOpciones)].OnExecute := mniMenu.OnClick;
                                        with Items.Add do
                                        begin
                                        Action := actOpciones[Length(actOpciones)];
                                        KeyTip := mniMenu.Caption;
                                        Caption := mniMenu.Caption;
                                        CommandStyle := csButton;
                                        (CommandProperties as TButtonProperties).ButtonSize := bsLarge;
                                        ImageIndex := 49;
                                        Enabled := mniMenu.Enabled;
                                        end;
                                        lBlItems := true;
                                    end;
                                    mniMenu := mniMenu.Parent;
                                end;
                            end;
                        end; //--for j := 0 to ComponentCount - 1 do
                        if (not lBlItems) then
                        begin
                            mniMenu := TMenuItem(Components[i]);
                            SetLength(actOpciones, Length(actOpciones) + 1);
                            actOpciones[Length(actOpciones)] := TAction.Create(aclOpLista);
                            actOpciones[Length(actOpciones)].Name := mniMenu.Name;
                            actOpciones[Length(actOpciones)].OnExecute := mniMenu.OnClick;
                            with Items.Add do
                            begin
                                Action := actOpciones[Length(actOpciones)];
                                KeyTip := mniMenu.Caption;
                                Caption := mniMenu.Caption;
                                CommandStyle := csButton;
                                (CommandProperties as TButtonProperties).ButtonSize := bsLarge;
                                ImageIndex := 49;
                                Enabled := mniMenu.Enabled;
                            end;
                        end;
                    end; //--with FrmPrincipal.MnuPrincipal.ActionBars.Add do
                end;
            end;
        end;
    end;
    //
    crpOpPagina.Refresh;
    crpOpPagina.SetFocus;
end;
Muchas gracias.
Responder Con Cita
  #3  
Antiguo 30-01-2013
cd.rafael cd.rafael is offline
Miembro
 
Registrado: abr 2012
Posts: 59
Poder: 13
cd.rafael Va por buen camino
Cordial Saludo,

Ya encontré el error. Debe ser causa del cansancio por tanto trabajo que tengo.

En las referencias a los array me estoy pasando por uno los índices:


Código:
//En vez de 
rgpOpciones[Length(rgpOpciones)] 
actOpciones[Length(actOpciones)]

//debe ser
rgpOpciones[Length(rgpOpciones) - 1]
actOpciones[Length(actOpciones) - 1]
Espero que esto pueda servir de ayuda a alguien.

Muchas gracias.
Responder Con Cita
  #4  
Antiguo 31-01-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Movido de foro.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



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
PopupMenu !!! Ledian_Fdez OOP 6 08-11-2010 23:12:54
PopupMenu cmfab Varios 1 01-11-2010 23:00:18
El PopupMenu skinnerpro OOP 4 16-10-2007 01:47:30
popupMenu jorodgar Varios 7 20-04-2005 17:16:22
PopupMenu & MenuItems (URGENTE !!!) jymy788 Varios 2 31-08-2004 14:59:28


La franja horaria es GMT +2. Ahora son las 08:09:10.


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