Pedro
el ejemplo te muestra como y no usa comandos POO para ello
te explico el ejemplo, al parecer no esta claro...
el metodo RUN de la clase TApp, construye la ventana principal (como veras se usa comandos xbase para todo)
Code: Select all | Expand
//se contruye la ventana principal
DEFINE WINDOW ::hObjs["MAIN_WND"] FROM 1, 1 To 22, 75
//se condtruye la ribbon
DEFINE RIBBONBAR ::hObjs["RIBBON"] PROMPTS "Start","Edition","Tools","Themes","Help" OF ::hObjs["MAIN_WND"] ;
HEIGHT 160 TOPMARGIN 25 2010
::buildStart() //construye la pestaña "start", ver metodo buildStart para mas detalle
::buildEdition() //construye la pestaña "edition", ver metodo buildEdition para mas detalle
//asignamos el codeblock que ejecuta una accion cuando se selecciona una pestaña nueva
//el codeblock recibe 2 parametros, parametro 1: la pestaña que se esta seleccionando
//parametro 2: la pestaña anteriormente seleccionada
//ver metodo selectOption para mas detalle de la accion...
::hObjs["RIBBON"]:bAction = {| nNewOption, nOldOption | ::selectOption( nNewOption, nOldOption ) }
//inicialmente selecionamos la pestaña 1 (start) para que nos ejecute la accion de la misma y nos muestre el contenido
//que depende de ella en el espacio debajo de la ribbon
::selectOption(1)
//activamos la ventana principal
ACTIVATE WINDOW ::hObjs["MAIN_WND"];
on resize( oMain:movePanel( nWidth, nHeight ) )
explicacion de buildStart
Code: Select all | Expand
method TApp:buildStart()
local o := TStart()
//agrega (usando comandos xbase) un grupo a la pestaña start
add group ::hObjs["GRP1_START"] ribbon ::hObjs["RIBBON"] to option "START" prompt "Only a Group to Test"
//agrega (usando comandos xbase) botones al gropo antes creado, con sus respectivas acciones
@ 05,04 add button prompt "Boton 1 Start" ;
group ::hObjs["GRP1_START"] size 142, 25;
action o:button1()
@ 35,04 add button prompt "Boton 1 Start" ;
group ::hObjs["GRP1_START"] size 142, 25;
action o:button2()
return nil
explicacion de metodo selectOption
Code: Select all | Expand
method selectOption(nNew, nOld ) inline eval( ::hActions[nNew] )
//este metodo ejecuta una accion por cada pestaña seleccionada
//se creo un hash de acciones llamado ::hActions que contiene los codeblock que se ejecutaran por cada pestaña
//ejemplo:
//::hActions[1] = {|| TStart():run() }, cuando la pestaña es la numero 1 (start) selectOption ejecuta el eval de ese codeblock
//eval( ::hActions[nNew] ), le llega como parametro nNew, que es la pestaña actualmente seleccionda
//la accion siguiente es crear el panel que va debajo de la ribbon
explicacion de TSart():run()
Code: Select all | Expand
method TStart:run()
local oMain := ::oMain
//verifica que el panel debajo de la ribbon este creado
//si esta creado lo elimina y deja disponible la creacion de un nuevo panel
//el secreto esta en tener un solo panel para todas las opciones
//para mas detalle ver el metodo validaPanel
::oMain:validaPanel()
//crea el panel debajo de la ribbon
//para mas detalle ver el metodo defineWindow
::oMain:defineWindow( CLR_BLUE )
//crea controles dentro del panel
@ 10,10 say "ESTOY EN START" pixel
@ 40,10 button "Selecciona Edition" of ::oMain:hObjs["PANEL"] size 120,20 pixel action oMain:hObjs["RIBBON"]:setOption(2)
//activa el panel debajo de la ribbon
::oMain:activateWindow()
return nil
explicacion metodo validaPanel
Code: Select all | Expand
method TApp:validaPanel()
if ::oMain:hObjs["PANEL"] != nil //varibale donde se almacena el objeto panel que se usaran todas las pestañas, si el panel existe lo cierra
::oMain:closePanel() //para mas detalle ver el metodo closePanel()
::oMain:hObjs["MAIN_BRUSH"]:end()
end
return nil
creo que es suficiente para que veas mas o menos el proceso de como lograr lo que quieres