Crear Arbol como Menu

Odalis Castro
18 de Octubre del 2010
Uso Forms Developer 9i
Necesito hacer una forma con un arbol jerarquico como menú, de manera que cuando den doble clic sobre un nodo me abra una forma.

Hice la forma, cree el arbol segun una tabla llamada menú asi:

COD_MENU PADRE_MENU NOMBRE_FORMA ARCHIVO NIVEL
1 OpcionPadre1 1
11 1 Submenu1 2
12 1 Submenu2 2
13 1 SubMenu3 2
1201 12 Nodo1 forma1 3
9 OpcionPadre2 1
90 9 Nodo2 forma2 2

El arbol lo armé con la funcion Ftree.Add_Tree_Node.

Tengo 2 problemas

1. No sé cómo hacer para que cuando le dé doble clic sobre un nodo forms me diga el nodo que estoy escogiendo para así poder mandar a abrir la forma que corresponde

2. No he podido hacer que al arbol le salgan íconos en los nodos.

Le agradecería si me puede ayudar con esto.

Mil gracias.

Carlos A. Romero m.
13 de Noviembre del 2010
Buenas tardes Odalis, me registré hoy, pero tengo información de como resolver tus problemas, claro si todavia los tienes y si estas usando la version 9i cliente-servidor, porque si la usas web, es otra la solucion.
A) Llamar Modulo con el doble click
1) programas el call_form('modulo') en el trigger WHEN-TREE-NODE-ACTIVATED del bloque que contiene el menu de arbol.
2) en regedit (FORMS60_PATCH)colocas la ruta de la carpeta que contiene los *.fmx; *.rep.

B) viasualizar los iconos
1) en regedit (UI_ICON)colocas la ruta de la carpeta que contiene los iconos
2) en el query de la tabla que llena tu estructura de arbol, el campo icon, su valor debe ser el nombre del icono que quieres que muestre en el momento de abrir tu menu(arbol).
espero esas lineas te ayuden, saludos.

Carlos A. Romero m.
13 de Noviembre del 2010
Programcion de tu trigger:
DECLARE
d_valor VARCHAR2(100);
d_icon VARCHAR2(20);
d_list ParamList;
BEGIN
if Id_null(Get_Parameter_List('parameter')) then
d_list := CREATE_PARAMETER_LIST('parameter');
end if;

d_valor:=Ftree.Get_Tree_Node_Property('menu.menu',:System.Trigger_Node,Ftree.NODE_STATE);
IF d_valor = Ftree.LEAF_NODE THEN
d_valor:= Ftree.Get_Tree_Node_Property('menu.menu',:System.Trigger_Node,Ftree.NODE_VALUE);
:control.d_menu := substr(d_valor,1,8)||Ftree.Get_Tree_Node_Property('menu.menu',:System.Trigger_Node,Ftree.NODE_LABEL);
d_valor:= substr(d_valor,9,30);
d_icon:= Ftree.Get_Tree_Node_Property('menu.menu',:System.Trigger_Node,Ftree.NODE_ICON);
if upper(d_icon) = 'TOPMOD' then
-- Run_Product(REPORTS,d_valor,ASYNCHRONOUS,RUNTIME,FILESYSTEM,d_list,null);
if substr(d_valor,1,2) 'SG' then
--call_form('CARF10112',HIDE,DO_REPLACE);
CALL_FORM(d_valor, hide, do_replace);
--Open_Form(d_valor,NO_ACTIVATE, NO_SESSION);
else
Open_Form(d_valor,ACTIVATE, SESSION);
end if;
elsif upper(d_icon) = 'R' then
Run_Product(REPORTS,d_valor,ASYNCHRONOUS,RUNTIME,FILESYSTEM,d_list,null);
-- elsif upper(d_icon) = 'PLSQL' then
-- corre_plsql(d_valor);
end if;
END IF;
END;