martes, 31 de marzo de 2009

Menu con Iconos (Power Builder)

Comenzaremos Creando un Workspace: sea PB10 o PB9.0


Nos Mostrara esta pequeña ventana y le damos OK

Le asignamos un nombre a muestra aplicacion. En este caso se llamara Menu1.


Ahora pasamos a realizar los primero pasos: File/New y selecionamos la ficha TARGET para creear nuestra libreria al cual le podemos asignar el mismo nombre.

Despues agregamos un menu: File/New y seleccionamos la ficha PB OBject y selecionamos Menú y le llamare m_mymenu el cual nos quedara de la siguiente manera:

En propiedades asignarle lo siguiente





MargeOption=
exclude!
MenuItemType=
MenuItemtypenormal!



Ahora procedemos a crear nuestra Ventana Donde se alojara nuestro menú: File/New y seleccionamos la ficha PB OBject y selecionamos Window
Nestra aplicacion quedara asi:













Ahora procedemos a Declarar Funciones externas:


aca estan por si no diferencian.
FUNCTION ulong LoadImageA(ulong hintance, string filename,uint utype,int x,int y,uint fload) LIBRARY "USER32.DLL"
FUNCTION boolean SetMenuItemBitmaps(ulong hmenu,uint upos,uint flags,ulong handle_bm1,ulong handle_bm2) LIBRARY "USER32.DLL"
FUNCTION int GetSystemMetrics( int nIndex ) LIBRARY "USER32.DLL"
FUNCTION ulong GetMenuItemID(ulong hMenu,uint uItem) LIBRARY "USER32.DLL"
FUNCTION int GetSubMenu(ulong hMenu,int pos) LIBRARY "USER32.DLL"
FUNCTION ulong GetMenu(ulong hWindow) LIBRARY "USER32.DLL"
FUNCTION boolean ModifyMenu(ulong hMnu, ulong uPosition, ulong uFlags, ulong uIDNewItem, long lpNewI) alias for ModifyMenuA LIBRARY "USER32.DLL"
Comenzando a Programar en la Ventana hacemos doble click en w_testmenu en el evento open.


Long ll_MainHandle
long ll_SubMenuHandle
integer li_MenuItemID
long ll_X
long ll_Y
long ll_BitmapHandleA
long ll_BitmapHandleB
// Win32 contants
Integer IMAGE_BITMAP = 0
Integer LR_LOADFROMFILE = 16
Integer SM_CXMENUCHECK = 71
Integer SM_CYMENUCHECK = 72
Integer MF_BITMAP = 4
Integer MF_BYCOMMAND = 0Integer MF_BYPOSITION = 1024
// asigna una varible al menú
ll_MainHandle = GetMenu(Handle(this))
// asigna a la variable el primer artículo de menú
ll_SubMenuHandle = GetSubMenu(ll_MainHandle,0)
// Cargando las imágenes en sus tamaños originales
ll_BitmapHandleA = LoadImageA(0,'ir.bmp',0,0,0,LR_LOADFROMFILE)
ll_BitmapHandleB = LoadImageA(0,'home.bmp',0,0,0,LR_LOADFROMFILE)
// consiga la identificación del menú del primer artículo del submenu
li_MenuItemID = GetMenuItemID(ll_SubMenuHandle,0)
ModifyMenu(ll_SubMenuHandle,li_MenuItemID,MF_BITMAP,li_MenuItemId,ll_BitmapHandleA)
// consiga la identificación del menú del primer artículo del submenu
li_MenuItemID = GetMenuItemID(ll_SubMenuHandle,1)
ModifyMenu(ll_SubMenuHandle,li_MenuItemID,MF_BITMAP,li_MenuItemId,ll_BitmapHandleB)
// onsiga a manija el tercer artículo de menú del submenu
ll_SubMenuHandle = GetSubMenu(ll_SubMenuHandle,2)
// obtener la identificación del menú del primer artículo del submenu
li_MenuItemID = GetMenuItemID(ll_SubMenuHandle,0)ModifyMenu(ll_SubMenuHandle,li_MenuItemID,MF_BITMAP,li_MenuItemId,ll_BitmapHandleA)
li_MenuItemID = GetMenuItemID(ll_SubMenuHandle,1)ModifyMenu(ll_SubMenuHandle,li_MenuItemID,MF_BITMAP,li_MenuItemId,ll_BitmapHandleB)
// de nuevo al inicio// Conseguir la variable del segundo submenu
ll_SubMenuHandle = GetSubMenu(ll_MainHandle,1)
// Consiga los tamaños para los cuadros, utilice el api de windows para los tamaños de las BITMAP
ll_x = GetSystemMetrics(SM_CXMENUCHECK)
ll_y = GetSystemMetrics(SM_CYMENUCHECK)
// Cargue las imágenes usando las dimensiones para el estado comprobado de las imagenes
ll_BitmapHandleA = LoadImageA(0,'ir.bmp', IMAGE_BITMAP ,ll_x,ll_y,LR_LOADFROMFILE)ll_BitmapHandleB = LoadImageA(0,'home.bmp',IMAGE_BITMAP ,ll_x,ll_y,LR_LOADFROMFILE)
SetMenuItemBitmaps(ll_SubMenuHandle,0,MF_BYPOSITION,ll_BitmapHandleA,ll_BitmapHandleB)SetMenuItemBitmaps(ll_SubMenuHandle,1,MF_BYPOSITION,ll_BitmapHandleB,ll_BitmapHandleA)
// Consiga la variable del tercer artículo de menú del submenu
ll_SubMenuHandle = GetSubMenu(ll_SubMenuHandle,2)
SetMenuItemBitmaps(ll_SubMenuHandle,0,MF_BYPOSITION,ll_BitmapHandleA,ll_BitmapHandleB)SetMenuItemBitmaps(ll_SubMenuHandle,1,MF_BYPOSITION,ll_BitmapHandleB,ll_BitmapHandleA)
//** fin de la Programacion***//

En la aplicacion hacemos doble click

open(w_testmenu)
Ahora procedemos a ejecutar la aplicacion y nos quedara. CTRL +R







Espero que lo disfruten, Cualquier duda de contactenme systemgds@hotmail.com,

Desarrollo - Soluciones Cabezera Animada


Ver Estadisticas