15.2.- Como comenzar Debido a que turbo vision es una aplicacion basada en objetos lo unico que tenemos que hacer es redefinir aquellos que no nos satisfacen para nuestras rutinas, no tendremos que cambiar nada el codigo original. Este codigo base se mantiene inalterado dentro de las unidades solo vamos a extenderlo. Veamos una parte del programa que realice para una amiga, y su aspecto es el siguiente: PROGRAM CHEQUERA; USES OBJECTS,DRIVERS,VIEWS,MENUS,APP; CONST VENTANA = 100; CHEQUES = 101; ENTORNO = 102; LOGICA = 103; AYUDA = 104; CAPAZ = 105; ALUMNOS = 106; TYPE TIPO_MI_TRABAJO = OBJECT (TAPPLICATION) PROCEDURE INITMENUBAR ; VIRTUAL; PROCEDURE INITSTATUSLINE ; VIRTUAL; END; PROCEDURE TIPO_MI_TRABAJO.INITMENUBAR; VAR R : TRECT; BEGIN GETEXTENT (R); R.B.Y := R.A.Y + 1; MENUBAR := NEW (PMENUBAR,INIT (R,NEWMENU( NEWSUBMENU ('~A~RCHIVO',HCNOCONTEXT,NEWMENU( NEWITEM ('~P~ROGRAMA','F1',KBF1,VENTANA,HCNOCONTEXT, NEWITEM ('~C~HEQUES','F2',KBF2,CHEQUES,HCNOCONTEXT, NEWLINE ( NEWITEM ('~S~ALIDA','ALT-X',KBALTX,CMQUIT,HCNOCONTEXT, NIL))))), NEWSUBMENU ('~V~ENTANAS',HCNOCONTEXT,NEWMENU ( NEWITEM ('~S~IGUIENTE','F3',KBF3,CMNEXT,HCNOCONTEXT, NEWITEM ('~A~MPLIAR','F4',KBF4,CMZOOM,HCNOCONTEXT, NIL))), NEWSUBMENU ('~I~NFORMACION',HCNOCONTEXT,NEWMENU ( NEWITEM ('~E~NTORNO','F5',KBF5,ENTORNO,HCNOCONTEXT, NEWITEM('~L~OGICA','F6',KBF6,LOGICA,HCNOCONTEXT, NIL))), NEWSUBMENU ('A~Y~UDA SOBRE...',HCNOCONTEXT,NEWMENU ( NEWITEM ('~E~NTORNO','F7',KBF7,AYUDA,HCNOCONTEXT, NEWITEM ('~C~APACIDADES','F8',KBF8,CAPAZ,HCNOCONTEXT, NEWITEM ('~I~NTEGRANTES','F9',KBF9,ALUMNOS,HCNOCONTEXT, NIL)))), NIL)) ))))); END; PROCEDURE TIPO_MI_TRABAJO.INITSTATUSLINE; VAR R: TRECT; BEGIN GETEXTENT(R); R.A.Y := R.B.Y - 1; STATUSLINE := NEW(PSTATUSLINE, INIT(R, NEWSTATUSDEF(0, $FFFF, NEWSTATUSKEY('',KBF10,CMMENU, NEWSTATUSKEY('~ALT-X~ SALIDA',KBALTX,CMQUIT, NEWSTATUSKEY('~F4~ CREA VENTANA',KBF4,VENTANA, NEWSTATUSKEY('~ALT-F3~ CIERRA VENTANA',KBALTF3,CMCLOSE, NIL)))), NIL) )); END; VAR MI_TRABAJO : TIPO_MI_TRABAJO; BEGIN MI_TRABAJO.INIT; MI_TRABAJO.RUN; MI_TRABAJO.DONE; END. Fijese que nada funciona todavia, de esta manera usted podra ver como quedara su aplicacion final sin haber escrito todavia ni una sola linea!, y este es el prodigio de los objetos. La funcionalidad es independiente y es extendible facilmente. Ante todo vea el programa principal, es todo un misterio puesto que no se encuentran estos procedimientos en el programa y esto es porque son heredados intactos del objeto tapplication contenido en la unidad app. Cada una de las unidades nombradas tiene su cometido estos son: -Objects: Definiciones basicas, incluidas los tipos de los objetos para las colecciones. -Drivers: Manejadores de eventos, mouse y rutinas de bajo nivel. -Views : Objetos basicos para usar las ventanas. -Menus : Objetos para aniadir menus y linea de estatus a las aplicaciones. -App : Unidad que se encarga de las definiciones principales para la aplicacion. Enseguida se declaran las constantes de trabajo. Estas constantes indican el procedimiento ligado a ellas y puesto que turbo vision utiliza los numeros de 0-99, nosotros podemos usar solo desde el numero 100 hasta 999 para los comandos normales. Luego viene la declaracion del tipo objeto, tengase en cuenta que al derivar directamente de tapplication no ganamos nada puesto que este objeto se encarga solo de las inicializaciones, nosotros tenemos que cambiar los procedimientos de linea de menus y de status para mostrar algo util, por ello ambos son virtuales (puesto que tienen que cambiar), primero analicemos el metodo init_menubar: En primer lugar se declara una variable de tipo trect. Este es un objeto sencillo y define lo que es un rectangulo (el de las ventanas), getextent hace que se extienda a toda la pantalla luego lo que es r.b.y = r.a.y + 1 hace que se deje una linea en la parte superior, luego entra en juego la nueva forma de la sentencia new y todo lo que sigue es standard. La mejor forma de entenderlo es viendo como funciona, debe aprender esta estructura (o mejor copiela cuando la necesite). Las ayudas que le dare al lector son: -Hcnocontext: Es una constante para indicar que no se desea una ayuda sobre ese item en particular. Cuando termine el programa usted puede cambiarlo por un numero que indicara la ayuda que quiere que reciba el usuario. -kb: Seguido de alguna tecla indica que el comando se asocie a dicha tecla. Luego de colocar kb y la tecla se coloca el procedimiento que se asociara a aquella tecla. Le recomiendo mucho que experimente lo que puede lograr cambiando los parametros a su antojo. Lo que aparece entre ~~ sera resaltado y ademas tomado como la alternativa de atajo cuando se presione la letra cuando el menu se haya abierto. Debe tener cuidado con cerrar los parentesis correctamente, si necesita un menu vertical debe cambiar menubar por menubox, ademas debera reducir la coordenada de inicio cambiando los parametros R.B.Y. .