«Pasar» uno o varios ítems de un menú a la parte derecha
A veces es interesante poder situar una o varias opciones de un menú a la parte derecha, como una forma de diferenciarlas de las demás o por una característica púramente estética.
Utilizando el siguiente procedimiento se pueden mover uno o varios ítems.
Definimos un menú y sus ítems de la forma estandard en Delphi. Llamamos a éste procedimiento (en el OnShow del formulario por ejemplo) con el menú como parámetro y en índice del elemento que queremos «mover» a la parte derecha; ese y los siguiente serán desplazados a la parte derecha de la zona del título.
Ej: Total Commander, por ejempo, utiliza ésta característica con el menú ade ayuda:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | {:Pasa un item de menú a la derecha de la pantalla. Pasa un item de menú y todos los que hay a su derecha a la parte "derecha" de la barra de menús del formulario.} procedure MenuItemAtRight (MainMenu:TMainMenu; Position:Integer); var Handle:HMENU; MenuItemInfo:TMenuItemInfo; Buffer: array[0..79] of char; begin // Coger el handle del menu principal Handle := MainMenu.Handle; // Rellenar estructura FillChar (MenuItemInfo, SizeOf(TMenuItemInfo), 0); MenuItemInfo.cbSize := SizeOf(TMenuItemInfo); MenuItemInfo.fMask := MIIM_TYPE; MenuItemInfo.dwTypeData := Buffer; MenuItemInfo.cch := SizeOf(Buffer); // No se puede obtener la informacion del item del menú ? if not GetMenuItemInfo(Handle, Position, True, MenuItemInfo) then begin // salir Exit; end; // Modificar el tipo de menú para ponerlo a la derecha MenuItemInfo.fType := MenuItemInfo.fType or MF_RIGHTJUSTIFY; // No se puede establecer informacion del item de menú if not SetMenuItemInfo (Handle, Position, True, MenuItemInfo) then begin Exit; end; end; |
Puedes llamar a ésta funcioón de la siguiente forma:
1 2 3 4 5 | // Para poner el tercer eleento y los siguientes: MenuItemAtRight(Self.MainMenu1, 3); // Para poner el último elemento: MenuItemAtRight(Self.MainMenu1, Windows.GetMenuItemCount(Self.MainMenu1.Handle)-1); |
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…