![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
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. |
|
#2
|
|||
|
|||
|
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;
|
|
#3
|
|||
|
|||
|
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] Muchas gracias. |
|
#4
|
||||
|
||||
|
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. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|