domingo, 25 de julio de 2010

Función que carga Menú a un TreeView

Se debe crear una función en la ventana que contenga el Objeto TreeView, en mi caso mi función tiene por nombre of_loadmenu, con dos parametros:
am_menu de tipo Menu
ai_nodoarbol de tipo Integer
Copiar y Pegar:

Long li_i, li_Lugar ,li_TotSub, li_NuevoNodo
String ls_Nombre
TreeViewItem ltvi_TreeItem

FOR li_i = 1 TO UpperBound(am_menu.item)
//Elinina el simbolo & de la etiqueta del menu
li_lugar = Pos(am_menu.item[li_i].Text,"&")
IF li_lugar > 0 THEN
ls_Nombre = Replace(am_menu.item[li_i].Text,li_lugar,1,"")
ELSE
ls_Nombre = am_menu.item[li_i].Text
END IF
ltvi_TreeItem.label=ls_Nombre
//Para diferenciar submenus de opciones
li_TotSub = UpperBound(am_menu.item[li_i].item)
IF li_TotSub>0 THEN
ltvi_TreeItem.Bold = TRUE
ltvi_TreeItem.PictureIndex = 2
ltvi_TreeItem.SelectedPictureIndex = 2
ELSE
ltvi_TreeItem.Bold = FALSE
ltvi_TreeItem.PictureIndex = 3
ltvi_TreeItem.SelectedPictureIndex = 3
END IF
li_nuevoNodo = This.InsertItemLast(ai_nodoarbol,ltvi_TreeItem)
of_loadmenu(am_menu.item[li_i],li_nuevoNodo)
NEXT

Para seguir con el ejemplo, en el Evento Open de la Ventana:

m_menu_principal lm_Menu
lm_Menu = CREATE USING m_menu_principal

//Insertando Item Principal al TreeView
Integer li_Integer
li_Item = This.InsertItemLast(0, "Menu Principal", 1)


//Invocando a la Funcion of_load_menu para cargar el Objeto Menu al Objeto TreeView
of_loadmenu(im_Menu, li_Item)

Nota 1: Agradecimiento a Raúl Valverde quien ya que hace mucho tiempo atras dejo este código en el Foro de Sybase en Español.

Nota 2: Para el ejemplo se detalla crear la función en la ventana que contiene al Objeto TreeView pero ya depende de cada uno como implementar esta función en mi caso tengo un Standar User Object de tipo TreeView en el cual tengo esta función of_loadmenu.