Personalización de menús
Última modificación el Viernes, 24 abril 2009 07:56 Autor: ProgramadorWeb Lunes, 25 agosto 2008 07:54
Personalización de menús

Una de las opciones que más suelen valorar los usuarios de una aplicación es la posibilidad de personalizar su interfaz de usuario, por ejemplo barras de botones y menús, lo cual les permite adaptarlas a sus preferencias y trabajar más cómodamente. Para el programador, sin embargo, no es una tarea sencilla de implementar. ¿Cómo permitir, por ejemplo, la personalización de un menú?
Efectuar esa tarea directamente sobre el menú realmente no es sencillo, aunque con algo de trabajo podría hacerse. Resulta bastante más fácil, sin embargo, traspasar la estructura del menú a un control pensado específicamente para la visualización y modificación de listas jerárquicas de datos, como es el caso de un menú. Este control es TTreeView, y para copiar un menú completo en dicho control tan sólo habría que llamar a la función siguiente entregando dos parámetros: el nombre del menú y el del TTreeView destinatario.
// Procedimiento para copiar
// un TMainMenu a TTreeView
Procedure CopiaMenuATreeView(
Menu: TMainMenu; Arbol: TTreeView);
Var
Contador: Integer;
Nodo: TTreeNode;
// Procedimiento interno recursivo que se
// encarga de recorrer las opciones
Procedure AnadeOpcion(
Opcion: TMenuItem; Nodo: TTreeNode);
Var
Contador: Integer;
NuevoNodo: TTreeNode;
Begin
// Añadimos la opción recibida
NuevoNodo := Arbol.Items.AddChild(
Nodo, Opcion.Caption);
// y recorremos todas las que pudiera tener
For Contador := 0 To Opcion.Count-1 Do
// llamándonos de forma recursiva
AnadeOpcion(Opcion.Items[Contador],
NuevoNodo);
End;
Begin
// Añadimos un primer nodo raíz
Nodo := Arbol.Items.Add(Nil,
Menu.Name);
// y recorremos las opciones principales
// llamando a AnadeOpcion por cada una
For Contador := 0 To
Menu.Items.Count-1 Do
AnadeOpcion(
Menu.Items[Contador], Nodo);
End;
Tras insertar en un formulario un menú con algunas opciones y un TTreeView, podríamos ejecutar el programa y ver cómo la estructura de ese menú pasa automáticamente a la lista jerárquica. Allí el usuario puede modificar los títulos de las opciones y cambiar las teclas de acceso rápido. Incluso, disponiendo las opciones adecuadas, podría permitirse el desplazamiento de las opciones para que pudieran ser colocadas en el orden que interesase.
Lógicamente, finalizado el trabajo del usuario sería preciso recrear el menú a partir de los datos existentes en el TTreeView en un proceso que, básicamente, sería el inverso al desarrollado en el código anterior.
Si te ha parecido interesante únete a nuestra comunidad de FACEBOOK y compartelo con tus amigos.

Excelente trabajo